Все готово!

Прежде чем приступить к разработке, ознакомьтесь с документацией для разработчиков.

Активация Google Maps JavaScript API

Чтобы помочь вам освоиться, мы покажем, как выполнить некоторые необходимые действия в консоли разработчика Google:

  1. Создание или выбор проекта
  2. Активация Google Maps JavaScript API и связанных служб
  3. Создание соответствующих ключей

Служба Geocoding

Обзор

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

Обратное геокодирование – это процесс преобразования географических координат в адреса, понятные для пользователя. Обратное геокодирование также позволяет найти адрес, соответствующий заданному идентификатору места.

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

Начало работы

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

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

  1. Перейдите в Google API Console.
  2. Нажмите кнопку Select a project, затем выберите тот же проект, который вы установили для Google Maps JavaScript API, и нажмите Open.
  3. В списке API на странице Dashboard найдите Google Maps Geocoding API.
  4. Если этот API присутствует в списке – все установлено. Если этого API в списке нет, включите его:
    1. Вверху страницы выберите ENABLE API, чтобы открыть вкладку Library. В качестве альтернативы можно выбрать пункт Library в меню слева.
    2. Найдите Google Maps Geocoding API и выберите его из списка результатов.
    3. Нажмите ENABLE. Когда процесс завершится, Google Maps Geocoding API появится в списке API на панели Dashboard.

Правила и ограничения на использование

Квоты

Для службы геокодирования действуют следующие ограничения на использование:

Использование службы геокодирования c тарифом Standard Plan

  • 2 500 бесплатных запросов в день, рассчитывается как сумма обращений на стороне клиента и на стороне сервера; разрешите тарификацию ( разрешить тарификацию), чтобы получить больший размер квоты по цене 0,50 долларов США за 1 000 дополнительных обращений. Максимальный размер квоты составляет 100 000 запросов в день.
  • 50 запросов в секунду, рассчитывается как сумма запросов на стороне клиента и на стороне сервера.

Использование службы геокодирования с премиум-планом

  • Общая ежедневная бесплатная квота – 100 000 запросов каждые 24 часа; дополнительные запросы оплачиваются ежегодно приобретаемыми кредитами Maps API.
  • Без ограничений запросов по одному проекту на стороне клиента в секунду. Обратите внимание, что API на стороне сервера ограничен 50 запросами в секунду.

Лимит частоты применяется к сеансу каждого пользователя независимо от количества пользователей проекта.

Ограничение по частоте предотвращает использование служб на стороне клиента для массовых запросов, например, массового геокодирования. Для массовых запросов используйте веб-службу Google Maps Geocoding API.

Политики

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

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

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

Для доступа к службе геокодирования Google Maps API в коде служит объект google.maps.Geocoder. Метод Geocoder.geocode() инициирует запрос в службу геокодирования и передает ей литерал объекта GeocoderRequest, содержащий исходные условия и метод обратного вызова, который должен быть выполнен после получения ответа.

Литерал объекта GeocoderRequest содержит следующие поля:

{
 address: string,
 location: LatLng,
 placeId: string,
 bounds: LatLngBounds,
 componentRestrictions: GeocoderComponentRestrictions,
 region: string
}

Обязательные параметры: вы должны указать значение одного (и только одного) из следующих полей.

  • address – адрес, для которого нужно выполнить геокодирование.
  • location – значение LatLng (или LatLngLiteral), для которого нужно получить ближайший адрес в понятной человеку форме. Геокодировщик выполняет обратное геокодирование. Дополнительную информацию см. в разделе Обратное геокодирование.
  • placeId – идентификатор места, для которого нужно получить ближайший адрес в понятной человеку форме. Это уникальный идентификатор, который можно использовать и с другими интерфейсами Google API. Например, вы можете использовать идентификатор placeId, возвращаемый Google Maps Roads API, для получения адреса фиксированной точки. Подробные сведения об идентификаторах мест см. в соответствующем обзоре. В случае передачи placeId геокодировщик выполняет обратное геокодирование. Дополнительную информацию см. в разделе Обратное геокодирование.

