Сервис Geocoding

Обзор

Геокодирование — это процесс преобразования адресов (например, «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:

  1. Перейдите в консоль Google Cloud .
  2. Нажмите кнопку Выбрать проект , затем выберите тот же проект, который вы настроили для Maps JavaScript API, и нажмите Открыть .
  3. В списке API на панели инструментов найдите API геокодирования .
  4. Если вы видите API в списке, все готово. Если API не указан, включите его:
    1. В верхней части страницы выберите ВКЛЮЧИТЬ API , чтобы отобразить вкладку Библиотека . Либо в меню слева выберите Библиотека .
    2. Найдите Geocoding API , затем выберите его из списка результатов.
    3. Выберите ВКЛЮЧИТЬ . После завершения процесса 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 — адрес, который вы хотите геокодировать.
    или
    locationLatLng (или LatLngLiteral ), для которого вы хотите получить ближайший, понятный человеку адрес. Геокодер выполняет обратное геокодирование . См. Обратное геокодирование для получения дополнительной информации.
    или
    placeId — Идентификатор места, для которого вы хотите получить ближайший, понятный человеку адрес. Подробнее об извлечении адреса для идентификатора места см . в разделе .

Необязательные параметры:

  • boundsLatLngBounds , в пределах которого смещаются результаты геокодирования более заметно. Параметр 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 укажите в параметре 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;
Посмотреть пример

Попробуйте образец