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

时间:2013-12-04 09:48:27

标签: parsing google-maps-api-3 geocoding

我使用谷歌地图API对地址进行地理编码,我需要在不同的字段中获取街道地址,城市,州和邮政编码。根据结果​​中返回的address component types文档,这是我的代码:

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”)。请参阅文档中的this example of a geocoding result

如何获取包含与街道地址相关的任何字段的地址变量?对于文档中的示例,我想要“1600 Ampitheatre Parkway”。

3 个答案:

答案 0 :(得分:1)

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

  

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

您可能应该做的是首先遍历您的results数组,然后在street_address数组中找到包含types的数组。然后使用该对象获取formatted_address属性(as mentioned by Aperçu)。作为the doc states:“formatted_address是一个包含此位置的人类可读地址的字符串”。当typestreet_address时,formatted_address等于street_number + route(其他任何address_components可用)。因此,您可以split(',') formatted_address字符串来获取所需的组件 - 或者使用address_components数组中该特定对象的results数组来获取您的组件需要(当然这样做你需要自己连接street_numberroute - 所以需要增加逻辑。)

答案 1 :(得分: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"); }
});

答案 2 :(得分:0)

使用“route”而不是“street_address”...

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