Переход на новый сервис информации о местах

Разработчики из Европейской экономической зоны (ЕЭЗ)

Places API может возвращать подробную информацию о конкретном месте. На этой странице описаны различия между информацией о местах, используемой в классах Place (новый) и PlacesService (устаревший), а также приведены фрагменты кода для сравнения. В таблице ниже перечислены некоторые основные различия в использовании информации о местах между классом Place и PlacesService.

PlacesService (устаревшая версия) Place (новый)
getDetails() fetchFields()
PlaceDetailsRequest FetchFieldsRequest
Методы требуют использования обратного вызова для обработки объекта результатов и ответа google.maps.places.PlacesServiceStatus. Использует объекты Promise и работает асинхронно.
Для способов оплаты требуется проверка PlacesServiceStatus. Проверять статус не нужно, можно использовать стандартную обработку ошибок. Подробнее…
Поля данных о месте форматируются с использованием змеиного регистра. Поля данных о местах форматируются с использованием верблюжьего регистра.
Ограничивается фиксированным набором типов мест и полей данных о местах. Расширенный выбор регулярно обновляемых типов мест и полей данных о местах.

Сравнение кода

В этом разделе сравниваются два похожих фрагмента кода, чтобы проиллюстрировать различия между сервисом Places и классом Place. В фрагментах кода показано, какой код нужен для каждого API, чтобы отправить запрос информации о местах, а затем использовать полученные данные, чтобы добавить маркер на карту.

Places Service (устаревший)

Ниже приведен сокращенный фрагмент кода, показывающий, как сделать запрос информации о месте с помощью PlacesService. В запросе используется обратный вызов и обязательная условная проверка PlacesServiceStatus. Необходимые поля данных о месте указываются в теле запроса.

function getPlaceDetails() {
  // Instantiate the Places Service.
  const service = new google.maps.places.PlacesService(map);

  // Make a request using the Place ID.
  const request = {
    placeId: "ChIJN1t_tDeuEmsRUsoyG83frY4",
    fields: ["name", "formatted_address", "place_id", "geometry"],
  };

  // Request place details.
  service.getDetails(request, (place, status) => {
    // Check whether PlacesServiceStatus is OK.
    if (
      status === google.maps.places.PlacesServiceStatus.OK &&
      place &&
      place.geometry &&
      place.geometry.location
    ) {

      // Log the result.
      console.log(place.name);
      console.log(place.formatted_address);

      // Add a marker for the place.
      const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
        title: place.name,
      });
    }
  });
}

Подробнее…

Класс Place (новый)

В следующем фрагменте кода показано, как отправить запрос информации о местах с помощью класса Place. Запрос является асинхронным и не включает проверку статуса (можно использовать стандартную обработку ошибок). Идентификатор места используется для создания нового экземпляра Place, который применяется для выполнения запроса (fetchFields()). Необходимые поля данных места не передаются до вызова fetchFields(), что обеспечивает большую гибкость. Поскольку метод fetchFields() использует оператор await, его можно использовать только в функции async.

async function getPlaceDetails() {
  // Use place ID to create a new Place instance.
  const place = new google.maps.places.Place({
    id: "ChIJN5Nz71W3j4ARhx5bwpTQEGg",
    requestedLanguage: "en", // optional
  });

  // Call fetchFields, passing the needed data fields.
  await place.fetchFields({
    fields: ["displayName", "formattedAddress", "location"],
  });

  // Log the result.
  console.log(place.displayName);
  console.log(place.formattedAddress);

  // Add an Advanced Marker.
  const marker = new google.maps.marker.AdvancedMarkerElement({
    map,
    position: place.location,
    title: place.displayName,
  });
}

Подробнее…