Обзор
Геокодирование — это процесс преобразования адресов (например, «1600 Amphitheatre Parkway, Mountain View, CA») в географические координаты (например, широта 37.423021 и долгота -122.083739), которые можно использовать для размещения маркеров или позиционирования карты.
Обратное геокодирование — это процесс преобразования географических координат в понятный человеку адрес (см. Обратное геокодирование (поиск адреса) ).
Вы также можете использовать геокодер, чтобы найти адрес для заданного идентификатора места .
Maps JavaScript API предоставляет класс Geocoder для геокодирования и обратного геокодирования динамически из пользовательского ввода. Если вместо этого вы хотите геокодировать статические, известные адреса, см. веб-службу Geocoding .
Начать
Перед использованием службы геокодирования в Maps JavaScript API сначала убедитесь, что Geocoding API включен в консоли Google Cloud в том же проекте, который вы настроили для Maps JavaScript API.
Чтобы просмотреть список включенных API:
- Перейдите в консоль Google Cloud .
- Нажмите кнопку Выбрать проект , затем выберите тот же проект, который вы настроили для Maps JavaScript API, и нажмите Открыть .
- В списке API на панели инструментов найдите API геокодирования .
- Если вы видите API в списке, все готово. Если API не указан, включите его:
- В верхней части страницы выберите ВКЛЮЧИТЬ API , чтобы отобразить вкладку Библиотека . Либо в меню слева выберите Библиотека .
- Найдите Geocoding API , затем выберите его из списка результатов.
- Выберите ВКЛЮЧИТЬ . После завершения процесса Geocoding API появится в списке API на панели инструментов .
Ценообразование и политика
Ценообразование
Информацию о ценах и политике использования службы JavaScript Geocoding см. в разделе Использование и выставление счетов для API геокодирования.
Политики
Использование вами службы геокодирования должно осуществляться в соответствии с Политикой API геокодирования .
Запросы геокодирования
Доступ к службе геокодирования асинхронный, так как API Google Maps необходимо сделать вызов на внешний сервер. По этой причине вам необходимо передать метод обратного вызова для выполнения по завершении запроса. Этот метод обратного вызова обрабатывает результат(ы). Обратите внимание, что геокодер может возвращать более одного результата.
Вы получаете доступ к службе геокодирования API Карт Google в своем коде с помощью объекта-конструктора google.maps.Geocoder
. Метод Geocoder.geocode()
инициирует запрос к службе геокодирования, передавая ей литерал объекта GeocoderRequest
, содержащий входные термины и метод обратного вызова для выполнения при получении ответа.
Литерал объекта GeocoderRequest
содержит следующие поля:
{ address: string, location: LatLng, placeId: string, bounds: LatLngBounds, componentRestrictions: GeocoderComponentRestrictions, region: string }
Обязательные параметры: необходимо указать одно и только одно из следующих полей:
-
address
— адрес, который вы хотите геокодировать.
или
location
—LatLng
(илиLatLngLiteral
), для которого вы хотите получить ближайший, понятный человеку адрес. Геокодер выполняет обратное геокодирование . См. Обратное геокодирование для получения дополнительной информации.
или
placeId
— Идентификатор места, для которого вы хотите получить ближайший, понятный человеку адрес. Подробнее об извлечении адреса для идентификатора места см . в разделе .
Необязательные параметры:
-
bounds
—LatLngBounds
, в пределах которого смещаются результаты геокодирования более заметно. Параметрbounds
будет только влиять, а не полностью ограничивать результаты геокодера. Подробнее о смещении области просмотра см. ниже. -
componentRestrictions
— Используется для ограничения результатов определенной областью. Подробнее о фильтрации компонентов см. ниже. -
region
— Код региона, указанный как указанный как двухсимвольный (не числовой) субтег региона Unicode. В большинстве случаев эти теги напрямую сопоставляются со знакомыми двухсимвольными значениями ccTLD («домен верхнего уровня»). Параметрregion
будет влиять только на результаты геокодера, а не полностью ограничивать их. Подробнее о смещении кода региона см. ниже. -
extraComputations
— Единственное допустимое значение для этого параметра —ADDRESS_DESCRIPTORS
. Подробнее см. в дескрипторах адресов . -
fulfillOnZeroResults
— Выполнить обещание по статусу ZERO_RESULT в ответе. Это может быть желательно, поскольку даже при нулевых результатах геокодирования могут быть возвращены дополнительные поля уровня ответа. Подробнее см. в разделе Выполнить по нулевым результатам .
Ответы по геокодированию
Служба геокодирования требует метод обратного вызова для выполнения при извлечении результатов геокодера. Этот обратный вызов должен передавать два параметра для хранения results
и код status
в указанном порядке.
Результаты геокодирования
Объект GeocoderResult
представляет собой один результат геокодирования. Запрос геокодирования может возвращать несколько объектов результата:
results[]: { types[]: string, formatted_address: string, address_components[]: { short_name: string, long_name: string, postcode_localities[]: string, types[]: string }, partial_match: boolean, place_id: string, postcode_localities[]: string, geometry: { location: LatLng, location_type: GeocoderLocationType viewport: LatLngBounds, bounds: LatLngBounds } }
Эти поля описаны ниже:
-
types[]
— это массив, указывающий тип адреса возвращаемого результата. Этот массив содержит набор из нуля или более тегов, идентифицирующих тип объекта, возвращаемого в результате. Например, геокод «Чикаго» возвращает «локальность», что указывает на то, что «Чикаго» — это город, а также возвращает «политический», что указывает на то, что это политическая единица. Подробнее о типах адресов и типах компонентов адреса см. ниже. -
formatted_address
— это строка, содержащая понятный человеку адрес этого местоположения.Часто этот адрес эквивалентен почтовому адресу. Обратите внимание, что некоторые страны, такие как Великобритания, не разрешают распространение настоящих почтовых адресов из-за лицензионных ограничений.
Форматированный адрес логически состоит из одного или нескольких компонентов адреса . Например, адрес «111 8th Avenue, New York, NY» состоит из следующих компонентов: «111» (номер улицы), «8th Avenue» (маршрут), «New York» (город) и «NY» (штат США).
Не анализируйте форматированный адрес программно. Вместо этого следует использовать отдельные компоненты адреса, которые ответ API включает в себя в дополнение к полю форматированного адреса.
address_components[]
— массив, содержащий отдельные компоненты, применимые к данному адресу.Каждый компонент адреса обычно содержит следующие поля:
-
types[]
— массив, указывающий тип компонента адреса. См. список поддерживаемых типов . -
long_name
— полное текстовое описание или имя компонента адреса, возвращаемое геокодером. -
short_name
— сокращенное текстовое имя компонента адреса, если доступно. Например, компонент адреса для штата Аляска может иметьlong_name
«Alaska» иshort_name
«AK» с использованием двухбуквенной почтовой аббревиатуры.
Обратите внимание на следующие факты о массиве
address_components[]
:- Массив компонентов адреса может содержать больше компонентов, чем
formatted_address
. - Массив не обязательно включает все политические субъекты, содержащие адрес, за исключением тех, которые включены в
formatted_address
. Чтобы получить все политические субъекты, содержащие определенный адрес, следует использовать обратное геокодирование, передавая широту/долготу адреса в качестве параметра запроса. - Формат ответа не гарантирует, что останется неизменным между запросами. В частности, количество
address_components
зависит от запрошенного адреса и может меняться со временем для одного и того же адреса. Компонент может изменить положение в массиве. Тип компонента может измениться. Определенный компонент может отсутствовать в более позднем ответе.
Более подробную информацию о типах адресов и типах компонентов адреса смотрите ниже.
-
partial_match
указывает, что геокодер не вернул точное совпадение для исходного запроса, хотя он смог сопоставить часть запрошенного адреса. Вы можете проверить исходный запрос на наличие опечаток и/или неполного адреса.Частичные совпадения чаще всего возникают для уличных адресов, которые не существуют в населенном пункте, который вы передаете в запросе. Частичные совпадения также могут быть возвращены, когда запрос соответствует двум или более местоположениям в одном и том же населенном пункте. Например, "Hillpar St, Bristol, UK" вернет частичное совпадение как для Henry Street, так и для Henrietta Street. Обратите внимание, что если запрос включает неправильно написанный компонент адреса, служба геокодирования может предложить альтернативный адрес. Предложения, инициированные таким образом, также будут отмечены как частичное совпадение.
-
place_id
— уникальный идентификатор места, который можно использовать с другими API Google. Например, вы можете использоватьplace_id
с библиотекой API Google Places, чтобы получить сведения о местном бизнесе, такие как номер телефона, часы работы, отзывы пользователей и многое другое. См. обзор идентификаторов мест . -
postcode_localities[]
— это массив, обозначающий все населенные пункты, содержащиеся в почтовом индексе, и присутствует только тогда, когда результатом является почтовый индекс, содержащий несколько населенных пунктов. geometry
содержит следующую информацию:-
location
содержит геокодированное значение широты, долготы. Обратите внимание, что мы возвращаем это местоположение как объектLatLng
, а не как отформатированную строку. -
location_type
хранит дополнительные данные об указанном местоположении. Поддерживаются следующие значения:-
ROOFTOP
указывает, что возвращенный результат отражает точный геокод. -
RANGE_INTERPOLATED
указывает, что возвращаемый результат отражает приближение (обычно на дороге), интерполированное между двумя точными точками (например, перекрестками). Интерполированные результаты обычно возвращаются, когда геокоды крыш недоступны для адреса улицы. -
GEOMETRIC_CENTER
указывает, что возвращаемый результат является геометрическим центром результата, такого как полилиния (например, улица) или многоугольник (регион). -
APPROXIMATE
указывает, что возвращаемый результат является приблизительным.
-
-
viewport
сохраняет рекомендуемую область просмотра для возвращаемого результата. -
bounds
(возвращается опционально) хранитLatLngBounds
, который может полностью содержать возвращаемый результат. Обратите внимание, что эти границы могут не соответствовать рекомендуемому окну просмотра. (Например, Сан-Франциско включает Фараллонские острова , которые технически являются частью города, но не должны возвращаться в окне просмотра.)
-
Адреса возвращаются геокодером с использованием предпочтительной языковой настройки браузера или языка, указанного при загрузке API JavaScript с использованием параметра language
. (Дополнительную информацию см. в разделе Локализация. )
Типы адресов и типы компонентов адреса
Массив types[]
в GeocoderResult в ответе указывает тип адреса . Примеры типов адресов включают почтовый адрес, страну или политическую единицу. Массив types
в GeocoderAddressComponent указывает тип каждой части адреса. Примеры включают номер дома или страну.
Адреса могут иметь несколько типов. Типы могут считаться «тегами». Например, многие города помечены political
и locality
типами.
Следующие типы поддерживаются и возвращаются как в массивах типа адреса, так и в массивах типа компонента адреса:
Тип адреса | Описание |
---|---|
street_address | Точный почтовый адрес. |
route | Именованный маршрут (например, «US 101»). |
intersection | Крупный перекрёсток, обычно двух крупных дорог. |
political | Политическая единица. Обычно этот тип обозначает многоугольник какой-либо гражданской администрации. |
country | Национальная политическая единица, обычно являющаяся типом наивысшего порядка, возвращаемым геокодером. |
administrative_area_level_1 | Гражданская единица первого порядка ниже уровня страны. В Соединенных Штатах эти административные уровни являются штатами. Не все страны демонстрируют эти административные уровни. В большинстве случаев краткие названия administrative_area_level_1 будут близко соответствовать подразделениям ISO 3166-2 и другим широко распространенным спискам; однако это не гарантируется, поскольку наши результаты геокодирования основаны на различных сигналах и данных о местоположении. |
administrative_area_level_2 | Гражданская единица второго порядка ниже уровня страны. В Соединенных Штатах эти административные уровни — округа. Не во всех странах есть эти административные уровни. |
administrative_area_level_3 | Гражданская единица третьего порядка ниже уровня страны. Этот тип указывает на незначительное гражданское деление. Не все нации демонстрируют эти административные уровни. |
administrative_area_level_4 | Четвертый уровень гражданского образования ниже уровня страны. Этот тип указывает на незначительное гражданское деление. Не все нации демонстрируют эти административные уровни. |
administrative_area_level_5 | Гражданская единица пятого порядка ниже уровня страны. Этот тип указывает на незначительное гражданское деление. Не все нации демонстрируют эти административные уровни. |
administrative_area_level_6 | Гражданская единица шестого порядка ниже уровня страны. Этот тип указывает на незначительное гражданское деление. Не все нации демонстрируют эти административные уровни. |
administrative_area_level_7 | Седьмой уровень гражданского образования ниже уровня страны. Этот тип указывает на незначительное гражданское деление. Не все нации демонстрируют эти административные уровни. |
colloquial_area | Широко используемое альтернативное название сущности. |
locality | Инкорпорированное политическое образование города или поселка. |
sublocality | Гражданская сущность первого порядка ниже населенного пункта. Для некоторых населенных пунктов может получить один из дополнительных типов: sublocality_level_1 to sublocality_level_5 . Каждый уровень населенного пункта является гражданской сущностью. Большие числа указывают на меньшую географическую область. |
neighborhood | Названный район. |
premise | Имеющее название место, обычно здание или группа зданий с общим названием. |
subpremise | Адресуемая сущность, расположенная ниже уровня помещения, например, квартира, блок или апартаменты. |
plus_code | Кодированная ссылка на местоположение, полученная из широты и долготы. Плюс-коды могут использоваться в качестве замены уличных адресов в местах, где их нет (где здания не пронумерованы или улицы не названы). Подробности см. на https://plus.codes . |
postal_code | Почтовый индекс, используемый для адресации почтовых отправлений внутри страны. |
natural_feature | Выдающаяся природная достопримечательность. |
airport | Аэропорт. |
park | Парк с названием. |
point_of_interest | Именованная точка интереса. Обычно такие «POI» — это известные местные объекты, которые нелегко отнести к другой категории, например, «Эмпайр-стейт-билдинг» или «Эйфелева башня». |
Пустой список типов указывает на то, что для конкретного компонента адреса не существует известных типов (например, Lieu-dit во Франции).
В дополнение к вышеперечисленному компоненты адреса могут включать в себя следующие типы.
Примечание: этот список не является исчерпывающим и может быть изменен.
Помимо вышеперечисленного, компоненты адреса могут включать типы, перечисленные ниже.
Тип компонента адреса | Описание |
---|---|
floor | Адрес этажа здания. |
establishment | Обычно это место, которое еще не было категоризировано. |
landmark | Близлежащее место, которое используется в качестве ориентира для облегчения навигации. |
point_of_interest | Именованная точка интереса. |
parking | Парковка или парковочное сооружение. |
post_box | Определенный почтовый ящик. |
postal_town | Группа географических областей, таких как locality и sublocality , используемая для почтовых адресов в некоторых странах. |
room | Адрес комнаты в здании. |
street_number | Точный номер дома. |
bus_station , train_station и transit_station | Местоположение остановки автобуса, поезда или общественного транспорта. |
Коды статуса
Код status
может возвращать одно из следующих значений:
-
"OK"
означает, что ошибок не произошло; адрес был успешно проанализирован и был возвращен по крайней мере один геокод. -
"ZERO_RESULTS"
указывает на то, что геокодирование прошло успешно, но не вернуло результатов. Это может произойти, если геокодеру был передан несуществующийaddress
. -
"OVER_QUERY_LIMIT"
означает, что вы превысили свою квоту. -
"REQUEST_DENIED"
означает, что ваш запрос был отклонен. Веб-странице не разрешено использовать геокодер. -
"INVALID_REQUEST"
обычно указывает на то, что запрос (address
,components
илиlatlng
) отсутствует. -
"UNKNOWN_ERROR"
означает, что запрос не может быть обработан из-за ошибки сервера. Запрос может быть выполнен успешно, если вы попробуете еще раз. -
"ERROR"
означает, что запрос истек или возникла проблема при подключении к серверам Google. Запрос может быть выполнен успешно, если вы попробуете еще раз.
В этом примере мы геокодируем адрес и размещаем маркер на возвращенных значениях широты и долготы. Обратите внимание, что обработчик передается как анонимный функциональный литерал.
var geocoder; var map; function initialize() { geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(-34.397, 150.644); var mapOptions = { zoom: 8, center: latlng } map = new google.maps.Map(document.getElementById('map'), mapOptions); } function codeAddress() { var address = document.getElementById('address').value; geocoder.geocode( { 'address': address}, function(results, status) { if (status == 'OK') { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { alert('Geocode was not successful for the following reason: ' + status); } }); } <body onload="initialize()"> <div id="map" style="width: 320px; height: 480px;"></div> <div> <input id="address" type="textbox" value="Sydney, NSW"> <input type="button" value="Encode" onclick="codeAddress()"> </div> </body>
Смещение области просмотра
Вы можете указать службе геокодирования отдавать предпочтение результатам в пределах заданной области просмотра (выраженной в виде ограничивающей рамки). Это можно сделать, установив параметр bounds
в литерале объекта GeocoderRequest
, чтобы определить границы этой области просмотра. Обратите внимание, что смещение отдает предпочтение только результатам в пределах границ; если за пределами этих границ существуют более релевантные результаты, они могут быть включены.
Например, геокод для «Winnetka» обычно возвращает этот пригород Чикаго:
{ "types":["locality","political"], "formatted_address":"Winnetka, IL, USA", "address_components":[{ "long_name":"Winnetka", "short_name":"Winnetka", "types":["locality","political"] },{ "long_name":"Illinois", "short_name":"IL", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "geometry":{ "location":[ -87.7417070, 42.1083080], "location_type":"APPROXIMATE" }, "place_id": "ChIJW8Va5TnED4gRY91Ng47qy3Q" }
Однако указание параметра bounds
, определяющего ограничивающую рамку для долины Сан-Фернандо в Лос-Анджелесе, приводит к тому, что этот геокод возвращает район с названием «Winnetka» в этом месте:
{ "types":["sublocality","political"], "formatted_address":"Winnetka, California, USA", "address_components":[{ "long_name":"Winnetka", "short_name":"Winnetka", "types":["sublocality","political"] },{ "long_name":"Los Angeles", "short_name":"Los Angeles", "types":["administrative_area_level_3","political"] },{ "long_name":"Los Angeles", "short_name":"Los Angeles", "types":["administrative_area_level_2","political"] },{ "long_name":"California", "short_name":"CA", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "geometry":{ "location": [34.213171,-118.571022], "location_type":"APPROXIMATE" }, "place_id": "ChIJ0fd4S_KbwoAR2hRDrsr3HmQ" }
Смещение регионального кода
Вы можете настроить службу геокодирования на возврат результатов, явно привязанных к определенному региону, с помощью параметра region
. Этот параметр принимает код региона, указанный как двухсимвольный (не числовой) субтег региона Unicode. Эти теги напрямую сопоставляются со знакомыми двухсимвольными значениями ccTLD («домен верхнего уровня»), такими как «uk» в «co.uk», например. В некоторых случаях тег region
также поддерживает коды ISO-3166-1, которые иногда отличаются от значений ccTLD (например, «GB» для «Great Britain»).
При использовании параметра region
:
- Укажите только одну страну или регион. Несколько значений игнорируются и могут привести к неудачному запросу.
- Используйте только двухсимвольные субтеги регионов (формат Unicode CLDR). Все остальные вводы приведут к ошибкам.
- Поддерживаются только страны и регионы, указанные в сведениях о покрытии платформы Google Карт .
Запросы на геокодирование можно отправлять для каждого домена, в котором основное приложение Google Maps предлагает геокодирование. Обратите внимание, что смещение отдает предпочтение только результатам для определенного домена; если за пределами этого домена существуют более релевантные результаты, они могут быть включены.
Например, геокод для «Толедо» возвращает следующий результат, поскольку доменом по умолчанию для службы геокодирования являются Соединенные Штаты:
{ "types":["locality","political"], "formatted_address":"Toledo, OH, USA", "address_components":[{ "long_name":"Toledo", "short_name":"Toledo", "types":["locality","political"] },{ "long_name":"Ohio", "short_name":"OH", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "place_id": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw" }
Геокод для «Толедо» с полем region
, установленным на 'es'
(Испания), вернет испанский город:
{ "types":["locality","political"], "formatted_address":"Toledo, España", "address_components":[{ "long_name":"Toledo", "short_name":"Toledo", "types":["locality","political"] },{ "long_name":"Toledo", "short_name":"TO", "types":["administrative_area_level_2","political"] },{ "long_name":"Castilla-La Mancha", "short_name":"CM", "types":["administrative_area_level_1","political"] },{ "long_name":"España", "short_name":"ES", "types":["country","political"] }], "place_id": "ChIJ8f21C60Lag0R_q11auhbf8Y" }
Фильтрация компонентов
Вы можете настроить службу геокодирования на возврат результатов адресов, ограниченных определенной областью, используя фильтр компонентов. Укажите фильтр в параметре componentRestrictions
. Значения фильтра поддерживают те же методы исправления орфографии и частичного соответствия, что и другие запросы геокодирования.
Геокодер возвращает только те результаты, которые соответствуют всем фильтрам компонентов. То есть, он оценивает спецификации фильтра как И, а не ИЛИ.
Фильтр компонентов состоит из одного или нескольких из следующих элементов:
-
route
соответствует длинному или короткому названию маршрута. -
locality
соответствует типам локальности и сублокальности. -
administrativeArea
соответствует всем уровням административной области. -
postalCode
соответствует почтовым индексам и префиксам почтовых индексов. -
country
соответствует названию страны или двухбуквенному коду страны ISO 3166-1 . Примечание: API следует стандарту ISO для определения стран, и фильтрация работает лучше всего при использовании соответствующего кода ISO страны.
В следующем примере показано использование параметра componentRestrictions
для фильтрации по country
и postalCode
:
function codeAddress() { geocoder.geocode({ componentRestrictions: { country: 'AU', postalCode: '2000' } }, function(results, status) { if (status == 'OK') { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { window.alert('Geocode was not successful for the following reason: ' + status); } }); }
Выполнить при нулевом результате
Для обратного геокодирования по умолчанию обещание нарушается при status=ZERO_RESULTS
. Однако дополнительные поля уровня ответа plus_code
и address_descriptor
могут быть заполнены в этом случае. Если для параметра fulfillOnZeroResults
указано значение true, заполняется в этом случае. Если для параметра fulfillOnZeroResults
указано значение true, обещание не нарушается, и эти дополнительные поля доступны из обещания, если они присутствуют.
Ниже приведен пример такого поведения для широты/долготы в Антарктиде. Несмотря на то, что нет результатов обратного геокодирования, мы все равно можем напечатать код плюса в обещании, если установим fulfillOnZeroResults=true
.
function addressDescriptorReverseGeocoding() { var latlng = new google.maps.LatLng(-75.290330, 38.653861); geocoder .geocode({ 'location': latlng, 'fulfillOnZeroResults': true, }) .then((response) => { console.log(response.plus_code); }) .catch((error) => { window.alert(`Error`); }); }
Описатели адреса
Дескрипторы адресов включают дополнительную информацию, которая помогает описать местоположение с использованием ориентиров и областей. Ознакомьтесь с демонстрацией дескрипторов адресов , чтобы изучить эту функцию.
Дескрипторы адресов можно включить с помощью параметра extraComputations
. Включите extra_computations=ADDRESS_DESCRIPTORS
в запрос геокодирования , запрос обратного геокодирования или запрос геокодирования мест, чтобы получить дескрипторы адресов в своем ответе.
Пример геокодирования мест
Следующий запрос содержит адрес места в Дели.
function addressDescriptorPlaceIdLookup() { geocoder.geocode({ geocoder.geocode({ 'placeId': 'ChIJyxAX8Bj9DDkRgBfAnBYa66Q', 'extraComputations': ['ADDRESS_DESCRIPTORS'] }, function(results, status) { if (status == 'OK') { console.log(results[0].address_descriptor); } else { window.alert('Geocode was not successful for the following reason: ' + status); } }); }
Пример обратного геокодирования
Следующий запрос содержит значение широты/долготы для местоположения в Дели.
function addressDescriptorReverseGeocoding() { var latlng = new google.maps.LatLng(28.640964,77.235875); geocoder .geocode({ 'location': latlng, 'extraComputations': ["ADDRESS_DESCRIPTORS"], }) .then((response) => { console.log(response.address_descriptor); }) .catch((error) => { window.alert(`Error`); }); }
Пример дескриптора адреса
Пример address_descriptor
выглядит следующим образом.
{ "address_descriptor" : { "areas" : [ { "containment" : "OUTSKIRTS", "display_name" : { "language_code" : "en", "text" : "Turkman Gate" }, "place_id" : "ChIJ_7LLvyb9DDkRMKKxP9YyXgs" }, { "containment" : "OUTSKIRTS", "display_name" : { "language_code" : "en", "text" : "Chandni Chowk" }, "place_id" : "ChIJWcXciBr9DDkRUb4dCDykTwI" }, { "containment" : "NEAR", "display_name" : { "language_code" : "en", "text" : "Katar Ganj" }, "place_id" : "ChIJH3cWUyH9DDkRaw-9CjvcRvY" } ], "landmarks" : [ { "display_name" : { "language_code" : "en", "text" : "Delite Cinema" }, "straight_line_distance_meters" : 29.9306755065918, "place_id" : "ChIJLfiYDCT9DDkROoEa7NdupUM", "travel_distance_meters" : 418.7794799804688, "spatial_relationship" : "ACROSS_THE_ROAD", "types" : [ "establishment", "movie_theater", "point_of_interest" ] }, { "display_name" : { "language_code" : "en", "text" : "YES Bank" }, "straight_line_distance_meters" : 66.83731079101562, "place_id" : "ChIJFYHM3yb9DDkRRKGkZl2mpSQ", "travel_distance_meters" : 489.0340270996094, "spatial_relationship" : "DOWN_THE_ROAD", "types" : [ "bank", "establishment", "finance", "point_of_interest" ] }, { "display_name" : { "language_code" : "en", "text" : "UCO Bank" }, "straight_line_distance_meters" : 25.38849639892578, "place_id" : "ChIJ-c6_wCb9DDkRjIk1LeqRtGM", "travel_distance_meters" : 403.2246398925781, "spatial_relationship" : "ACROSS_THE_ROAD", "types" : [ "atm", "bank", "establishment", "finance", "point_of_interest" ] }, { "display_name" : { "language_code" : "en", "text" : "Delhi By Cycle Meeting Point" }, "straight_line_distance_meters" : 44.02867126464844, "place_id" : "ChIJNxVfkSb9DDkRJD22l-eGFdM", "travel_distance_meters" : 97.41281890869141, "spatial_relationship" : "AROUND_THE_CORNER", "types" : [ "establishment", "point_of_interest", "tourist_attraction", "travel_agency" ] }, { "display_name" : { "language_code" : "en", "text" : "Axis Bank Branch" }, "straight_line_distance_meters" : 102.3495178222656, "place_id" : "ChIJr3uaDCT9DDkR8roHTVSn1x4", "travel_distance_meters" : 330.8566284179688, "spatial_relationship" : "DOWN_THE_ROAD", "types" : [ "bank", "establishment", "finance", "point_of_interest" ] } ] } }
В каждом объекте address_descriptor
есть два массива: landmarks
и areas
. Массив landmarks
содержит до 5 результатов, ранжированных по релевантности с учетом близости к запрошенной координате, распространенности ориентира и его видимости. Каждый результат landmark содержит следующие значения:
-
place_id
— это идентификатор места результата landmarks. См. обзор идентификаторов мест . -
display_name
— отображаемое имя ориентира, содержащееlanguage_code
иtext
. -
straight_line_distance_meters
— это расстояние между точками в метрах между входными координатами и результатами поиска ориентиров. -
travel_distance_meters
— это расстояние в метрах, пройденное по дорожной сети (без учета дорожных ограничений) между входными координатами и полученными ориентирами. -
spatial_relationship
— это предполагаемая связь между входными координатами и результатами ориентиров: -
"NEAR"
— это отношение по умолчанию, когда не применяется ни одно из следующих условий. -
"WITHIN"
, когда входная координата содержится в границах структуры, связанной с ориентиром. -
"BESIDE"
, когда входные координаты непосредственно примыкают к ориентиру или точке доступа к ориентиру. -
"ACROSS_THE_ROAD"
, когда входная координата находится прямо напротив ориентира на другой стороне маршрута. -
"DOWN_THE_ROAD"
, когда входные координаты находятся на том же маршруте, что и ориентир, но не"BESIDES"
или"ACROSS_THE_ROAD"
. -
"AROUND_THE_CORNER"
, когда входная координата расположена вдоль перпендикулярного маршрута в качестве ориентира (ограничено одним поворотом). -
"BEHIND"
, когда входная координата пространственно близка к ориентиру, но далека от его точки доступа. -
types
— это типы мест достопримечательности.
Объект areas
содержит до 3 ответов и ограничивается местами, представляющими небольшие регионы, такие как кварталы, сублокалитеты и крупные комплексы. Области, содержащие запрошенную координату, перечислены первыми и упорядочены от наименьшей к наибольшей. Каждый результат areas
содержит следующие значения:
-
place_id
— это идентификатор места в результатах областей. Смотрите обзор идентификаторов мест . -
display_name
— отображаемое имя области, содержащееlanguage_code
иtext
. -
containment
— это предполагаемое соотношение сдерживания между входной координатой и результирующими областями: -
"NEAR"
— это отношение по умолчанию, когда не применяется ни одно из следующих условий. -
"WITHIN"
, когда входная координата близка к центру области. -
"OUTSKIRTS"
, когда входная координата находится близко к краю области.
Покрытие дескриптора адреса
Дескрипторы адресов находятся в GA для Индии. Использование дескрипторов адресов в Индии не влечет за собой дополнительных расходов, и использование покрывается существующим Geocoding (India) Essentials SKU .
Обратная связь
Эта функция доступна во всех регионах. Она находится в стадии GA для Индии и в стадии экспериментального запуска pre-GA для всех остальных регионов. Мы будем признательны за обратную связь:
- По вопросам, касающимся только региона Индия, обращайтесь в службу поддержки .
- Чтобы оставить отзыв об экспериментальной версии, отправьте нам электронное письмо по адресу address-descriptors-feedback@google.com .
- Более подробную информацию см. в разделе «Подробности покрытия дескрипторов адресов» .
Обратное геокодирование (поиск адреса)
Термин геокодирование обычно относится к переводу адреса, понятного человеку, в местоположение на карте. Процесс обратного преобразования местоположения на карте в адрес, понятный человеку, известен как обратное геокодирование .
Вместо указания текстового address
укажите в параметре location
пару широты и долготы, разделенных запятыми.
В следующем примере геокодируется значение широты/долготы и карта центрируется в этом месте, открывая информационное окно с отформатированным адресом:
Машинопись
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 8, center: { lat: 40.731, lng: -73.997 }, } ); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { geocodeLatLng(geocoder, map, infowindow); } ); } function geocodeLatLng( geocoder: google.maps.Geocoder, map: google.maps.Map, infowindow: google.maps.InfoWindow ) { const input = (document.getElementById("latlng") as HTMLInputElement).value; const latlngStr = input.split(",", 2); const latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]), }; geocoder .geocode({ location: latlng }) .then((response) => { if (response.results[0]) { map.setZoom(11); const marker = new google.maps.Marker({ position: latlng, map: map, }); infowindow.setContent(response.results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 8, center: { lat: 40.731, lng: -73.997 }, }); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); document.getElementById("submit").addEventListener("click", () => { geocodeLatLng(geocoder, map, infowindow); }); } function geocodeLatLng(geocoder, map, infowindow) { const input = document.getElementById("latlng").value; const latlngStr = input.split(",", 2); const latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]), }; geocoder .geocode({ location: latlng }) .then((response) => { if (response.results[0]) { map.setZoom(11); const marker = new google.maps.Marker({ position: latlng, map: map, }); infowindow.setContent(response.results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } window.initMap = initMap;
Попробуйте образец
Обратите внимание, что в предыдущем примере мы показали первый результат, выбрав results[0]
. Обратный геокодер часто возвращает более одного результата. Геокодированные адреса — это не просто почтовые адреса, а любой способ географически именовать местоположение. Например, при геокодировании точки в городе Чикаго геокодированная точка может быть помечена как почтовый адрес, как город (Чикаго), как его штат (Иллинойс) или как страна (США). Все это адреса для геокодера. Обратный геокодер возвращает все эти результаты.
Обратный геокодер сопоставляет политические единицы (страны, провинции, города и районы), почтовые адреса и почтовые индексы.
Вот пример списка адресов, которые может вернуть указанный выше запрос:
results[0].formatted_address: "277 Bedford Ave, Brooklyn, NY 11211, USA" results[1].formatted_address: "Grand St/Bedford Av, Brooklyn, NY 11211, USA" results[2].formatted_address: "Williamsburg, Brooklyn, NY, USA" results[3].formatted_address: "Brooklyn, NY, USA" results[4].formatted_address: "New York, NY, USA" results[5].formatted_address: "Brooklyn, NY 11211, USA" results[6].formatted_address: "Kings County, NY, USA" results[7].formatted_address: "New York-Northern New Jersey-Long Island, NY-NJ-PA, USA" results[8].formatted_address: "New York Metropolitan Area, USA" results[9].formatted_address: "New York, USA"
Адреса возвращаются в порядке от лучшего к меньшему совпадению. Как правило, более точный адрес является наиболее заметным результатом, как в этом случае. Обратите внимание, что мы возвращаем разные типы адресов, от наиболее конкретного адреса улицы до менее конкретных политических образований, таких как кварталы, города, округа, штаты и т. д. Если вы хотите сопоставить более общий адрес, вы можете проверить поле results[].types
.
Примечание: Обратное геокодирование не является точной наукой. Геокодер попытается найти ближайшее адресуемое местоположение в пределах определенного допуска.
Получение адреса для идентификатора места
Укажите placeId
, чтобы найти адрес для заданного идентификатора места. Идентификатор места — это уникальный идентификатор, который можно использовать с другими API Google. Например, вы можете указать placeId
, возвращаемый API Roads, чтобы получить адрес для привязанной точки. Для получения дополнительной информации об идентификаторах мест см. обзор идентификаторов мест .
При указании placeId
запрос не может содержать ни одно из следующих полей:
-
address
-
latLng
-
location
-
componentRestrictions
Следующий пример принимает идентификатор места, находит соответствующий адрес и центрирует карту в этом месте. Он также выводит информационное окно, показывающее отформатированный адрес соответствующего места:
Машинопись
// Initialize the map. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 8, center: { lat: 40.72, lng: -73.96 }, } ); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { geocodePlaceId(geocoder, map, infowindow); } ); } // This function is called when the user clicks the UI button requesting // a geocode of a place ID. function geocodePlaceId( geocoder: google.maps.Geocoder, map: google.maps.Map, infowindow: google.maps.InfoWindow ) { const placeId = (document.getElementById("place-id") as HTMLInputElement) .value; geocoder .geocode({ placeId: placeId }) .then(({ results }) => { if (results[0]) { map.setZoom(11); map.setCenter(results[0].geometry.location); const marker = new google.maps.Marker({ map, position: results[0].geometry.location, }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// Initialize the map. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 8, center: { lat: 40.72, lng: -73.96 }, }); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); document.getElementById("submit").addEventListener("click", () => { geocodePlaceId(geocoder, map, infowindow); }); } // This function is called when the user clicks the UI button requesting // a geocode of a place ID. function geocodePlaceId(geocoder, map, infowindow) { const placeId = document.getElementById("place-id").value; geocoder .geocode({ placeId: placeId }) .then(({ results }) => { if (results[0]) { map.setZoom(11); map.setCenter(results[0].geometry.location); const marker = new google.maps.Marker({ map, position: results[0].geometry.location, }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } window.initMap = initMap;