从 Google Places API 响应中获取地址组件的最佳方式
Best way to get address components from Google Places API response
我正在实施 Google 地点表单,用户将在其中输入 his/her 地点。该位置可以是完整地址或只是一个城市。
我想获取用户提供的地址的每个单独组成部分。获取每个组成部分的最佳方式是什么,即地址、城市、州、邮政编码和国家/地区。
在下面的代码中,我得到的组件似乎是一个数组。我必须循环遍历它还是有直接的方法让我访问每个组件?
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>
<script type="text/javascript">
google.maps.event.addDomListener(window, 'load', function () {
var places = new google.maps.places.Autocomplete(document.getElementById('location'));
google.maps.event.addListener(places, 'place_changed', function () {
var place = places.getPlace();
var components = place.address_components;
});
});
</script>
在此处查找 google 中的示例:
var address = '';
if (place.address_components) {
address = [
(place.address_components[0] && place.address_components[0].short_name || ''),
(place.address_components[1] && place.address_components[1].short_name || ''),
(place.address_components[2] && place.address_components[2].short_name || '')
].join(' ');
}
这是创建函数:Vancouver Greater Vancouver BC(来自下面的 link)。
因此您可以像 array
一样直接访问每个 place.address_components
。
然后做你想做的事。
这是此示例的 link:
https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete
循环可能是最简单的。没有直接的方法可以直接跳到例如state
地址组件(如果存在的话),它是一个简单的数组。
您还可以将数组处理成允许按类型直接查找的内容:
var components_by_type = {};
for (var i = 0; i < place.address_components.length; i++) {
var c = place.address_components[i];
components_by_type[c.types[0]] = c;
}
console.log(components_by_type['state'].short_name);
不过,如果您想在每个组件中处理比第一种更多的类型,那将变得有点复杂。
从 place.address_components 您将获得地址组件数组,因此您可以按以下顺序与数组索引分开:
let postalCode = place.address_components[place.address_components-1]>
let countryName = place.address_components[place.address_components-2]
let stateName = place.address_components[place.address_components-3]
let districtName = place.address_components[place.address_component-4]
let cityName place.address_components[place.address_components-5]
等等...
我正在实施 Google 地点表单,用户将在其中输入 his/her 地点。该位置可以是完整地址或只是一个城市。
我想获取用户提供的地址的每个单独组成部分。获取每个组成部分的最佳方式是什么,即地址、城市、州、邮政编码和国家/地区。
在下面的代码中,我得到的组件似乎是一个数组。我必须循环遍历它还是有直接的方法让我访问每个组件?
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>
<script type="text/javascript">
google.maps.event.addDomListener(window, 'load', function () {
var places = new google.maps.places.Autocomplete(document.getElementById('location'));
google.maps.event.addListener(places, 'place_changed', function () {
var place = places.getPlace();
var components = place.address_components;
});
});
</script>
在此处查找 google 中的示例:
var address = '';
if (place.address_components) {
address = [
(place.address_components[0] && place.address_components[0].short_name || ''),
(place.address_components[1] && place.address_components[1].short_name || ''),
(place.address_components[2] && place.address_components[2].short_name || '')
].join(' ');
}
这是创建函数:Vancouver Greater Vancouver BC(来自下面的 link)。
因此您可以像 array
一样直接访问每个 place.address_components
。
然后做你想做的事。
这是此示例的 link:
https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete
循环可能是最简单的。没有直接的方法可以直接跳到例如state
地址组件(如果存在的话),它是一个简单的数组。
您还可以将数组处理成允许按类型直接查找的内容:
var components_by_type = {};
for (var i = 0; i < place.address_components.length; i++) {
var c = place.address_components[i];
components_by_type[c.types[0]] = c;
}
console.log(components_by_type['state'].short_name);
不过,如果您想在每个组件中处理比第一种更多的类型,那将变得有点复杂。
从 place.address_components 您将获得地址组件数组,因此您可以按以下顺序与数组索引分开:
let postalCode = place.address_components[place.address_components-1]>
let countryName = place.address_components[place.address_components-2]
let stateName = place.address_components[place.address_components-3]
let districtName = place.address_components[place.address_component-4]
let cityName place.address_components[place.address_components-5]
等等...