【问题标题】:Getting the street address from a google maps geocode call从谷歌地图地理编码调用中获取街道地址
【发布时间】:2013-12-20 17:42:28
【问题描述】:

我正在使用 google maps 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 number 的“subpremise”)。请参阅文档中的 this example of a geocoding result。

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

【问题讨论】:

  • 这对我来说很棒!感谢您的代码@froadie :)

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


【解决方案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】:

    使用“路线”而不是“街道地址”...

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        • 2016-08-12
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        • 2014-07-03
        • 2013-06-08
        相关资源
        最近更新 更多