我正在尝试使用谷歌地图API获取地址组件,但无法正确解析结果。 我的代码如下:
// Ajax Call
$.ajax({
url: 'queryPage.php?',
data: 'varObtainGoogleAddress=y&' +
'varAPILink=' + encodeURIComponent(varAPILink),
dataType: 'json',
success: function(data) {
// Formatted Address
varFormattedAddress = data.result['formatted_address']; // Works!
}
});
我想要的是城市,州和邮政编码项目。 感谢这方面的任何帮助。我是一名自学成才的业余Web开发人员。:)
我写了一个函数。
/**
* geocodeResponse is an object full of address data.
* This function will "fish" for the right value
*
* example: type = 'postal_code' =>
* geocodeResponse.address_components[5].types[1] = 'postal_code'
* geocodeResponse.address_components[5].long_name = '1000'
*
* type = 'route' =>
* geocodeResponse.address_components[1].types[1] = 'route'
* geocodeResponse.address_components[1].long_name = 'Wetstraat'
*/
function addresComponent(type, geocodeResponse, shortName) {
for(var i=0; i < geocodeResponse.address_components.length; i++) {
for (var j=0; j < geocodeResponse.address_components[i].types.length; j++) {
if (geocodeResponse.address_components[i].types[j] == type) {
if (shortName) {
return geocodeResponse.address_components[i].short_name;
}
else {
return geocodeResponse.address_components[i].long_name;
}
}
}
}
return '';
}
如何使用示例:
...
myGeocoder.geocode({'latLng': marker.getPosition()}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK && results[1]) {
var country = addresComponent('country', results[1], true);
var postal_code = addresComponent('postal_code', results[1], true);
}
});
...
我
假设您正在做的是反向地理编码。
返回的对象如下所示(来自示例):
{
"address_components": [
{
"long_name": "Grand St/Bedford Av",
"short_name": "Grand St/Bedford Av",
"types": [
"bus_station",
"transit_station",
"establishment"
]
},
{
"long_name": "Williamsburg",
"short_name": "Williamsburg",
"types": [
"neighborhood",
"political"
]
},
{
"long_name": "Brooklyn",
"short_name": "Brooklyn",
"types": [
"sublocality_level_1",
"sublocality",
"political"
]
},
...
没有直接的方法可以访问结果的街道、门牌号等,因为地址的每个部分可以同时是多种类型。您必须遍历address_components
并根据需要进行过滤。
这是另一个涵盖此主题的 Stackoverflow 线程:从地理编码器结果中获取城市?
有点晚了,但这是我有
街 === 街道
NRO === street_number
extraerCalle(resultado: IResult): string | undefined {
const route = resultado.address_components.find(ac => !!ac.types.find(type => type === 'route'));
return route && route.long_name;
}
extraerNro(resultado: IResult): string | undefined {
const streetNumber = resultado.address_components.find(ac => !!ac.types.find(type => type === 'street_number'));
return streetNumber && streetNumber.long_name;
}
extraerCalleNro(resultado: IResult): string {
const calle = this.extraerCalle(resultado);
const nro = this.extraerNro(resultado);
return (calle || '') + (calle && nro ? ` ${nro}` : '');
}