Дополнительные параметры:

  • bounds – предпочтительный диапазон LatLngBounds для результатов геокодирования. Параметр bounds влияет на результаты работы геокодировщика, но не ограничивает их полностью. (Дополнительную информацию см. в разделе Предпочтение области просмотра ниже.)
  • componentRestrictions – используется для ограничения результатов определенной областью. (Дополнительную информацию см. в разделе Фильтрация компонентов ниже.)
  • region – код региона, указанный в виде подтега region на языке IANA. В большинстве случаев эти теги напрямую соответствуют известным двухсимвольным значениям 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[] – массив, указывающий тип возвращаемого результата. Этот массив содержит набор из нескольких (либо ни одного) тегов, которые определяют тип возвращаемого элемента. Например, геокод "Chicago" возвращает значение "locality", указывающее, что "Chicago" – это город, а также значение "political", указывающее, что это политическая единица.
  • formatted_address – строка, содержащая удобочитаемый адрес этого места. Часто это почтовый адрес, который может выглядеть по-разному в зависимости от страны. (В некоторых странах, таких как Великобритания, не разрешено распространение настоящих почтовых адресов в связи с ограничениями лицензирования.) Адрес обычно состоит из одного или нескольких компонентов адреса. Например, "Россия, Москва, Балчуг, 7" содержит отдельные компоненты для "7" (номер дома), "Балчуг" (улица), "Москва" (город) и "Россия" (страна). Эти компоненты адреса отмечены ниже. (Дополнительную информацию о типах см. в разделе Типы ниже.)
  • address_components[] – массив, содержащий отдельные компоненты адреса (см. выше).
  • partial_match – указывает, что геокодировщик не вернул точное совпадение для начального запроса, хотя и обнаружил частичное совпадение с запрашиваемым адресом. Рекомендуется проверить исходный запрос на наличие в нем опечаток и/или неполного адреса.

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

  • 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[] в возвращаемом результате указывает тип адреса. Типы также могут возвращаться в массивах address_components[], указывающих типы определенных компонентов адреса. Адреса в геокодировщике могут относиться к нескольким типам, которые могут использоваться в виде тегов. Например, для многих городов используются теги типов political и locality.

Геокодировщик HTTP поддерживает и возвращает следующие типы:

  • street_address – указывает точный почтовый адрес.
  • route – указывает шоссе с названием (например, "US 101").
  • intersection – указывает крупные перекрестки, как правило, пересечения двух крупных дорог.
  • political – указывает политическую единицу. Чаще всего такой тип используется для обозначения некоторых административных объектов.
  • country – указывает государственную политическую единицу и обычно представляет собой тип наивысшего порядка, который возвращается геокодировщиком.
  • administrative_area_level_1 – указывает гражданскую единицу первого порядка ниже уровня страны. В США такими административными уровнями являются штаты. Эти административные уровни используются не во всех странах.
  • administrative_area_level_2 – указывает гражданскую единицу второго порядка ниже уровня страны. В США такими административными уровнями являются округи. Эти административные уровни используются не во всех странах.
  • administrative_area_level_3 – указывает гражданскую единицу третьего порядка ниже уровня страны. Такой тип представляет меньшее административное подразделение. Эти административные уровни используются не во всех странах.
  • administrative_area_level_4 – указывает гражданскую единицу четвертого порядка ниже уровня страны. Такой тип представляет меньшее административное подразделение. Эти административные уровни используются не во всех странах.
  • administrative_area_level_5 – указывает гражданскую единицу пятого порядка ниже уровня страны. Такой тип представляет меньшее административное подразделение. Эти административные уровни используются не во всех странах.
  • colloquial_area – указывает общепринятое альтернативное название единицы.
  • locality – указывает политическую единицу в составе города.
  • sublocality – указывает гражданскую единицу первого порядка ниже уровня населенного пункта. Для некоторых местоположений возможно предоставление одного из дополнительных типов: от sublocality_level_1 до sublocality_level_5. Каждый уровень ниже населенного пункта является гражданской единицей. Большее значение указывает меньшую географическую область.
  • neighborhood – указывает именованный район.
  • premise – указывает именованное местоположение, обычно одно или несколько зданий с общепринятым названием.
  • subpremise – указывает единицу первого порядка ниже именованного местоположения, обычно одно здание в границах комплекса зданий с общепринятым названием.
  • postal_code – указывает почтовый индекс в том виде, в котором он используется в стране для обработки почты.
  • natural_feature – указывает важный природный объект.
  • airport – указывает аэропорт.
  • park – указывает парк с названием.

Пустой список типов указывает, что для того или иного элемента адреса нет известных типов, например, Lieu-dit во Франции.

Помимо вышеперечисленного, компоненты адреса могут иметь следующие типы:

  • post_box – указывает определенный почтовый ящик.
  • street_number – указывает точный номер дома.
  • floor – указывает этаж в адресе здания.
  • room – указывает комнату в адресе здания.

Коды состояния

Код status может возвращать одно из следующих значений:

  • "OK" – ошибок нет, адрес обработан и получен хотя бы один геокод.
  • "ZERO_RESULTS" – геокодирование успешно выполнено, однако результаты не найдены. Это может произойти, если геокодировщику был передан несуществующий адрес (address).
  • "OVER_QUERY_LIMIT" – указывает на превышение квоты.
  • "REQUEST_DENIED" – указывает на отклонение запроса.
  • "INVALID_REQUEST" – как правило, указывает на отсутствие в запросе полей address, components или latlng.
  • "UNKNOWN_ERROR" – указывает, что запрос не удалось обработать из-за ошибки сервера. Если повторить попытку, запрос может оказаться успешным.

