从谷歌地图的地理编码调用中获取街道地址

9

我正在使用谷歌地图API对地址进行地理编码,并且需要将街道地址、城市、州和邮政编码分别获取到不同的字段中。根据返回结果中的地址组件类型文档,这是我的代码:

var address = "";
var city = "";
var state = "";
var zip = "";

geocoder.geocode( { 'address': inputAddress}, function(results, status){
    if (status==google.maps.GeocoderStatus.OK){
        // loop through to get address, city, state, zip
        $.each(results[0].address_components, function(){
            switch(this.types[0]){
                case "postal_code":
                    zip = this.short_name;
                    break;
                case "street_address":
                    address = this.short_name;
                    break;
                case "administrative_area_level_1":
                    state = this.short_name;
                    break;
                case "locality":
                    city = this.short_name;
                    break;                  
            }
        });
    } else{ alert("Invalid Address"); }
});

然而,当我输入地址时,“street_address”似乎没有被返回;相反,它以分开的字段返回,最常见的是“street_number”和“route”,偶尔还有其他字段(例如apt号的“subpremise”)。请参见文档中地理编码结果的示例
如何获取一个包含与街道地址相关的任何字段的地址变量?对于文档中的示例,我想要“1600 Ampitheatre Parkway”。

它对我非常有效!感谢您的代码@froadie :) - kyawagwin
3个回答

3
基于文档,street_address 是一种地址类型,但这并不一定意味着它是一种地址组件类型 - 它只可能是用于 types 数组的标签 - 每个在 results 数组中返回的对象都有这个数组:

返回结果中的 types[] 数组指示了地址类型。这些类型也可以在 address_components[] 数组中返回,以指示特定地址组件的类型。

你可能应该先遍历你的 results 数组,找到其中包含 types 数组中的 street_address 的那一个。然后使用该对象获取 formatted_address 属性(正如 Aperçu 所提到的)。正如 文档所述:"formatted_address 是包含此位置的人类可读地址的字符串"。当 type 为 street_address 时,formatted_address 等于 street_number + route (跟随任何其他可用的 address_components)。因此,你可以将 formatted_address 字符串进行 split(',') 操作以获取所需的组件 - 或者使用那个特定对象在 results 数组中的 address_components 数组来获取所需的组件(当然,这样做你需要自己连接 street_numberroute,因此需要添加逻辑)。

1
如果您想在字符串中获取所有地址字段,请使用“formatted_address”属性:
代码:
var geocoder = new google.maps.Geocoder();

var fullAdressData = '';

geocoder.geocode( { 'address': inputAddress}, function(results, status){
    if (status==google.maps.GeocoderStatus.OK){

        fullAdressData = results[0].formatted_address;

    } else{ alert("Invalid Address"); }
});

0

使用“route”代替“street_address”...

case "route":
      address = this.short_name;
      alert(address);
      break;

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