Обзор
Класс 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 |