В этом примере мы геокодируем адрес и помещаем маркер на возвращаемых значениях широты и долготы. Следует отметить, что обработчик передается как анонимный литерал функции.

  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>

Просмотр примера (geocoding-simple.html)

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

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

Геокодировщик непосредственно поддерживает обратное геокодирование. Вместо указания текстового адреса в параметре location нужно указать разделенные запятой значения широты и долготы. Также можно указать идентификатор placeId, чтобы найти адрес, соответствующий этому идентификатору места.

Обратное геокодирование по месту

В следующем примере выполняется геокодирование значений широты и долготы и выполняется центрирование карты по этому месту. После этого выводится информационное окно с отформатированным адресом. Мы возвращаем второй результат, который менее конкретный, чем первый (в данном случае название района):

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 8,
    center: {lat: 40.731, lng: -73.997}
  });
  var geocoder = new google.maps.Geocoder;
  var infowindow = new google.maps.InfoWindow;

  document.getElementById('submit').addEventListener('click', function() {
    geocodeLatLng(geocoder, map, infowindow);
  });
}

function geocodeLatLng(geocoder, map, infowindow) {
  var input = document.getElementById('latlng').value;
  var latlngStr = input.split(',', 2);
  var latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])};
  geocoder.geocode({'location': latlng}, function(results, status) {
    if (status === 'OK') {
      if (results[1]) {
        map.setZoom(11);
        var marker = new google.maps.Marker({
          position: latlng,
          map: map
        });
        infowindow.setContent(results[1].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert('No results found');
      }
    } else {
      window.alert('Geocoder failed due to: ' + status);
    }
  });
}
<div id="floating-panel">
  <input id="latlng" type="text" value="40.714224,-73.961452">
  <input id="submit" type="button" value="Reverse Geocode">
</div>
<div id="map"></div>
/* Always set the map height explicitly to define the size of the div
 * element that contains the map. */
#map {
  height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html, body {
  height: 100%;
  margin: 0;
  padding: 0;
}
#floating-panel {
  position: absolute;
  top: 10px;
  left: 25%;
  z-index: 5;
  background-color: #fff;
  padding: 5px;
  border: 1px solid #999;
  text-align: center;
  font-family: 'Roboto','sans-serif';
  line-height: 30px;
  padding-left: 10px;
}
#floating-panel {
  position: absolute;
  top: 5px;
  left: 50%;
  margin-left: -180px;
  width: 350px;
  z-index: 5;
  background-color: #fff;
  padding: 5px;
  border: 1px solid #999;
}
#latlng {
  width: 225px;
}
 <!-- Replace the value of the key parameter with your own API key. -->
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap">
</script>
function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 8,
    center: {lat: 40.731, lng: -73.997}
  });
  var geocoder = new google.maps.Geocoder;
  var infowindow = new google.maps.InfoWindow;

  document.getElementById('submit').addEventListener('click', function() {
    geocodeLatLng(geocoder, map, infowindow);
  });
}

function geocodeLatLng(geocoder, map, infowindow) {
  var input = document.getElementById('latlng').value;
  var latlngStr = input.split(',', 2);
  var latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])};
  geocoder.geocode({'location': latlng}, function(results, status) {
    if (status === 'OK') {
      if (results[1]) {
        map.setZoom(11);
        var marker = new google.maps.Marker({
          position: latlng,
          map: map
        });
        infowindow.setContent(results[1].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert('No results found');
      }
    } else {
      window.alert('Geocoder failed due to: ' + status);
    }
  });
}

Просмотр примера (geocoding-reverse.html).

В предыдущем примере мы вывели второй результат (выбрав results[1]). Обратное геокодирование часто возвращает несколько результатов. Геокодированные адреса – это не только почтовые адреса, но любой вариант географического наименования заданного места. Например, геокодированная точка в Москве может быть помечена точным адресом, названием города (Москва), области или страны (Россия). Для геокодировщика все эти элементы являются адресами. Обратное геокодирование возвращает все эти результаты.

Обратный геокодировщик сопоставляет административные единицы (страны, области, города, районы), адреса и почтовые индексы.

Полный список адресов, возвращаемых по предыдущему запросу, показан ниже.

results[0].formatted_address: "275-291 Bedford Ave, Brooklyn, NY 11211, USA",
results[1].formatted_address: "Williamsburg, NY, USA",
results[2].formatted_address: "New York 11211, USA",
results[3].formatted_address: "Kings, New York, USA",
results[4].formatted_address: "Brooklyn, New York, USA",
results[5].formatted_address: "New York, New York, USA",
results[6].formatted_address: "New York, USA",
results[7].formatted_address: "United States"

