我使用谷歌地图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”。
答案 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
是一个包含此位置的人类可读地址的字符串”。当type
为street_address
时,formatted_address
等于street_number + route
(其他任何address_components
可用)。因此,您可以split(',')
formatted_address
字符串来获取所需的组件 - 或者使用address_components
数组中该特定对象的results
数组来获取您的组件需要(当然这样做你需要自己连接street_number
和route
- 所以需要增加逻辑。)
答案 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;