【发布时间】:2020-12-31 08:33:16
【问题描述】:
期望的行为
从自动填充搜索框结果中选择地点后,能够检索城市、州(地区)和国家/地区值。
实际行为
似乎每个Place 在其address_components 数组中可能有不同数量的值,因此无法通过它们在数组中的位置直接引用城市、州和国家。
问题
是否有一个既定的惯例可以轻松地从 Places 中获得一致的 City、State 和 Country 值?
我开始创建一个嵌套循环来检查address_components 数组值中的types 值,但感觉工作量太大,而且似乎types 数组中的值不需要是唯一的,例如type > political 可以在address_components 数组中出现多次。
我的尝试
相关代码
<script src="https://maps.googleapis.com/maps/api/js?key=********&libraries=places"></script>
// restrict search results to the 'cities' type
// see: https://developers.google.com/places/supported_types?csw=1#table3
var options = {
types: ['(cities)']
};
// create autocomplete
const autocomplete = new google.maps.places.Autocomplete(input, options);
// do stuff when selecting a search result
autocomplete.addListener("place_changed", () => {
const place = autocomplete.getPlace();
console.log("here is the place!");
console.log(place);
});
我认为我可以像这样获得城市、州(地区)和国家/地区值:
var place_city = place.name;
var place_region = place.address_components[1].long_name;
var place_country = place.address_components[2].short_name;
但是,以下示例显示,地点可能具有结构不同的 address_components 属性:
搜索词:Townsville QLD, Australia
返回 address_components 作为 4 个值的数组 - 国家作为第 4 个值包含在内:
[
{
"long_name": "Townsville",
"short_name": "Townsville",
"types": [
"colloquial_area",
"locality",
"political"
]
},
{
"long_name": "Townsville City",
"short_name": "Townsville",
"types": [
"administrative_area_level_2",
"political"
]
},
{
"long_name": "Queensland",
"short_name": "QLD",
"types": [
"administrative_area_level_1",
"political"
]
},
{
"long_name": "Australia",
"short_name": "AU",
"types": [
"country",
"political"
]
}
]
搜索词:Brisbane QLD, Australia
返回 address_components 作为 3 个值的数组 - 国家作为第三个值包含:
[
{
"long_name": "Brisbane",
"short_name": "Brisbane",
"types": [
"colloquial_area",
"locality",
"political"
]
},
{
"long_name": "Queensland",
"short_name": "QLD",
"types": [
"administrative_area_level_1",
"political"
]
},
{
"long_name": "Australia",
"short_name": "AU",
"types": [
"country",
"political"
]
}
]
搜索词:Acton Park TAS, Australia
返回 address_components 作为 5 个值的数组 - 国家作为第 4 个值包含:
[
{
"long_name": "Acton Park",
"short_name": "Acton Park",
"types": [
"locality",
"political"
]
},
{
"long_name": "Clarence City Council",
"short_name": "Clarence City",
"types": [
"administrative_area_level_2",
"political"
]
},
{
"long_name": "Tasmania",
"short_name": "TAS",
"types": [
"administrative_area_level_1",
"political"
]
},
{
"long_name": "Australia",
"short_name": "AU",
"types": [
"country",
"political"
]
},
{
"long_name": "7170",
"short_name": "7170",
"types": [
"postal_code"
]
}
]
【问题讨论】:
-
您需要处理
address_components数组以查找您需要的type。请参阅example in the documentation。
标签: javascript jquery google-maps-api-3