Адреса возвращаются в порядке от наибольшего соответствия к наименьшему. Обычно самым первым результатом бывает наиболее точный адрес, как и в этом примере. Обратите внимание, что мы возвращаем разные типы адресов, от точных почтовых адресов до менее конкретизированных административно-политических единиц, таких как районы, города, округа, области и т. д. Если вам требуется более общий адрес, можно проверить поле results[].types.

Примечание. Обратное геокодирование – не точная наука. Геокодировщик пытается найти ближайшее место с адресом в пределах определенной погрешности.

Обратное геокодирование по идентификатору места

В следующем примере приложение принимает идентификатор места, находит соответствующий ему адрес и отображает его по центру карты. Также оно выводит информационное окно, где показан отформатированный адрес данного места:

// Initialize the map.
function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 8,
    center: {lat: 40.72, lng: -73.96}
  });
  var geocoder = new google.maps.Geocoder;
  var infowindow = new google.maps.InfoWindow;

  document.getElementById('submit').addEventListener('click', function() {
    geocodePlaceId(geocoder, map, infowindow);
  });
}

// This function is called when the user clicks the UI button requesting
// a reverse geocode.
function geocodePlaceId(geocoder, map, infowindow) {
  var placeId = document.getElementById('place-id').value;
  geocoder.geocode({'placeId': placeId}, function(results, status) {
    if (status === 'OK') {
      if (results[0]) {
        map.setZoom(11);
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
          map: map,
          position: results[0].geometry.location
        });
        infowindow.setContent(results[0].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert('No results found');
      }
    } else {
      window.alert('Geocoder failed due to: ' + status);
    }
  });
}
<div id="floating-panel">
  <!-- Supply a default place ID for a place in Brooklyn, New York. -->
  <input id="place-id" type="text" value="ChIJd8BlQ2BZwokRAFUEcm_qrcA">
  <input id="submit" type="button" value="Reverse Geocode by Place ID">
</div>
<div id="map"></div>
/* Always set the map height explicitly to define the size of the div
 * element that contains the map. */
#map {
  height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html, body {
  height: 100%;
  margin: 0;
  padding: 0;
}
#floating-panel {
  position: absolute;
  top: 10px;
  left: 25%;
  z-index: 5;
  background-color: #fff;
  padding: 5px;
  border: 1px solid #999;
  text-align: center;
  font-family: 'Roboto','sans-serif';
  line-height: 30px;
  padding-left: 10px;
}
#floating-panel {
  width: 440px;
}
#place-id {
  width: 250px;
}
 <!-- Replace the value of the key parameter with your own API key. -->
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap">
</script>
// Initialize the map.
function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 8,
    center: {lat: 40.72, lng: -73.96}
  });
  var geocoder = new google.maps.Geocoder;
  var infowindow = new google.maps.InfoWindow;

  document.getElementById('submit').addEventListener('click', function() {
    geocodePlaceId(geocoder, map, infowindow);
  });
}

// This function is called when the user clicks the UI button requesting
// a reverse geocode.
function geocodePlaceId(geocoder, map, infowindow) {
  var placeId = document.getElementById('place-id').value;
  geocoder.geocode({'placeId': placeId}, function(results, status) {
    if (status === 'OK') {
      if (results[0]) {
        map.setZoom(11);
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
          map: map,
          position: results[0].geometry.location
        });
        infowindow.setContent(results[0].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert('No results found');
      }
    } else {
      window.alert('Geocoder failed due to: ' + status);
    }
  });
}

Просмотр примера (geocoding-place-id.html).

Предпочтение области просмотра

Вы можете указать, чтобы служба геокодирования в первую очередь выводила результаты в указанной области просмотра (выраженной ограничивающим прямоугольником). Для определения границ области просмотра можно использовать параметр bounds в литерале объекта 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 значения, определяющие район Перми, по этому геокоду будет возвращено село в Пермском крае:

{
  "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. Этот параметр использует код региона, указываемый в подтеге region на языке IANA. В большинстве случаев эти теги напрямую соответствуют известным двухсимвольным значениям ccTLD ("домен верхнего уровня"), таким как "uk" в домене "co.uk". В некоторых случаях тег region также поддерживает коды ISO-3166-1, которые иногда отличаются от значений ccTLD (например, "GB" – "Великобритания").

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

В следующем примере функции демонстрируется использование параметра 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);
  }
});
}

Оставить отзыв о...

Текущей странице
Google Maps JavaScript API
Google Maps JavaScript API
Нужна помощь? Обратитесь в службу поддержки.