Автозаполнение карт Google Отформатированный адрес не совпадает с отображаемым

1

У меня есть поле ввода (пусть его называют $ addressInput), в котором я прошу пользователя указать его адрес.

Затем я использую этот адрес в своем back-end, чтобы получить широту и долготу адреса.

Для некоторых адресов, например, таких, как "214 Avenue du Général Leclerc, Eaubonne, France", если пользователь вводит этот адрес, автозаполнение карт Google будет предлагать два разных адреса пользователю в раскрывающемся списке автозаполнения. Первый (= предложение A) - "214 Avenue du Général Leclerc, Eaubonne, France", а второй (= предложение B) - "214 Rue du Général Leclerc, Eaubonne, France".

Но если пользователь нажимает на предложение A, хотя вход заполняется "214 Avenue du Général Leclerc, Eaubonne, France", реальный формат format_address, возвращаемый автозаполнением карт Google, не совпадает с предложением A, это "214 Avenue de la Подразделение Leclerc, 95160 Montmorency, Франция ".

Почему автозаполнение карты google не подсказывает прямое значение formatted_value в раскрывающемся списке? Почему он показывает пользователю адрес в раскрывающемся списке, но внутренне использует другой отформатированный адрес? Можно ли заставить API автозаполнения отображать formatted_address в раскрывающемся списке выбора? В этом случае у меня было бы предложение A = "214 Avenue de la Division Leclerc, 95160 Montmorency, France" (вместо "214 Avenue du Général Leclerc...") и предложение B = "214 Rue du Général Leclerc, Eaubonne, Франция"

Ниже приведен код, который позволил мне узнать об этом:

var $addressAutoCompleteInput = $('.js-address-autocomplete-input'); //this is my input

var addressAutocomplete = new google.maps.places.Autocomplete($addressAutoCompleteInput[0], {
    componentRestrictions: {country: 'fr'}
});

addressAutocomplete.addListener('place_changed', function() {
    console.log(addressAutocomplete.getPlace().formatted_address)
});

Точное поведение происходит на официальной странице google maps autocompete https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete?hl=fr

Маркер, показанный на карте, не имеет такого же formatted_address, как и вход пользователя.

Спасибо.

  • 0
    Почему это так, я не работаю в Google, поэтому не могу вам сказать. Теперь несколько вещей: 1) адрес, который вы пытаетесь использовать, кажется, не существует, и 2) если вы хотите больше контролировать поведение автозаполнения, используйте класс сервиса автозаполнения и создайте свой собственный объект. Смотрите этот ответ для полного примера.
  • 0
    Да, тот факт, что адрес не существует, - это то, что заставляет Детали Места находить что-то еще (что существует). В дополнение к issetracker.google.com/issues/35823492 в (очень хорошем) ответе ниже, вы также можете посмотреть на issetracker.google.com/111160335 .
Теги:
google-maps
google-maps-api-3
google-places-api

1 ответ

1
Лучший ответ

Чтобы понять, что происходит, вы должны взглянуть на идентификатор места первого предложения. Это EjEyMTQgQXZlbnVlIGR1IEfDqW7DqXJhbCBMZWNsZXJjLCBFYXVib25uZSwgRnJhbmNl.

Когда вы видите эти идентификаторы длинного места, а не что-то вроде ChIJHzwQtJeLGGARxaSLI71pDSY это означает, что адрес не существует в базе данных Google. Autocomplete принимает ваш вход, потому что они предполагают, что вы, возможно, знаете лучше, чем Google, точный адрес. Таким образом, они создают интерполированный идентификатор места (длинный) и передают его деталям. Однако подробности просматривают существующие места, которые могут соответствовать пользовательскому вводу, поэтому они разрешают вам длинное место ID EjEyMTQgQXZlbnVlIGR1IEfDqW7DqXJhbCBMZWNsZXJjLCBFYXVib25uZSwgRnJhbmNl в существующее место ID ChIJ31WNvopo5kcRoAlv3ui0Aj0 214 Avenue de la Division Leclerc, 95160 Montmorency, France.

Это неправильное поведение для интерполяционных идентификаторов места было сообщено в трекер-проблеме Google, и оно обрабатывается с ошибкой

https://issuetracker.google.com/issues/35823492

Согласно последним сообщениям, Google в настоящее время работает над решением этой проблемы. Не стесняйтесь показывать ошибку, чтобы добавить свой голос и подписаться на уведомления.

Можно ли заставить API автозаполнения отображать formatted_address в раскрывающемся списке выбора?

Для этого вам необходимо создать отсутствующий адрес "214 Avenue du Général Leclerc, Eaubonne, France" в базе данных Google. Единственный вариант - сообщить отсутствующий адрес в Google, отправляющий отзыв, как описано в справке:

https://support.google.com/maps/answer/3094045?hl=en&ref_topic=3093612

Как только Google добавит недостающий адрес, автозаполнение должно работать должным образом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню