Автозаполнение карт Google Отформатированный адрес не совпадает с отображаемым - PullRequest
0 голосов
/ 10 мая 2018

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

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

Для некоторых адресов, например, для этого "214 Avenue du Général Leclerc, Eaubonne, France", если пользователь вводит этот адрес, автозаполнение карт Google предложит пользователю два разных адреса в раскрывающемся списке автозаполнения. Первый (= предложение A) - «214 Rue 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", реальный адрес formatted_address, возвращаемый автозаполнением карт Google, не совпадает с предложением A, это "214 Авеню де ла Дивизион Леклерк, 95160 Montmorency, France ".

Почему в автозаполнении карт 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. https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete?hl=fr

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

Спасибо.

1 Ответ

0 голосов
/ 12 мая 2018

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

Когда вы видите эти длинные идентификаторы вместо ChIJHzwQtJeLGGARxaSLI71pDSY, это означает, что адрес не существует в базе данных Google. Автозаполнение принимает ваши данные, потому что они предполагают, что вы, возможно, лучше знаете, чем Google, точный адрес. Таким образом, они создают интерполированный идентификатор места (длинный) и передают его в детали. Однако в деталях выполняется поиск в существующих местах, которые могут соответствовать вводу пользователя, поэтому они сопоставляют длинный идентификатор места EjEyMTQgQXZlbnVlIGR1IEfDqW7DqXJhbCBMZWNsZXJjLCBFYXVib25uZSwgRnJhbmNl с идентификатором существующего места 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 добавляет отсутствующий адрес, автозаполнение должно работать как положено.

...