Лучший способ получить компоненты адреса из ответа Google Places API

Я реализую Google Places в форме, в которой пользователь будет вводить свое местоположение. Местоположение может быть полным адресом или просто городом.

Я хочу получить каждый отдельный компонент адреса, предоставленного пользователем. Как лучше всего получить каждый компонент, например адрес, город, штат, почтовый индекс и страну.

В приведенном ниже коде я получаю компоненты, которые выглядят как массив. Нужно ли мне проходить через него или есть прямой способ получить доступ к каждому компоненту?

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

person Sam    schedule 05.01.2016    source источник


Ответы (2)


Цикл, наверное, самый простой. Нет прямого способа перейти прямо к, например. компонент адреса 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);

Однако это будет немного сложнее, если вы хотите обрабатывать больше, чем первый тип в каждом компоненте.

person spiv    schedule 07.01.2016
comment
Возможно, это устарело, нет состояния как типа. Для типа есть только административный_уровень_области_1 и политический, когда я ищу адреса и углубляюсь в адресные_компоненты. - person jcaruso; 21.01.2019

Посмотрите здесь пример из 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 (по ссылке ниже).

Таким образом, вы можете напрямую обращаться к каждому из place.address_components, как в array. А потом делай, что хочешь. Вот ссылка на этот пример: https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete

person m.aibin    schedule 05.01.2016