【问题标题】:Best way to get address components from Google Places API response从 Google Places API 响应中获取地址组件的最佳方式
【发布时间】:2016-01-05 06:06:25
【问题描述】:

我正在以用户将输入他/她的位置的形式实施 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>

【问题讨论】:

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


    【解决方案1】:

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

    不过,如果您想在每个组件中处理比第一种类型更多的内容,这将变得更加复杂。

    【讨论】:

    • 这可能已经过时了,没有“状态”作为类型。对于类型,当我查找地址并深入到 address_components 时,只有“administrative_area_level_1”和“political”。
    【解决方案2】:

    在此处查找来自 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(来自下面的链接)。

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

    【讨论】:

      【解决方案3】:

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

      等等……

      【讨论】:

        猜你喜欢
        • 2021-03-18
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-30
        • 1970-01-01
        相关资源
        最近更新 更多