Служба геокодирования

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Обзор

Геокодирование — это процесс преобразования адресов (например, «1600 Amphitheatre Parkway, Mountain View, CA») в географические координаты (например, широта 37,423021 и долгота -122,083739), которые можно использовать для размещения маркеров или расположения на карте.

Обратное геокодирование — это процесс преобразования географических координат в удобочитаемый адрес (см. Обратное геокодирование (поиск адреса) ).

Вы также можете использовать геокодер, чтобы найти адрес для данного идентификатора места .

Maps JavaScript API предоставляет класс Geocoder для динамического геокодирования и обратного геокодирования на основе пользовательского ввода. Если вместо этого вы хотите геокодировать статические известные адреса, см. веб-службу геокодирования .

Начиная

Прежде чем использовать службу геокодирования в Maps JavaScript API, сначала убедитесь, что Geocoding API включен в Google Cloud Console в том же проекте, который вы настроили для Maps JavaScript API.

Чтобы просмотреть список включенных API:

  1. Перейдите в облачную консоль Google .
  2. Нажмите кнопку « Выбрать проект» , затем выберите тот же проект, который вы настроили для Maps JavaScript API, и нажмите « Открыть » .
  3. В списке API на панели инструментов найдите API геокодирования .
  4. Если вы видите API в списке, все готово. Если API нет в списке, включите его:
    1. В верхней части страницы выберите ВКЛЮЧИТЬ API , чтобы отобразить вкладку « Библиотека ». Кроме того, в левом боковом меню выберите « Библиотека ».
    2. Найдите API геокодирования и выберите его в списке результатов.
    3. Выберите ВКЛЮЧИТЬ . Когда процесс завершится, Geocoding API появится в списке API на панели инструментов .

Ценообразование и политика

Цены

С 16 июля 2018 г. для Карт, Маршрутов и Мест вступил в силу новый тарифный план с оплатой по мере использования. Чтобы узнать больше о новых ценах и ограничениях на использование службы геокодирования JavaScript, см. раздел Использование и выставление счетов за API геокодирования.

Политики

Использование службы геокодирования должно осуществляться в соответствии с политиками, описанными для API геокодирования .

Запросы на геокодирование

Доступ к службе геокодирования является асинхронным, поскольку API Карт Google должен выполнить вызов на внешний сервер. По этой причине вам необходимо передать метод обратного вызова для выполнения после завершения запроса. Этот метод обратного вызова обрабатывает результат(ы). Обратите внимание, что геокодер может вернуть более одного результата.

Вы получаете доступ к службе геокодирования 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 влияет только на результаты геокодера, но не ограничивает их полностью. Дополнительную информацию о смещении кода региона см. ниже.

Геокодирование ответов

Службе геокодирования требуется метод обратного вызова для выполнения после получения результатов геокодера. Этот обратный вызов должен передавать два параметра для хранения 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 «Аляска» и short_name «АК» с использованием двухбуквенной почтовой аббревиатуры.

    Обратите внимание на следующие факты о массиве address_components[] :

    • Массив компонентов адреса может содержать больше компонентов, чем formatted_address .
    • Массив не обязательно включает все политические объекты, содержащие адрес, за исключением включенных в formatted_address . Чтобы получить все политические объекты, содержащие определенный адрес, следует использовать обратное геокодирование, передавая широту/долготу адреса в качестве параметра запроса.
    • Не гарантируется, что формат ответа останется неизменным между запросами. В частности, количество address_components зависит от запрошенного адреса и может меняться со временем для одного и того же адреса. Компонент может менять позицию в массиве. Тип компонента может меняться. Определенный компонент может отсутствовать в более позднем ответе.

    Дополнительную информацию о типах адресов и типах компонентов адреса см. ниже.

  • partial_match указывает, что геокодер не вернул точного соответствия исходному запросу, хотя смог сопоставить часть запрошенного адреса. Вы можете проверить первоначальный запрос на наличие опечаток и/или неполного адреса.

    Частичное совпадение чаще всего происходит для уличных адресов, которые не существуют в населенном пункте, который вы передаете в запросе. Частичные совпадения также могут быть возвращены, когда запрос соответствует двум или более местоположениям в одной и той же местности. Например, «Хиллпар-стрит, Бристоль, Великобритания» вернет частичное совпадение как для улицы Генри, так и для улицы Генриетта. Обратите внимание, что если запрос включает компонент адреса с ошибкой, служба геокодирования может предложить альтернативный адрес. Предложения, вызванные таким образом, также будут помечены как частичное совпадение.

  • place_id — это уникальный идентификатор места, который можно использовать с другими API Google. Например, вы можете использовать place_id с библиотекой Google Places API , чтобы получить информацию о местной компании, такую ​​как номер телефона, часы работы, отзывы пользователей и многое другое. См. обзор идентификатора места .
  • 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 указывает гражданскую единицу первого порядка ниже уровня страны. В Соединенных Штатах такими административными уровнями являются штаты. Не все страны имеют эти административные уровни. В большинстве случаев короткие имена admin_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 до 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 объекта GeocoderRequest, чтобы определить границы этого окна просмотра. Обратите внимание, что при смещении предпочтение отдается только результатам в определенных пределах; если более релевантные результаты существуют за пределами этих границ, они могут быть включены.

Например, геокод для «Виннетка» обычно возвращает этот пригород Чикаго:

{
  "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» для «Великобритании»).

При использовании параметра region :

  • Укажите только одну страну или регион. Множественные значения игнорируются и могут привести к неудачному запросу.
  • Используйте только двухсимвольные вложенные теги региона (формат Unicode CLDR). Все остальные входные данные приведут к ошибкам.
  • Поддерживаются только страны и регионы, перечисленные в Сведениях о покрытии платформы Google Maps .

Запросы на геокодирование можно отправлять для каждого домена, в котором основное приложение 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 соответствует типам locality и sublocality.
  • 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);
  }
});
}

Обратное геокодирование (поиск адреса)

Термин геокодирование обычно относится к переводу удобочитаемого адреса в местоположение на карте. Обратный процесс преобразования местоположения на карте в удобочитаемый адрес известен как обратное геокодирование .

Вместо текстового 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 , возвращенный Roads API , чтобы получить адрес точки привязки. Дополнительные сведения об идентификаторах мест см. в обзоре идентификаторов мест .

Когда вы 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;
Посмотреть пример

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