在Google地图的反向地理编码中获取确切的城市名称

7

通过使用Google Maps地理编码API,我能够获取特定坐标的格式化地址。为了获取确切的城市名称,我正在执行以下操作:

$.ajax({
    url: 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+long+'&sensor=false',
    success: function(data){
        var formatted = data.results;
        var address_array = formatted[6].formatted_address.split(',');
        var city = address_array[0];
   }
});

当使用浏览器坐标导出 latlong时,我的问题如下:

从坐标 19.210072.1800 中获取到的城市为 Mumbai,但是从大约3公里远的类似坐标中获取到的城市为 Mumbai Suburban。如何在不改变代码中的成功函数的情况下获得 Mumbai?我觉得结果数组的格式并不总是一致的,这就造成了在显示城市名称时的问题。

4个回答

6

今天我在进行研究时,发现了一种解决方法,如果有帮助的话。现在谷歌地图已经内置了Geocoder,因此您只需在API加载后创建一个Geocoder对象。

您可以轻松将其包装在函数中,并返回一个具有城市、州和邮政编码的对象。这个网站有所帮助,让我能够看到不同“类型”的含义:Reverse Geocoding

var geocoder = new google.maps.Geocoder,
    latitude = 28.54, //sub in your latitude
    longitude = -81.39, //sub in your longitude
    postal_code,
    city,
    state;
geocoder.geocode({'location': {lat:latitude, lng:longitude}}, function(results, status) {
  if (status === google.maps.GeocoderStatus.OK) {
    results.forEach(function(element){
      element.address_components.forEach(function(element2){
        element2.types.forEach(function(element3){
          switch(element3){
            case 'postal_code':
              postal_code = element2.long_name;
              break;
            case 'administrative_area_level_1':
              state = element2.long_name;
              break;
            case 'locality':
              city = element2.long_name;
              break;
          }
        })
      });
    });
  }
});

1
谢谢Brett :) 运行得很好 - Chandan Kumar

4
你需要查看结果的类型,而不是结果数组中的绝对索引。遍历结果数组,查找具有适当 type 的条目。看起来应该是:

  • locality 表示一个已纳入城市或镇政治实体

但数据可能因地区而异。

相关问题:从google geocode jquery获取国家

看起来你想要同时具有“locality”和“political”类型的条目:

{
   "long_name" : "Mumbai",
   "short_name" : "Mumbai",
   "types" : [ "locality", "political" ]
}

4

说实话,我正在寻找类似的东西,并尝试使用https://plus.codes/

如果您去掉编码部分,它会产生一个相对一致的城市、州和国家名称:

const extractCityName = latlng => {
  googleMapsClient.reverseGeocode({ latlng }, (err, response) => {
    if (!err) {
      return response.json.plus_code.compound_code.split(' ').slice(1).join(' ');
    }
  });
};


// examples: 

console.log(extractCityName(40.6599718,-73.9817292));
// New York, NY, USA

console.log(extractCityName(37.386052, -122.083851));
// Mountain View, CA, USA

console.log(extractCityName(51.507351, -0.127758));
// Westminster, London, UK

0
$.get({
            url: locAPI,
            success: function(data)
            {
                data.results[0].address_components.forEach(function(element){
                    // console.log(element.types);
                    if(element.types[0] == 'locality' && element.types[1] == 'political')
                    {
                        console.log('City:')
                        console.log(element.long_name);
                    }
                    if(element.types[0] == 'country' && element.types[1] == 'political')
                    {
                        console.log('Country:')
                        console.log(element.long_name);
                    }
                });
            }
        })

在我的情况下,我需要找到城市和国家的名称...这就是我所做的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接