Google предлагает различные способы использования Place Autocomplete API. Двумя из них являются классы Autocomplete и AutocompleteService. Всякий раз, когда я использую класс Autocomplete, я без проблем получаю компоненты адреса. Однако всякий раз, когда я использую AutocompleteService, компоненты адреса отсутствуют. Я получаю адрес, но не так, как с автозаполнением (я могу разобрать город, улицу, штат и т. д.).
Есть ли способ получить поле компонентов адреса с помощью AutocompleteService БЕЗ дополнительного вызова с идентификатором места?
Пример автозаполнения
function initAutocomplete() {
autocomplete = new google.maps.places.Autocomplete(document.getElementById('search'), {
componentRestrictions: { country: ["us", "ca"] },
fields: ["address_components", "geometry"],
types: ["address"],
});
autocomplete.addListener("place_changed", () => {
const place = autocomplete.getPlace(); // Includes Address Components and Geometry (Lat and Lng)
});
}
Пример службы автозаполнения
function initAutocompleteService() {
const service = new google.maps.places.AutocompleteService();
service.getPlacePredictions({
input: "1600 Amphitheatre",
componentRestrictions: {
country: 'us'
},
types: ['address']
}, (predictions, status) => {
console.info(predictions); // It shows the address a single string but missing address components
});
}
Есть ли способ получить поле компонентов адреса с помощью AutocompleteService БЕЗ дополнительного вызова с идентификатором места?
Краткий ответ: нет, нельзя.
Если вы беспокоитесь о выставлении счетов, вам следует использовать Сессионные токены.
Согласно документации:
AutocompleteService.getPlacePredictions()
использует токены сеанса для группировки запросов автозаполнения для целей выставления счетов.
Интересная часть:
Вы можете использовать тот же токен сеанса, чтобы сделать один запрос сведений о месте в результате вызова
AutocompleteService.getPlacePredictions()
. В этом случае запрос автозаполнения объединяется с запросом сведений о месте, и звонок тарифицируется как обычный запрос сведений о месте. Плата за автозаполнение запроса не взимается.
Google предоставляет пример того, как создать токен сеанса:
// Create a new session token.
var sessionToken = new google.maps.places.AutocompleteSessionToken();
// Pass the token to the autocomplete service.
var autocompleteService = new google.maps.places.AutocompleteService();
autocompleteService.getPlacePredictions({
input: 'pizza near Syd',
sessionToken: sessionToken
},
displaySuggestions);
Когда пользователь выбирает место, вы можете повторно использовать тот же токен сеанса для получения сведений о месте с интересующими вас полями, чтобы получать счета только за запрос сведений о месте (как указано выше).
Вы также можете прочитать Лучшие практики оптимизации затрат.
Программная реализация
Используйте токен сеанса с вашими запросами автозаполнения мест. При запросе сведений о месте для выбранного прогноза укажите следующие параметры:
- Идентификатор места из ответа автозаполнения места
- Токен сеанса, используемый в запросе автозаполнения места
- Параметр fields, указывающий, какие поля данных места вам нужны
Как видите, интерфейс PlaceDetailsRequest принимает необязательный sessionToken
параметр.
Удивительно, большое спасибо. Биллинг был именно тем, о чем я беспокоился. Наша компания МНОГО использует это, поэтому токены сеанса — это именно то решение, на которое я надеялся. Спасибо!