Как я могу получить компоненты адреса с помощью Google AutocompleteService через JavaScript?

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
  });
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть ли способ получить поле компонентов адреса с помощью 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);

Когда пользователь выбирает место, вы можете повторно использовать тот же токен сеанса для получения сведений о месте с интересующими вас полями, чтобы получать счета только за запрос сведений о месте (как указано выше).

Вы также можете прочитать Лучшие практики оптимизации затрат.

Программная реализация

Используйте токен сеанса с вашими запросами автозаполнения мест. При запросе сведений о месте для выбранного прогноза укажите следующие параметры:

  1. Идентификатор места из ответа автозаполнения места
  2. Токен сеанса, используемый в запросе автозаполнения места
  3. Параметр fields, указывающий, какие поля данных места вам нужны

Как видите, интерфейс PlaceDetailsRequest принимает необязательный sessionToken параметр.

Удивительно, большое спасибо. Биллинг был именно тем, о чем я беспокоился. Наша компания МНОГО использует это, поэтому токены сеанса — это именно то решение, на которое я надеялся. Спасибо!

TechDan 17.01.2023 21:18

Другие вопросы по теме