Для того же адреса, который введен пользователем при вводе адреса, google API автозаполнения в интерфейсе (с javacript) возвращает один результат и, таким образом, единый выбор для пользователя .Принимая во внимание, что Geocoder API на серверной части (PHP) возвращает два разных результата .
У меня есть серверная проверка, которая получает адрес, введенный пользователемблагодаря автозаполнению и проверяет этот адрес с геокодером.Если у меня нет результатов с геокодером или более одного результата (что является моим случаем, поскольку я получаю 2 результата с геокодером), я выбрасываю исключение.
Это проблема для меня, потому что моя проверка сгеокодер должен иметь возможность полагаться на автозаполнение.
Ниже приведено мое дополнительное объяснение
Объяснение:
У меня есть форма на моем веб-сайтегде пользователь вводит свой адрес в адресный ввод.Для этого ввода используется API автозаполнения Google с использованием JavaScript следующим образом.
var addressAutocompleteGoogleMaps = new google.maps.places.Autocomplete($myInputJqueryElement[0], {
componentRestrictions: {country: 'fr'},
types: ['geocode']
});
addressAutocompleteGoogleMaps.addListener('place_changed', function() {
var addressAutocompleteSelectedAddress = $myInputJqueryElement.val();
var autocompletionFormattedAddress = addressAutocompleteGoogleMaps.getPlace().formatted_address;
$myInputJqueryElement.val(autocompletionFormattedAddress);
// After having changed my form value to the formatted_address, I submit the form.
});
Теперь, если пользователь вводит следующий адрес
21bis Rue Claude Bernard, 75005 Paris, France
(как вы можете видеть, между пробелами21
и bis
в адресе), хорошо на внешней стороне, Автозаполнение Google, кажется, распознает этот адрес и дает пользователю единственный уникальный выбор .Как вы можете видеть ниже:
, если я выполняю console.log(addressAutocompleteGoogleMaps.getPlace());
, я могу увидеть один результат в моей консоли со следующими атрибутами:
place_id: "ChIJzX6RiOtx5kcRCaog3ti3QTs"
formatted_address: "21bis Rue Claude Bernard, 75005 Paris, France"
geometry: {location: _.P, viewport: _.Q}
Но в своем бэкэнде я использую службу геокодера Google и не допускаю более одного результата от API.
Если я использую тот же адрес, что и formatted_address
результата автозаполнения на внешнем интерфейсе, который равен 21bis Rue Claude Bernard, 75005 Paris, France
, и я отправляю его в API геокодера на моем бэкэнде с этим URL
https://maps.googleapis.com/maps/api/geocode/json?key=myKey&language=fr®ion=fr&address=21bis+Rue+Claude+Bernard%2C+75005+Paris%2C+France
(как вы можете видеть впараметры URL, между 21
и bis
нет пробела, потому что отправленный моим пользователем адрес, основанный на выборе автозаполнения Google, также не содержит пробела)
Я получаю следующие результаты отгеокодер:
Как вы можете видеть, я получаю два результата с геокодером с адреса 21bis Rue Claude Bernard, 75005 Paris, France
.
Но яс помощью автозаполнения можно получить только один результат.
Если значения place_ids не совпадают.При использовании API автозаполнения place_id составляет ChIJzX6RiOtx5kcRCaog3ti3QT
.Но с помощью API геокодирования я получаю два других идентификатора place_id: ChIJVeIPVu9x5kcRPHRX59oID5M
и ChIJG9djYOxx5kcR1JtnnCReAxU
.
То, что мне нравится
ПочемуGoogle Geocoder не возвращает те же результаты, что и Google Autocomplete?Как мне решить мою проблему?
Я хочу:
- либо мое автозаполнение выдаст те же 2 результата, что и мой геокодер
- либо мой геокодер выдаст один результат, такой же, как автозаполнение
(пс: и, кстати, я попытался набрать тот же адрес в Интернетегеокодер Google на https://developers.google.com/maps/documentation/geocoding/intro и я также получаю один адрес, как вы можете видеть ниже. Так почему же мое внутреннее использование API геокодирования по-прежнему возвращает 2 результата ??)