如何从纬度和经度点获取城市名称?

IT技术 javascript node.js google-maps geocoding latitude-longitude
2021-02-14 04:50:40

有没有办法使用javascript的谷歌地图api从纬度和经度点获取城市名称?

如果是这样,我可以看看一个例子吗?

6个回答
惊人的!我阅读了这一点,现在已经解决了太多的问题 ;) 谢谢。
2021-04-27 04:50:40
如果您使用的是 javascript API,每个 IP 地址和每个用户是相同的,但是如果您使用的是 PHP 并且您认为您会达到这些限制,您需要将请求限制为每秒 1 次或使用代理服务器,但要小心代理,谷歌并不愚蠢,你不能锤他们。更多信息请访问:developers.google.com/maps/documentation/business/articles/...
2021-05-03 04:50:40

这是一个完整的示例:

<!DOCTYPE html>
<html>
  <head>
    <title>Geolocation API with Google Maps API</title>
    <meta charset="UTF-8" />
  </head>
  <body>
    <script>
      function displayLocation(latitude,longitude){
        var request = new XMLHttpRequest();

        var method = 'GET';
        var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude+'&sensor=true';
        var async = true;

        request.open(method, url, async);
        request.onreadystatechange = function(){
          if(request.readyState == 4 && request.status == 200){
            var data = JSON.parse(request.responseText);
            var address = data.results[0];
            document.write(address.formatted_address);
          }
        };
        request.send();
      };

      var successCallback = function(position){
        var x = position.coords.latitude;
        var y = position.coords.longitude;
        displayLocation(x,y);
      };

      var errorCallback = function(error){
        var errorMessage = 'Unknown error';
        switch(error.code) {
          case 1:
            errorMessage = 'Permission denied';
            break;
          case 2:
            errorMessage = 'Position unavailable';
            break;
          case 3:
            errorMessage = 'Timeout';
            break;
        }
        document.write(errorMessage);
      };

      var options = {
        enableHighAccuracy: true,
        timeout: 1000,
        maximumAge: 0
      };

      navigator.geolocation.getCurrentPosition(successCallback,errorCallback,options);
    </script>
  </body>
</html>
有没有办法在没有用户批准的情况下从经纬度找出用户位置?
2021-04-20 04:50:40
@omerio 谢谢,但我在那里编写了代码,如果他/她想继续,我强迫用户单击允许。
2021-04-28 04:50:40
这实际上给了我我的确切家庭住址。正是我想要的。我如何像城市和州或邮政编码一样提取?
2021-04-28 04:50:40
@VikasVerma 如果您被允许在未经用户同意的情况下找到用户位置,那将是严重的隐私泄露
2021-05-05 04:50:40

在 node.js 中,我们可以使用node-geocoder npm module从 lat、lng.、

地理.js

var NodeGeocoder = require('node-geocoder');

var options = {
  provider: 'google',
  httpAdapter: 'https', // Default
  apiKey: ' ', // for Mapquest, OpenCage, Google Premier
  formatter: 'json' // 'gpx', 'string', ...
};

var geocoder = NodeGeocoder(options);

geocoder.reverse({lat:28.5967439, lon:77.3285038}, function(err, res) {
  console.log(res);
});

输出:

节点geo.js

[ { formattedAddress: 'C-85B, C Block, Sector 8, Noida, Uttar Pradesh 201301, India',
    latitude: 28.5967439,
    longitude: 77.3285038,
    extra: 
     { googlePlaceId: 'ChIJkTdx9vzkDDkRx6LVvtz1Rhk',
       confidence: 1,
       premise: 'C-85B',
       subpremise: null,
       neighborhood: 'C Block',
       establishment: null },
    administrativeLevels: 
     { level2long: 'Gautam Buddh Nagar',
       level2short: 'Gautam Buddh Nagar',
       level1long: 'Uttar Pradesh',
       level1short: 'UP' },
    city: 'Noida',
    country: 'India',
    countryCode: 'IN',
    zipcode: '201301',
    provider: 'google' } ]
两个输出都是相同的,但 node-geocoder 是获取地址的简化module,@google/maps 是获取地址的 api,因为我们需要配置。
2021-04-27 04:50:40
感谢您提供非常清晰和有效的反馈,“节点地理编码器”和“@google/maps”的选择之间有什么区别吗?,尽管它们似乎做同样的事情
2021-04-30 04:50:40

这是谷歌地理编码网络服务的最新示例

https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY

只需将 更改为YOUR_API_KEY您从Google Geocoding API获得的 API 密钥

P/S:地理编码 API位于Places NOT Maps 下 ;)

这是使用Promise的现代解决方案:

function getAddress (latitude, longitude) {
    return new Promise(function (resolve, reject) {
        var request = new XMLHttpRequest();

        var method = 'GET';
        var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + latitude + ',' + longitude + '&sensor=true';
        var async = true;

        request.open(method, url, async);
        request.onreadystatechange = function () {
            if (request.readyState == 4) {
                if (request.status == 200) {
                    var data = JSON.parse(request.responseText);
                    var address = data.results[0];
                    resolve(address);
                }
                else {
                    reject(request.status);
                }
            }
        };
        request.send();
    });
};

并这样称呼它:

getAddress(lat, lon).then(console.log).catch(console.error);

Promise在“then”中返回地址对象或在“catch”中返回错误状态代码

如果没有访问密钥,这将无法工作。传感器参数也已过时
2021-04-25 04:50:40