谷歌 API 地址组件



我正在尝试使用谷歌地图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}` : '');
  }

相关内容

最新更新