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

fro*_*die 8 parsing geocoding google-maps-api-3

我使用谷歌地图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"); }
});
Run Code Online (Sandbox Code Playgroud)

但是,当我输入地址时,似乎没有返回"street_address"; 相反,它作为单独的字段返回,通常是"street_number"和"route",偶尔还有其他字段(例如apt号码的"subpremise").请参阅文档中的地理编码结果示例.

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

Suv*_*jah 3

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

\n\n
\n

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

\n
\n\n

您可能应该做的是首先遍历数组并找到数组中results包含 a 的数组。然后使用该对象获取属性(如 Aper\xc3\xa7u 提到的)。正如文档所述:“这是一个包含该位置的人类可读地址的字符串”。当is时,等于 a (后跟任何其他可用的值)。因此,您可以使用字符串来获取您需要的组件 - 或者使用数组中该特定对象的数组来获取您需要的组件(当然,这样做您需要自己连接 和-所以需要添加逻辑)。street_addresstypesformatted_addressformatted_addresstypestreet_addressformatted_addressstreet_number + routeaddress_componentssplit(\',\')formatted_addressaddress_componentsresultsstreet_numberroute

\n