Класс Place (предварительная версия)

Обзор

Класс Place позволит использовать более простой API для работы с библиотекой Places и Maps JavaScript API. Он также поддерживает современные объекты, в частности Promise.

Начало работы

Как получить ключ API и активировать нужные API

Чтобы использовать предварительную версию класса Place, вам потребуется проект Google Cloud, в котором настроен платежный аккаунт и включены Maps JavaScript API и Places API. Следуйте инструкциям по включению одного или нескольких API или SDK. Обратите внимание, что оба API нужно включить в одном и том же проекте Google Cloud Console.

Получить ключ API

Как загрузить библиотеку Places

Чтобы использовать функции библиотеки Places, сначала ее нужно загрузить. Для этого укажите параметр libraries в URL загрузки скрипта Maps JavaScript API. Также добавьте параметр v=beta.

<script async
  src="https://maps.googleapis.com/maps/api/js?v=beta&key=YOUR_API_KEY&libraries=places&callback=initMap">
</script>

Как находить места по текстовым запросам

Чтобы найти место по текстовому запросу, вызовите findPlaceFromQuery. В параметре fields задайте поля данных о месте (в верблюжьем регистре, через запятую). Чтобы получить все данные о месте, задайте fields: ['*'] (используйте только на этапе тестирования; не рекомендуется применять в рабочей среде).

В примере ниже для вызова findPlaceFromQuery и показа результатов на карте используется функция async/await.

TypeScript

let map: google.maps.Map;
let centerCoordinates = { lat: 37.4161493, lng: -122.0812166 };

function initMap() {
    map = new google.maps.Map(document.getElementById('map') as HTMLElement, {
        center: centerCoordinates,
        zoom: 14,
        // ...
    });

    findPlace();
}

async function findPlace() {
    const request = {
        query: 'Sports Page',
        fields: ['displayName', 'location'],
        locationBias: centerCoordinates,
    };

    const { places } = await google.maps.places.Place.findPlaceFromQuery(request);

    if (places.length) {
        const place = places[0];
        const location = place.location as google.maps.LatLng;
        const markerView = new google.maps.marker.AdvancedMarkerView({
            map,
            position: place.location,
            title: place.displayName,
        });

        map.setCenter(location);

    } else {
        console.log('No results');
    }
}

JavaScript

let map;
let centerCoordinates = { lat: 37.4161493, lng: -122.0812166 };

function initMap() {
  map = new google.maps.Map(document.getElementById("map"), {
    center: centerCoordinates,
    zoom: 14,
    // ...
  });
  findPlace();
}

async function findPlace() {
  const request = {
    query: "Sports Page",
    fields: ["displayName", "location"],
    locationBias: centerCoordinates,
  };
  const { places } = await google.maps.places.Place.findPlaceFromQuery(request);

  if (places.length) {
    const place = places[0];
    const location = place.location;
    const markerView = new google.maps.marker.AdvancedMarkerView({
      map,
      position: place.location,
      title: place.displayName,
    });

    map.setCenter(location);
  } else {
    console.log("No results");
  }
}

Как находить места по номерам телефонов

Чтобы найти место по номеру телефона, вызовите findPlaceFromPhoneNumber. Номер требуется указать в международном формате: знак "+", за которым следуют код страны и сам номер телефона. Дополнительные сведения вы найдете в рекомендациях E.164 ITU. В параметре fields задайте поля данных о месте (в верблюжьем регистре, через запятую). Чтобы получить все данные о месте, задайте fields: ['*'] (используйте только на этапе тестирования; не рекомендуется применять в рабочей среде).

В примере ниже для вызова findPlaceFromPhoneNumber и показа результатов на карте используется функция async/await.

TypeScript

async function findPlaceByPhone() {
    const request = {
        phoneNumber: '+1(206)787-5388',
        fields: ['displayName', 'location'],
    }

    const { places } = await google.maps.places.Place.findPlaceFromPhoneNumber(request);

    if (places.length) {
        const place = places[0];
        const markerView = new google.maps.marker.AdvancedMarkerView({
            map,
            position: place.location,
            title: place.displayName,
        });
        console.log(place.displayName);
    } else {
        console.log('No results');
    }
}

JavaScript

async function findPlaceByPhone() {
  const request = {
    phoneNumber: "+1(206)787-5388",
    fields: ["displayName", "location"],
  };
  const { places } = await google.maps.places.Place.findPlaceFromPhoneNumber(
    request
  );

  if (places.length) {
    const place = places[0];
    const markerView = new google.maps.marker.AdvancedMarkerView({
      map,
      position: place.location,
      title: place.displayName,
    });

    console.log(place.displayName);
  } else {
    console.log("No results");
  }
}

window.initMap = initMap;

Как обрабатывать полученные данные о месте

Если у вас уже есть объект Place или идентификатор места, вы можете вызывать Place.fetchFields, чтобы получить дополнительные данные об этом месте. В параметре fields задайте поля данных о месте (в верблюжьем регистре, через запятую). Чтобы получить все данные о месте, задайте fields: ['*'] (используйте только на этапе тестирования; не рекомендуется применять в рабочей среде).

TypeScript

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

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

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

JavaScript

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

  // Call fetchFields, passing the desired data fields.
  await place.fetchFields({ fields: ["displayName", "formattedAddress"] });
  // Show the result
  console.log(place.displayName);
  console.log(place.formattedAddress);
}

Поля данных о месте

Эти поля возвращаются при запросе данных о месте. Они делятся на три категории, которые оплачиваются по разным тарифам: основные данные, контактные данные и данные об атмосфере. Запросы основных данных оплачиваются по базовой цене, и за них дополнительная плата не взимается. Запросы контактных данных и данных об атмосфере оплачиваются по более высокой ставке. Ознакомьтесь с таблицей цен. С каждым вызовом возвращаются сведения об авторстве (html_attributions) независимо от того, запрашивалось ли это поле.

Класс Place поддерживает следующие поля:

Основные данные

Поле Класс Place (только канал v=beta)
Компонент адреса addressComponents
Статус компании businessStatus
Форматированный адрес adrFormatAddress
Местоположение location
Значок icon
URI значка svgIconMaskUri
Цвет фона значка iconBackgroundColor
Название displayName
Фото photos
Идентификатор места id
Код Plus Code plusCode
Тип types
URL websiteURI
Разница с UTC utcOffsetMinutes
Область просмотра viewport
Вход, оборудованный для инвалидов-колясочников hasWheelchairAccessibleEntrance

Контактные данные

Поле Класс Place (только канал v=beta)
Номер телефона nationalPhoneNumber
Номер телефона в международном формате internationalPhoneNumber
Часы работы openingHours
Сайт websiteURI

Данные об атмосфере

Поле Класс Place (только канал v=beta)
Заказ с улицы hasCurbsidePickup
Доставка hasDelivery
Еда в заведении hasDineIn
Уровень цен priceLevel
Оценка rating
Бронирование isReservable
Отзывы reviews
Подается пиво servesBeer
Подаются завтраки servesBreakfast
Поздние завтраки servesBrunch
Подаются ужины servesDinner
Подаются обеды servesLunch
Вегетарианские блюда servesVegetarianFood
Подается вино servesWine
Еда навынос hasTakeout
Всего оценок userRatingsCount