使用Google Maps Geocoding 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];
}
});
其中使用浏览器坐标派生lat
和long
。我的问题如下:
从坐标19.2100
和72.1800
,我将城市视为Mumbai
,但是从距离大约3公里的类似坐标集中,我将城市视为Mumbai Suburban
。如何在不更改代码成功功能的情况下获取Mumbai
?在我看来,结果数组并不总是坚持在我显示城市名称时产生问题的相同格式。
答案 0 :(得分:4)
所以我今天试图解决这个问题,如果能帮到任何人,我会找到这个解决方案。 Google地图附带了现在内置的Geocoder,因此您只需在API加载后创建地理编码器对象。
您可以轻松地将其包装在一个函数中,然后返回一个包含城市,州和邮政编码的对象。这个网站有助于我看到不同的'类型'意思是: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 :(得分:3)
您需要查看结果的类型,而不是结果数组中的绝对索引。遍历结果数组,查找具有相应type的条目。看起来像是:
但数据可能因地区而异。
相关问题:Grabbing country from google geocode jquery
看起来你想要同时拥有' locality'和政治'类型:
{
"long_name" : "Mumbai",
"short_name" : "Mumbai",
"types" : [ "locality", "political" ]
}
答案 2 :(得分:0)
对于它的价值,我一直在寻找类似的东西,并且正在尝试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