Обзор
Функции библиотеки Places, API Карт JavaScript позволяют вашему приложению выполнять поиск мест (определяемых в этом API как учреждения, географические местоположения или важные достопримечательности), содержащихся в определенной области, например, в границах карты или вокруг фиксированной точки.
API Places предлагает функцию автозаполнения, которую вы можете использовать, чтобы дать своим приложениям поведение поиска с опережением ввода, как в поле поиска Google Maps. Когда пользователь начинает вводить адрес, автозаполнение заполнит остаток. Для получения дополнительной информации см. документацию по автозаполнению .
Начиная
Если вы не знакомы с Maps JavaScript API или с JavaScript, мы рекомендуем вам ознакомиться с разделом JavaScript и получить ключ API перед началом работы.
Загрузить библиотеку
Служба Places — это самостоятельная библиотека, отдельная от основного кода API JavaScript Карт. Чтобы использовать функциональность, содержащуюся в этой библиотеке, необходимо сначала загрузить ее с помощью параметра libraries
в URL-адресе начальной загрузки API Карт:
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=places&callback=initMap">
</script>
Более подробную информацию см. в Обзоре библиотек .
Добавить API Places в список ограничений API ключа API
Применение ограничений API к вашим ключам ограничивает использование ключа API одним или несколькими API или SDK. Запросы к API или SDK, связанные с ключом API, будут обработаны. Запросы к API или SDK, не связанные с ключом API, не будут выполнены. Чтобы ограничить использование ключа API с библиотекой Places, Maps JavaScript API:- Перейдите в консоль Google Cloud .
- Щелкните раскрывающийся список проектов и выберите проект, содержащий ключ API, который вы хотите защитить.
- Нажмите кнопку меню.
и выберите Платформа Google Карт > Учетные данные .
- На странице «Учетные данные» щелкните имя ключа API, который вы хотите защитить.
- На странице «Ограничить и переименовать ключ API» установите ограничения:
- API-ограничения
- Выберите Ограничить ключ .
- Нажмите «Выбрать API» и выберите Maps JavaScript API и Places API .
(Если какой-либо из API отсутствует в списке, его необходимо включить .)
- Нажмите СОХРАНИТЬ .
Ограничения и политика использования
Квоты
Библиотека Places использует общую квоту использования с API Places, как описано в документации по ограничениям использования для API Places.
Политики
Использование библиотеки Places и API Карт JavaScript должно осуществляться в соответствии с политиками, описанными для API Places .
Поиск места
С помощью сервиса Places вы можете выполнять следующие виды поиска:
- Функция «Найти место из запроса» возвращает место на основе текстового запроса (например, название или адрес места).
- Функция «Найти место по номеру телефона» возвращает место по номеру телефона.
- Nearby Search возвращает список близлежащих мест на основе местоположения пользователя.
- Текстовый поиск возвращает список близлежащих мест на основе поисковой строки, например, «Пицца».
- Запросы Place Details возвращают более подробную информацию о конкретном месте, включая отзывы пользователей.
Возвращаемая информация может включать заведения, такие как рестораны, магазины и офисы, а также результаты «геокодирования», которые указывают адреса, политические районы, такие как города, и другие объекты интереса.
Запросы на поиск места
Запрос Find Place позволяет вам искать место либо по текстовому запросу, либо по номеру телефона. Существует два типа запроса Find Place:
Найти место по запросу
Find Place from Query принимает текстовый ввод и возвращает место. Ввод может быть любым типом данных Place, например, названием компании или адресом. Чтобы сделать запрос Find Place from Query, вызовите метод PlacesService
findPlaceFromQuery()
, который принимает следующие параметры:
-
query
(обязательно) Текстовая строка, по которой будет выполняться поиск, например: «ресторан» или «123 Main Street». Это должно быть название места, адрес или категория заведений. Любые другие типы ввода могут генерировать ошибки и не гарантируют возврата допустимых результатов. API Places вернет соответствия кандидатов на основе этой строки и упорядочит результаты на основе их предполагаемой релевантности. -
fields
(обязательно) Одно или несколько полей, определяющих типы возвращаемых данных о месте. -
locationBias
(необязательно) Координаты, определяющие область поиска. Это может быть одно из следующего:- Набор координат широты/долготы, указанный как LatLngLiteral или объект LatLng
- Прямоугольные границы (две пары широта/долгота или объект LatLngBounds )
- Радиус (в метрах) с центром в координатах широты/долготы
Также необходимо передать метод обратного вызова findPlaceFromQuery()
для обработки объекта результатов и ответа google.maps.places.PlacesServiceStatus
.
В следующем примере показан вызов findPlaceFromQuery()
, выполняющий поиск по запросу «Музей современного искусства Австралии» и включающий поля name
и geometry
.
var map; var service; var infowindow; function initMap() { var sydney = new google.maps.LatLng(-33.867, 151.195); infowindow = new google.maps.InfoWindow(); map = new google.maps.Map( document.getElementById('map'), {center: sydney, zoom: 15}); var request = { query: 'Museum of Contemporary Art Australia', fields: ['name', 'geometry'], }; var service = new google.maps.places.PlacesService(map); service.findPlaceFromQuery(request, function(results, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i]); } map.setCenter(results[0].geometry.location); } }); }
Найти место по номеру телефона
Find Place from Phone Number принимает номер телефона и возвращает место. Чтобы сделать запрос Find Place from Phone Number, вызовите метод PlacesService
findPlaceFromPhoneNumber()
, который принимает следующие параметры:
-
phoneNumber
(обязательно) Номер телефона в формате E.164 . -
fields
(обязательно) Одно или несколько полей, определяющих типы возвращаемых данных о месте. -
locationBias
(необязательно) Координаты, определяющие область поиска. Это может быть одно из следующего:- Набор координат широты/долготы, указанный как LatLngLiteral или объект LatLng
- Прямоугольные границы (четыре точки широты/долготы или объект LatLngBounds )
- Радиус (в метрах) с центром в координатах широты/долготы
Также необходимо передать метод обратного вызова findPlaceFromPhoneNumber()
для обработки объекта результатов и ответа google.maps.places.PlacesServiceStatus
.
Поля (методы поиска места)
Используйте параметр fields
, чтобы указать массив типов данных мест для возврата. Например: fields: ['formatted_address', 'opening_hours', 'geometry']
. Используйте точку при указании составных значений. Например: opening_hours.weekday_text
.
Поля соответствуют результатам поиска места и делятся на три категории оплаты: Basic, Contact и Atmosphere. Базовые поля оплачиваются по базовой ставке и не влекут за собой дополнительных расходов. Поля Contact и Atmosphere оплачиваются по более высокой ставке. Для получения дополнительной информации см. прейскурант . Атрибуции ( html_attributions
) всегда возвращаются при каждом вызове, независимо от того, было ли запрошено поле.
Базовый
Базовая категория включает в себя следующие поля:
business_status
, formatted_address
, geometry
, icon
, icon_mask_base_uri
, icon_background_color
, name
, permanently_closed
( устарело ), photos
, place_id
, plus_code
, types
Контакт
Категория «Контакты» включает следующее поле:opening_hours
( не рекомендуется использовать в библиотеке Places, Maps JavaScript API. Используйте запрос Place Details для получения результатов
opening_hours
).Атмосфера
Категория Атмосфера включает в себя следующие поля:price_level
, rating
, user_ratings_total
Методы findPlaceFromQuery()
и findPlaceFromPhoneNumber()
принимают один и тот же набор полей и могут возвращать одни и те же поля в своих соответствующих ответах.
Установить смещение местоположения (методы поиска места)
Используйте параметр locationBias
, чтобы Find Place отдавал предпочтение результатам в определенной области. Вы можете задать locationBias
следующими способами:
Смещение результатов в конкретную область:
locationBias: {lat: 37.402105, lng: -122.081974}
Определите прямоугольную область для поиска:
locationBias: {north: 37.41, south: 37.40, east: -122.08, west: -122.09}
Вы также можете использовать LatLngBounds .
Определите радиус поиска (в метрах) с центром в определенной области:
locationBias: {radius: 100, center: {lat: 37.402105, lng: -122.081974}}
Запросы на поиск поблизости
Поиск поблизости позволяет вам искать места в указанной области по ключевому слову или типу. Поиск поблизости всегда должен включать местоположение, которое может быть указано одним из двух способов:
-
LatLngBounds
. - круговая область, определяемая как комбинация свойства
location
(определяющего центр круга как объектLatLng
) и радиуса, измеряемого в метрах.
Поиск Places Nearby инициируется вызовом метода nearbySearch()
PlacesService
, который вернет массив объектов PlaceResult
. Обратите внимание, что метод nearbySearch()
заменяет метод search()
с версии 3.9.
service = new google.maps.places.PlacesService(map); service.nearbySearch(request, callback);
Этот метод принимает запрос со следующими полями:
- Любой из:
-
bounds
, который должен быть объектомgoogle.maps.LatLngBounds
, определяющим прямоугольную область поиска. Максимальное поддерживаемое диагональное расстояние для области границ составляет приблизительно 100 000 метров. -
location
иradius
; первый принимает объектgoogle.maps.LatLng
, а второй принимает простое целое число, представляющее радиус круга в метрах. Максимально допустимый радиус составляет 50 000 метров. Обратите внимание, что когдаrankBy
установлен на DISTANCE, вы должны указатьlocation
но вы не можете указатьradius
илиbounds
.
-
-
keyword
( необязательно ) — термин, который необходимо сопоставить со всеми доступными полями, включая, помимо прочего, имя, тип и адрес, а также отзывы клиентов и другой сторонний контент. -
minPriceLevel
иmaxPriceLevel
( необязательно ) — Ограничивает результаты только теми местами в указанном диапазоне. Допустимые значения находятся в диапазоне от 0 (самый доступный) до 4 (самый дорогой) включительно. -
name
Устарело. Эквивалентноkeyword
. Значения в этом поле объединяются со значениями в полеkeyword
и передаются как часть той же строки поиска. -
openNow
( необязательно ) — логическое значение, указывающее, что служба Places должна возвращать только те места, которые открыты для бизнеса на момент отправки запроса. Места, для которых не указаны часы работы в базе данных Google Places, не будут возвращены, если вы включите этот параметр в свой запрос. УстановкаopenNow
вfalse
не даст никакого эффекта. -
rankBy
( необязательно ) — Указывает порядок, в котором результаты перечислены. Возможные значения:-
google.maps.places.RankBy.PROMINENCE
(по умолчанию). Этот параметр сортирует результаты по степени важности. При ранжировании предпочтение отдается известным местам в пределах заданного радиуса, а не близлежащим местам, которые соответствуют, но менее известны. На известность может влиять рейтинг места в индексе Google, глобальная популярность и другие факторы. Если указаноgoogle.maps.places.RankBy.PROMINENCE
, требуется параметрradius
. -
google.maps.places.RankBy.DISTANCE
. Этот параметр сортирует результаты в порядке возрастания по расстоянию от указанногоlocation
(обязательно). Обратите внимание, что вы не можете указать пользовательскиеbounds
и/илиradius
если вы указываетеRankBy.DISTANCE
. При указанииRankBy.DISTANCE
требуется одно или несколькоkeyword
,name
илиtype
.
-
-
type
— Ограничивает результаты местами, соответствующими указанному типу. Можно указать только один тип (если указано более одного типа, все типы, следующие за первой записью, игнорируются). См. список поддерживаемых типов .
Вам также необходимо передать метод обратного вызова в nearbySearch()
для обработки объекта результатов и ответа google.maps.places.PlacesServiceStatus
.
var map; var service; var infowindow; function initialize() { var pyrmont = new google.maps.LatLng(-33.8665433, 151.1956316); map = new google.maps.Map(document.getElementById('map'), { center: pyrmont, zoom: 15 }); var request = { location: pyrmont, radius: 500, type: 'restaurant' }; service = new google.maps.places.PlacesService(map); service.nearbySearch(request, callback); } function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i]); } } }
Запросы на текстовый поиск
Служба текстового поиска Google Places — это веб-служба, которая возвращает информацию о наборе мест на основе строки, например, «пицца в Нью-Йорке» или «обувные магазины около Оттавы». Служба отвечает списком мест, соответствующих текстовой строке и любым заданным смещениям местоположения. Ответ на поиск будет включать список мест. Вы можете отправить запрос Place Details для получения дополнительной информации о любом месте в ответе.
Текстовый поиск инициируется вызовом метода textSearch()
PlacesService
.
service = new google.maps.places.PlacesService(map); service.textSearch(request, callback);
Этот метод принимает запрос со следующими полями:
-
query
( обязательно ) Текстовая строка, по которой выполняется поиск, например: "ресторан" или "123 Main Street". Это должно быть название места, адрес или категория заведений. Любые другие типы ввода могут генерировать ошибки и не гарантируют возврата допустимых результатов. Служба Places будет возвращать соответствия кандидатов на основе этой строки и упорядочивать результаты на основе их предполагаемой релевантности. Этот параметр становится необязательным, если параметрtype
также используется в поисковом запросе. - По желанию:
-
openNow
— логическое значение, указывающее, что служба Places должна возвращать только те места, которые открыты для бизнеса на момент отправки запроса. Места, для которых не указаны часы работы в базе данных Google Places, не будут возвращены, если вы включите этот параметр в свой запрос. УстановкаopenNow
вfalse
не даст никакого эффекта. -
minPriceLevel
иmaxPriceLevel
— Ограничивает результаты только теми местами, которые находятся в указанном ценовом диапазоне. Допустимые значения находятся в диапазоне от 0 (самый доступный) до 4 (самый дорогой) включительно. - Любой из:
-
bounds
, который должен быть объектомgoogle.maps.LatLngBounds
, определяющим прямоугольную область поиска. Максимальное поддерживаемое диагональное расстояние для области границ составляет приблизительно 100 000 метров. -
location
иradius
— вы можете сместить результаты в указанный круг, передавlocation
и параметрradius
. Это даст указание службе Places отдать предпочтение показу результатов в пределах этого круга. Результаты за пределами определенной области все равно могут отображаться. Местоположение принимает объектgoogle.maps.LatLng
, а радиус принимает простое целое число, представляющее радиус круга в метрах. Максимально допустимый радиус составляет 50 000 метров.
-
-
type
— Ограничивает результаты местами, соответствующими указанному типу. Можно указать только один тип (если указано более одного типа, все типы, следующие за первой записью, игнорируются). См. список поддерживаемых типов .
-
Вам также необходимо передать метод обратного вызова в textSearch()
для обработки объекта результатов и ответа google.maps.places.PlacesServiceStatus
.
var map; var service; var infowindow; function initialize() { var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316); map = new google.maps.Map(document.getElementById('map'), { center: pyrmont, zoom: 15 }); var request = { location: pyrmont, radius: 500, query: 'restaurant' }; service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); } function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { var place = results[i]; createMarker(results[i]); } } }
Поиск ответов
Коды статуса
Объект ответа PlacesServiceStatus
содержит статус запроса и может содержать отладочную информацию, которая поможет вам отследить, почему запрос места не удался. Возможные значения статуса:
-
INVALID_REQUEST
: Этот запрос недействителен. -
OK
: Ответ содержит допустимый результат. -
OVER_QUERY_LIMIT
: веб-страница превысила квоту запросов. -
REQUEST_DENIED
: веб-странице не разрешено использовать PlacesService. -
UNKNOWN_ERROR
: Запрос PlacesService не может быть обработан из-за ошибки сервера. Запрос может быть выполнен успешно, если вы попробуете еще раз. -
ZERO_RESULTS
: По этому запросу не найдено ни одного результата.
Результаты поиска по месту
Функции findPlace()
, nearbySearch()
и textSearch()
возвращают массив объектов PlaceResult
.
Каждый объект PlaceResult
может включать следующие свойства:
-
business_status
указывает на операционный статус места, если это бизнес. Он может содержать одно из следующих значений:-
OPERATIONAL
-
CLOSED_TEMPORARILY
-
CLOSED_PERMANENTLY
business_status
не возвращается. -
-
formatted_address
— это строка, содержащая понятный человеку адрес этого места. Свойствоformatted_address
возвращается только для текстового поиска .Часто этот адрес эквивалентен почтовому адресу. Обратите внимание, что некоторые страны, такие как Великобритания, не разрешают распространение настоящих почтовых адресов из-за лицензионных ограничений.
Форматированный адрес логически состоит из одного или нескольких компонентов адреса . Например, адрес «111 8th Avenue, New York, NY» состоит из следующих компонентов: «111» (номер улицы), «8th Avenue» (маршрут), «New York» (город) и «NY» (штат США).
Не анализируйте форматированный адрес программно. Вместо этого следует использовать отдельные компоненты адреса, которые ответ API включает в себя в дополнение к полю форматированного адреса.
-
geometry
: Информация, связанная с геометрией места. Сюда входит:-
location
указывает широту и долготу места. -
viewport
определяет предпочтительную область просмотра на карте при просмотре данного места.
-
-
permanently_closed
( deprecated ) — это логический флаг, указывающий, закрыто ли место навсегда или временно (значениеtrue
). Не используйтеpermanently_closed
. Вместо этого используйтеbusiness_status
для получения рабочего статуса предприятий. -
plus_code
(см. Открытый код местоположения и plus-коды ) — это закодированная ссылка на местоположение, полученная из координат широты и долготы, которая представляет собой область: 1/8000 градуса на 1/8000 градуса (примерно 14 м x 14 м на экваторе) или меньше. Plus-коды могут использоваться в качестве замены уличных адресов в местах, где их нет (где здания не пронумерованы или улицы не имеют названий).Плюс-код форматируется как глобальный код и составной код:
-
global_code
— это 4-значный код города и 6-значный или более длинный местный код (849VCWC8+R9). -
compound_code
— это локальный код длиной 6 символов или длиннее с явным местоположением (CWC8+R9, Mountain View, CA, USA). Не анализируйте это содержимое программно.
-
-
html_attributions
: Массив атрибутов, которые следует отображать при отображении результатов поиска. Каждая запись в массиве содержит HTML-текст для одного атрибута. Примечание: это агрегация всех атрибутов для всего ответа поиска. Поэтому все объектыPlaceResult
в ответе содержат идентичные списки атрибутов. -
icon
возвращает URL-адрес цветного значка PNG размером 71 x 71 пиксель. -
icon_mask_base_uri
возвращает базовый URL для бесцветного значка без расширения .svg или .png. -
icon_background_color
возвращает шестнадцатеричный код цвета по умолчанию для категории места. -
name
: Название места. -
opening_hours
может содержать следующую информацию:-
open_now
— логическое значение, указывающее, открыто ли место в текущий момент ( устарело в библиотеке Places, Maps JavaScript API, вместо этого используйтеutc_offset_minutes
).
-
-
place_id
— это текстовый идентификатор, который однозначно идентифицирует место. Чтобы получить информацию о месте, передайте этот идентификатор в запросе Place Details . Узнайте больше о том, как ссылаться на место с помощью идентификатора места . -
rating
содержит рейтинг места от 0,0 до 5,0, основанный на агрегированных отзывах пользователей. -
types
Массив типов для этого места (например,["political", "locality"]
или["restaurant", "lodging"]
). Этот массив может содержать несколько значений или быть пустым. Новые значения могут быть введены без предварительного уведомления. См. список поддерживаемых типов . -
vicinity
: Упрощенный адрес места, включающий название улицы, номер дома и населенный пункт, но не провинцию/штат, почтовый индекс или страну. Например, офис Google в Сиднее, Австралия, имеет значениеvicinity
5/48 Pirrama Road, Pyrmont
.
Доступ к дополнительным результатам
По умолчанию каждый поиск места возвращает до 20 результатов на запрос. Однако каждый поиск может возвращать до 60 результатов, разделенных на три страницы. Дополнительные страницы доступны с помощью объекта PlaceSearchPagination
. Чтобы получить доступ к дополнительным страницам, необходимо захватить объект PlaceSearchPagination
с помощью функции обратного вызова. Объект PlaceSearchPagination
определяется следующим образом:
-
hasNextPage
логическое свойство, указывающее, доступны ли дополнительные результаты.true
, если есть дополнительная страница результатов. -
nextPage()
— функция, которая вернет следующий набор результатов. После выполнения поиска необходимо подождать две секунды, прежде чем будет доступна следующая страница результатов.
Чтобы увидеть следующий набор результатов, вызовите nextPage
. Каждая страница результатов должна быть отображена перед отображением следующей страницы результатов. Обратите внимание, что каждый поиск считается как один запрос в рамках ваших лимитов использования.
В примере ниже показано, как изменить функцию обратного вызова для захвата объекта PlaceSearchPagination
, чтобы можно было выполнять несколько поисковых запросов.
Машинопись
// This example requires the Places library. Include the libraries=places // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> function initMap(): void { // Create the map. const pyrmont = { lat: -33.866, lng: 151.196 }; const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: pyrmont, zoom: 17, mapId: "8d193001f940fde3", } as google.maps.MapOptions ); // Create the places service. const service = new google.maps.places.PlacesService(map); let getNextPage: () => void | false; const moreButton = document.getElementById("more") as HTMLButtonElement; moreButton.onclick = function () { moreButton.disabled = true; if (getNextPage) { getNextPage(); } }; // Perform a nearby search. service.nearbySearch( { location: pyrmont, radius: 500, type: "store" }, ( results: google.maps.places.PlaceResult[] | null, status: google.maps.places.PlacesServiceStatus, pagination: google.maps.places.PlaceSearchPagination | null ) => { if (status !== "OK" || !results) return; addPlaces(results, map); moreButton.disabled = !pagination || !pagination.hasNextPage; if (pagination && pagination.hasNextPage) { getNextPage = () => { // Note: nextPage will call the same handler function as the initial call pagination.nextPage(); }; } } ); } function addPlaces( places: google.maps.places.PlaceResult[], map: google.maps.Map ) { const placesList = document.getElementById("places") as HTMLElement; for (const place of places) { if (place.geometry && place.geometry.location) { const image = { url: place.icon!, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25), }; new google.maps.Marker({ map, icon: image, title: place.name!, position: place.geometry.location, }); const li = document.createElement("li"); li.textContent = place.name!; placesList.appendChild(li); li.addEventListener("click", () => { map.setCenter(place.geometry!.location!); }); } } } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example requires the Places library. Include the libraries=places // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> function initMap() { // Create the map. const pyrmont = { lat: -33.866, lng: 151.196 }; const map = new google.maps.Map(document.getElementById("map"), { center: pyrmont, zoom: 17, mapId: "8d193001f940fde3", }); // Create the places service. const service = new google.maps.places.PlacesService(map); let getNextPage; const moreButton = document.getElementById("more"); moreButton.onclick = function () { moreButton.disabled = true; if (getNextPage) { getNextPage(); } }; // Perform a nearby search. service.nearbySearch( { location: pyrmont, radius: 500, type: "store" }, (results, status, pagination) => { if (status !== "OK" || !results) return; addPlaces(results, map); moreButton.disabled = !pagination || !pagination.hasNextPage; if (pagination && pagination.hasNextPage) { getNextPage = () => { // Note: nextPage will call the same handler function as the initial call pagination.nextPage(); }; } }, ); } function addPlaces(places, map) { const placesList = document.getElementById("places"); for (const place of places) { if (place.geometry && place.geometry.location) { const image = { url: place.icon, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25), }; new google.maps.Marker({ map, icon: image, title: place.name, position: place.geometry.location, }); const li = document.createElement("li"); li.textContent = place.name; placesList.appendChild(li); li.addEventListener("click", () => { map.setCenter(place.geometry.location); }); } } } window.initMap = initMap;
Попробуйте образец
Подробности о месте
Помимо предоставления списка мест в пределах области, служба Places также может возвращать подробную информацию о конкретном месте. После того, как место было возвращено в ответе поиска места, его идентификатор места может использоваться для запроса дополнительных сведений об этом месте, таких как его полный адрес, номер телефона, рейтинг пользователей и отзывы и т. д.
Запросы деталей места
Подробная информация о месте запрашивается с помощью вызова метода getDetails()
сервиса.
service = new google.maps.places.PlacesService(map); service.getDetails(request, callback);
Этот метод принимает запрос, содержащий placeId
места и поля, указывающие, какие типы данных Places возвращать. Узнайте больше о том, как ссылаться на место с помощью place ID .
Он также принимает метод обратного вызова, который должен обрабатывать код состояния, переданный в ответе google.maps.places.PlacesServiceStatus
, а также объект google.maps.places.PlaceResult
.
var request = { placeId: 'ChIJN1t_tDeuEmsRUsoyG83frY4', fields: ['name', 'rating', 'formatted_phone_number', 'geometry'] }; service = new google.maps.places.PlacesService(map); service.getDetails(request, callback); function callback(place, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { createMarker(place); } }
Поля (Детали места)
Параметрfields
принимает массив строк (имен полей). Используйте параметр fields
, чтобы указать массив типов данных мест для возврата. Например: fields: ['address_components', 'opening_hours', 'geometry']
. Используйте точку при указании составных значений. Например: opening_hours.weekday_text
.
Поля соответствуют результатам Place Details и делятся на три категории выставления счетов: Basic, Contact и Atmosphere. Базовые поля оплачиваются по базовой ставке и не влекут за собой дополнительных расходов. Поля Contact и Atmosphere оплачиваются по более высокой ставке. Для получения дополнительной информации см. прейскурант . Атрибуции ( html_attributions
) всегда возвращаются при каждом вызове, независимо от того, были ли они запрошены.
Базовый
Базовая категория включает в себя следующие поля:
address_components
, adr_address
, business_status
, formatted_address
, geometry
, icon
, icon_mask_base_uri
, icon_background_color
, name
, permanently_closed
( устарело ), photo
, place_id
, plus_code
, type
, url
, utc_offset
( устарело в библиотеке Places, Maps JavaScript API), utc_offset_minutes
, vicinity
Контакт
Категория «Контакты» включает в себя следующие поля:
formatted_phone_number
, international_phone_number
, opening_hours
, website
Атмосфера
Категория Атмосфера включает в себя следующие поля: price_level
, rating
, reviews
, user_ratings_total
Узнайте больше о полях мест . Для получения дополнительной информации о том, как тарифицируются запросы данных мест, см. Использование и выставление счетов .
Место Подробности Ответы
Коды статуса
Объект ответа PlacesServiceStatus
содержит статус запроса и может содержать отладочную информацию, которая поможет вам отследить, почему запрос Place Details не удался. Возможные значения статуса:
-
INVALID_REQUEST
: Этот запрос недействителен. -
OK
: Ответ содержит допустимый результат. -
OVER_QUERY_LIMIT
: веб-страница превысила квоту запросов. -
NOT_FOUND
Указанное местоположение не найдено в базе данных мест. -
REQUEST_DENIED
: веб-странице не разрешено использовать PlacesService. -
UNKNOWN_ERROR
: Запрос PlacesService не может быть обработан из-за ошибки сервера. Запрос может быть выполнен успешно, если вы попробуете еще раз. -
ZERO_RESULTS
: По этому запросу не найдено ни одного результата.
Место Подробности Результаты
Успешный вызов getDetails()
возвращает объект PlaceResult
со следующими свойствами:
-
address_components
: массив, содержащий отдельные компоненты, применимые к этому адресу.Каждый компонент адреса обычно содержит следующие поля:
-
types[]
— массив, указывающий тип компонента адреса. См. список поддерживаемых типов . -
long_name
— полное текстовое описание или имя компонента адреса, возвращаемое геокодером. -
short_name
— сокращенное текстовое имя компонента адреса, если доступно. Например, компонент адреса для штата Аляска может иметьlong_name
«Alaska» иshort_name
«AK» с использованием двухбуквенной почтовой аббревиатуры.
Обратите внимание на следующие факты о массиве
address_components[]
:- Массив компонентов адреса может содержать больше компонентов, чем
formatted_address
. - Массив не обязательно включает все политические субъекты, содержащие адрес, за исключением тех, которые включены в
formatted_address
. Чтобы получить все политические субъекты, содержащие определенный адрес, следует использовать обратное геокодирование, передавая широту/долготу адреса в качестве параметра запроса. - Формат ответа не гарантирует, что останется неизменным между запросами. В частности, количество
address_components
зависит от запрошенного адреса и может меняться со временем для одного и того же адреса. Компонент может изменить положение в массиве. Тип компонента может измениться. Определенный компонент может отсутствовать в более позднем ответе.
-
-
business_status
указывает на операционный статус места, если это бизнес. Он может содержать одно из следующих значений:-
OPERATIONAL
-
CLOSED_TEMPORARILY
-
CLOSED_PERMANENTLY
business_status
не возвращается. -
-
formatted_address
: Адрес этого места, понятный человеку.Часто этот адрес эквивалентен почтовому адресу. Обратите внимание, что некоторые страны, такие как Великобритания, не разрешают распространение настоящих почтовых адресов из-за лицензионных ограничений.
Форматированный адрес логически состоит из одного или нескольких компонентов адреса . Например, адрес «111 8th Avenue, New York, NY» состоит из следующих компонентов: «111» (номер улицы), «8th Avenue» (маршрут), «New York» (город) и «NY» (штат США).
Не анализируйте форматированный адрес программно. Вместо этого следует использовать отдельные компоненты адреса, которые ответ API включает в себя в дополнение к полю форматированного адреса.
-
formatted_phone_number
: номер телефона места, отформатированный в соответствии с региональными правилами нумерации . -
geometry
: Информация, связанная с геометрией места. Сюда входит:-
location
указывает широту и долготу места. -
viewport
определяет предпочтительную область просмотра на карте при просмотре данного места.
-
-
permanently_closed
( deprecated ) — это логический флаг, указывающий, закрыто ли место навсегда или временно (значениеtrue
). Не используйтеpermanently_closed
. Вместо этого используйтеbusiness_status
для получения рабочего статуса предприятий. -
plus_code
(см. Открытый код местоположения и plus-коды ) — это закодированная ссылка на местоположение, полученная из координат широты и долготы, которая представляет собой область: 1/8000 градуса на 1/8000 градуса (примерно 14 м x 14 м на экваторе) или меньше. Plus-коды могут использоваться в качестве замены уличных адресов в местах, где их нет (где здания не пронумерованы или улицы не имеют названий).Плюс-код форматируется как глобальный код и составной код:
-
global_code
— это 4-значный код города и 6-значный или более длинный местный код (849VCWC8+R9). -
compound_code
— это локальный код длиной 6 символов или длиннее с явным местоположением (CWC8+R9, Mountain View, CA, USA). Не анализируйте это содержимое программно.
-
-
html_attributions
: Текст атрибуции, который будет отображаться для этого результата поиска по месту. -
icon
: URL-адрес ресурса изображения, который можно использовать для представления типа этого места. -
international_phone_number
содержит номер телефона места в международном формате. Международный формат включает код страны и начинается со знака плюс (+). Например,international_phone_number
для офиса Google в Сиднее, Австралия, это+61 2 9374 4000
. -
name
: Название места. -
utc_offset
Устарело в библиотеке Places, Maps JavaScript API, вместо него используйтеutc_offset_minutes
. -
utc_offset_minutes
содержит количество минут, на которое текущий часовой пояс этого места смещен относительно UTC. Например, для мест в Сиднее, Австралия, в летнее время это будет 660 (+11 часов от UTC), а для мест в Калифорнии вне летнего времени это будет -480 (-8 часов от UTC). -
opening_hours
содержит следующую информацию:-
open_now
( Не рекомендуется использовать в библиотеке Places, API JavaScript Карт; вместо этого используйте opening_hours.isOpen() . О том, как использоватьisOpen
с подробностями о месте, см . видео «Как получить часы работы в API Places» .) `open_now` — это логическое значение, указывающее, открыто ли место в текущий момент. -
periods[]
— это массив периодов открытия, охватывающих семь дней, начиная с воскресенья, в хронологическом порядке. Каждый период содержит:-
open
содержит пару объектов «день и время», описывающих, когда открывается место:-
day
число от 0 до 6, соответствующее дням недели, начиная с воскресенья. Например, 2 означает вторник. -
time
может содержать время суток в 24-часовом формате hhmm (значения находятся в диапазоне 0000–2359).time
будет указано в часовом поясе места.
-
-
close
может содержать пару объектов день и время, описывающих, когда место закрывается. Примечание: если место всегда открыто , разделclose
будет отсутствовать в ответе. Приложения могут полагаться на always-open, представленный какopen
период, содержащийday
со значением 0 иtime
со значением 0000, и безclose
.
-
-
weekday_text
— это массив из семи строк, представляющих отформатированные часы работы для каждого дня недели. Если в запросе Place Details был указан параметрlanguage
, служба Places отформатирует и локализует часы работы соответствующим образом для этого языка. Порядок элементов в этом массиве зависит от параметраlanguage
. В некоторых языках неделя начинается с понедельника, а в других — с воскресенья.
-
-
permanently_closed
( устаревший ) является логическим флагом, указывающим, закрылось ли место либо навсегда, либо временно (значениеtrue
). Не используйтеpermanently_closed
. Вместо этого используйтеbusiness_status
, чтобы получить операционный статус предприятий. -
photos[]
: массив объектовPlacePhoto
.PlacePhoto
можно использовать для получения фотографии с помощью методаgetUrl()
, или вы можете проверить объект на предмет следующих значений:-
height
: максимальная высота изображения, в пикселях. -
width
: максимальная ширина изображения, в пикселях. -
html_attributions
: текст атрибуции, который будет отображаться с помощью этого места.
-
-
place_id
: текстовый идентификатор, который уникально идентифицирует место и может использоваться для извлечения информации о месте, используя запрос с подробностями места . Узнайте больше о том, как ссылаться на место с идентификатором места . -
rating
: рейтинг места, от 0,0 до 5,0, на основе агрегированных отзывов пользователей. -
reviews
массивы до пяти обзоров. Каждый обзор состоит из нескольких компонентов:-
aspects[]
содержит массивPlaceAspectRating
объектов, каждый из которых обеспечивает оценку одного атрибута учреждения. Первый объект в массиве считается основным аспектом. КаждоеPlaceAspectRating
определяется как:-
type
название аспекта, который оценивается. Поддерживаются следующие типы:appeal
,atmosphere
,decor
,facilities
,food
,overall
,quality
иservice
. -
rating
рейтинга пользователя для этого конкретного аспекта, от 0 до 3.
-
-
author_name
Имя пользователя, который отправил обзор. Анонимные отзывы приписываются «пользователю Google». Если был установлен язык языка, то фраза «Пользователь Google» вернет локализованную строку. -
author_url
URL -адрес для пользователей Google+ профиля, если доступно. -
language
ИЭТ -языковой код, указывающий язык, используемый в обзоре пользователя. Это поле содержит только основной тег языка, а не вторичный тег, указывающий на страну или регион. Например, все английские обзоры помечены как «en», а не «en-au» или «en-uk». -
rating
общего рейтинга пользователя для этого места. Это целое число, в диапазоне от 1 до 5. -
text
обзор пользователя. При просмотре местоположения с Google Place обзоры считаются необязательными; Следовательно, это поле может пусто.
-
-
types
множества типов для этого места (например,["political", "locality"]
или["restaurant", "lodging"]
). Этот массив может содержать несколько значений или может быть пустым. Новые значения могут быть введены без предварительного уведомления. Смотрите список поддерживаемых типов . -
url
: URL официальной страницы Google для этого места. Это страница, принадлежащая Google, которая содержит лучшую доступную информацию о месте. Приложения должны ссылаться на эту страницу или встроить эту страницу на любой экране, на котором показаны подробные результаты о месте для пользователя. -
vicinity
: упрощенный адрес для этого места, включая название улицы, номер улицы и местность, но не провинция/штат, почтовый кодекс или страна. Например, Google в Сиднее, Австралийский офис имеетvicinity
ценность5/48 Pirrama Road, Pyrmont
. Собственностьvicinity
возвращается только для близлежащего поиска . -
website
перечисляет авторитетный веб -сайт для этого места, например, на домашней странице бизнеса.
Примечание. Многомерные оценки могут быть недоступны для всех мест. Если слишком мало обзоров, то ответ деталей либо будет включать в себя Legacy Rating по шкале от 0,0 до 5,0 (если таковой имеется), либо вообще не вообще.
Ссылка на место с идентификатором места
Идентификатор места - это уникальная ссылка на место на карте Google. Идентификаторы места доступны для большинства мест, включая предприятия, достопримечательности, парки и перекрестки.
Чтобы использовать идентификатор места в вашем приложении, вы должны сначала найти идентификатор, который доступен в PlaceResult
of the Place Search или запроса деталей. Затем вы можете использовать это идентификатор места, чтобы посмотреть детали места .
Идентификаторы размещения освобождаются от ограничений кэширования, указанных в разделе 3.2.3 (b) Условий обслуживания платформы Google Maps. Поэтому вы можете хранить значения идентификатора для последующего использования. Для получения лучших практик при хранении идентификаторов места см. Обзор идентификации места .
var map; function initialize() { // Create a map centered in Pyrmont, Sydney (Australia). map = new google.maps.Map(document.getElementById('map'), { center: {lat: -33.8666, lng: 151.1958}, zoom: 15 }); // Search for Google's office in Australia. var request = { location: map.getCenter(), radius: '500', query: 'Google Sydney' }; var service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); } // Checks that the PlacesServiceStatus is OK, and adds a marker // using the place ID and location from the PlacesService. function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { var marker = new google.maps.Marker({ map: map, place: { placeId: results[0].place_id, location: results[0].geometry.location } }); } } google.maps.event.addDomListener(window, 'load', initialize);
Разместить фотографии
Используйте функцию Place Photo, чтобы добавить высококачественный фотографический контент на ваш сайт. Фото -служба дает вам доступ к миллионам фотографий, хранящихся в местах и локальной базе данных Google+. Когда вы получите информацию о размещении, используя запрос на информацию о местах, ссылки на фотографии будут возвращены для соответствующего фотографического контента. Бесзамянутые запросы на поиск и текстовый поиск также возвращают одну ссылку на фотографию на место, когда это уместно. Используя фото службу, вы можете получить доступ к указанным фотографиям и изменить размер изображения до оптимального размера для вашего приложения.
Массив объектов PlacePhoto
будет возвращен как часть объекта PlaceResult
для любых getDetails()
, textSearch()
или nearbySearch()
сделанным против PlacesService
.
Примечание. Количество возвращенных фотографий варьируется в зависимости от запроса.
- Ближайший поиск или текстовый поиск вернется не более одного объекта
PlacePhoto
. - Запрос деталей вернется до десяти объектов
PlacePhoto
.
Вы можете запросить URL для связанного изображения, вызывая метод PlacePhoto.getUrl()
и передавая действительный объект PhotoOptions
. Используйте объект PhotoOptions
, чтобы указать максимальную высоту и ширину изображения. Если вы указали значение как для maxHeight
, так и для maxWidth
, фото служба будет изменять размер изображения до меньшего размера из двух размеров, сохраняя при этом исходное соотношение сторон.
Следующий фрагмент кода принимает объект Place и добавляет маркер к карте, если фотография существует. Изображение маркера по умолчанию заменяется небольшой версией фотографии.
function createPhotoMarker(place) { var photos = place.photos; if (!photos) { return; } var marker = new google.maps.Marker({ map: map, position: place.geometry.location, title: place.name, icon: photos[0].getUrl({maxWidth: 35, maxHeight: 35}) }); }
Фотографии, возвращаемые фото -сервисом, получены из различных мест, включая владельцев бизнеса и пользовательские фотографии. В большинстве случаев эти фотографии могут использоваться без атрибуции или будут иметь необходимую атрибуцию, включенную как часть изображения. Однако, если возвращаемый photo
включает значение в поле html_attributions
, вы должны включить дополнительную атрибуцию в ваше приложение, где бы вы ни отображали изображение.