从Google Places API响应中获取地址组件的最佳方式

时间:2016-01-05 06:06:25

标签: javascript google-places-api google-places

我以用户输入其位置的形式实施Google地方信息。该位置可以是完整地址,也可以只是一个城市。

我想获取用户提供的地址的每个单独组件。获取每个组件的最佳方式是什么,即地址,城市,州,邮政编码和国家/地区。

在下面的代码中,我得到的组件看起来像是一个数组。我是否必须循环访问它,或者是否有直接访问每个组件的方法?

<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>

2 个答案:

答案 0 :(得分:4)

循环可能是最简单的。没有直接的方式直接跳到例如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);

如果你想要处理的不仅仅是每个组件中的第一个类型,那将会变得更加复杂。

答案 1 :(得分:1)

在这里查看来自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(' ');
}

这是创建的功能:温哥华大温哥华地区(从下面的链接)。

因此,您可以直接访问place.address_components中的每个array。 然后做你想做的事。 以下是此示例的链接: https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete