Все готово!

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

Активировать Google Maps Geocoding API

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

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

Оптимизация использования квоты при геокодировании

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

  • Геокодирование на стороне клиента, выполняемое в браузере, как правило, в ответ на действие пользователя. Google Maps JavaScript API предоставляет классы, которые делают запросы. Этот подход описан в документации по Google Maps JavaScript API.
  • Геокодирование HTTP на стороне сервера, позволяющее вашему серверу напрямую запрашивать геокоды у серверов Google. Эта функциональная возможность предоставляется веб-службой Google Maps Geocoding API. Как правило, эта служба интегрируется с другим кодом, который исполняется на стороне сервера. Геокодирование на стороне сервера описано в документации по Google Maps Geocoding API.

Примеры геокодирования на стороне клиента и на стороне сервера

Ниже приведен пример геокодирования на стороне клиента, в котором выбранный адрес геокодируется, затем в это место перемещается центр карты и добавляется маркер карты:

geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
      map: map,
      position: results[0].geometry.location
    });
  }
});

Другие примеры смотрите в документации поGoogle Maps JavaScript API.

Ниже приведен пример создания запроса геокодирования на стороне сервера средствами Python:

import urllib2

address="1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key="my-key-here"
url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key)

response = urllib2.urlopen(url)
jsongeocode = response.read()

Это создает объект JSON следующего содержания:

{
  "status": "OK",
  "results": [ {
    "types": street_address,
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "address_components": [ {
      "long_name": "1600",
      "short_name": "1600",
      "types": street_number
    }, {
      "long_name": "Amphitheatre Pkwy",
      "short_name": "Amphitheatre Pkwy",
      "types": route
    }, {
      "long_name": "Mountain View",
      "short_name": "Mountain View",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "San Jose",
      "short_name": "San Jose",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Santa Clara",
      "short_name": "Santa Clara",
      "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" ]
    }, {
      "long_name": "94043",
      "short_name": "94043",
      "types": postal_code
    } ],
    "geometry": {
      "location": {
        "lat": 37.4220323,
        "lng": -122.0845109
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 37.4188847,
          "lng": -122.0876585
        },
        "northeast": {
          "lat": 37.4251799,
          "lng": -122.0813633
        }
      }
    }
  } ]
}

Геокодировщик на стороне сервера поддерживает также формат XML как альтернативу JSON. Другие примеры смотрите в документации по Google Maps Geocoding API, а также в клиентских библиотеках для Python и других языков.

Особенности квот

Квоты и ограничения частоты запросов геокодирования определяют основные принципы, обозначенные в этом документе.

При использовании стандартного плана все запросы геокодирования, будь то запросы со стороны клиента через браузер или со стороны сервера через веб-службу Google Maps Geocoding API, имеют квоту 2 500 запросов в день. Все запросы в течение одного дня учитываются в рамках квоты по проекту. Чтобы перейти к большей дневной квоте, активируйте возможность тарификации фактического использования, как описано в руководстве по ограничениям на использование.

Помимо лимитов дневной квоты, служба геокодирования ограничена по скорости запросов: 50 QPS (запросов в секунду), рассчитанных как сумма запросов на стороне клиента и на стороне сервера.

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

  • Использовать метод кэширования.
  • Ввести произвольные интервалы запросов (дрожание). Убедиться, что запросы случайны для всей базы пользователей.
  • При разработке для Android используйте оповещение с неточным повтором.
  • При разработке для Android используйте подходящий метод расположения.

Для пользователей Google Maps APIs Premium Plan эти API предоставляют повышенные дневные квоты. Подробнее о квотах Google Maps APIs Premium Plan смотрите в руководстве по лимитам использования Premium Plan. Если вы, используя Google Maps APIs Premium Plan, всё равно превышаете ограничения по квоте, отправьте запрос о поддержке на Google Cloud Support Portal.

Рекомендации по кэшированию

Условия использования Google Maps API позволяют кэшировать геокоды (то есть, хранить их на своем сервере ограниченный период времени). Кэширование может пригодиться, когда необходимо повторно отыскивать тот же самый адрес. Тем не менее, помните, что результаты геокодирования изменяются по мере того, как наши данные становятся всё более точными. Таким образом, даже если имеются кэшированные данные, необходимо их периодически обновлять, чтобы быть уверенным в том, что вы получите точные геокоды для своих мест.

Когда использовать геокодирование на стороне клиента?

Краткий ответ: почти всегда. Причины:

  • Обработка запроса и ответа на стороне клиента обеспечивает более быстрое и более интерактивное взаимодействие пользователей со службой.
  • Запрос на стороне клиента может включать сведения, которые повышают качество геокодирования: язык пользователя, регион и область просмотра.

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

Существует две базовых архитектуры геокодирования на стороне клиента:

  • Геокодирование и отображение результатов выполняются полностью в браузере. Например, пользователь ввел адрес на странице. Ваше приложение геокодирует его. Затем приложение использует геокод для создания маркера на карте или выполняет простой анализ с использованием геокода. Данные на ваш сервер не отправляются, что снижает его нагрузку.
  • Геокодирование в браузере с последующей отправкой данных на сервер. Например, пользователь ввел адрес на странице. Ваше приложение геокодирует его в браузере. Затем приложение отправляет данные на ваш сервер. Сервер отправляет ответные данные, например, ближайшие достопримечательности. Это позволяет настроить ответ на основе своих собственных данных, а также, при необходимости, кэшировать геокод. Кэширование дает ещё больше возможностей для оптимизации. К примеру, можно запросить адрес на сервере, чтобы проверить, имеется ли для него недавно кэшированный геокод. Если соответствующей записи в кэше нет, то браузеру возвращается нулевой результат. В этом случае браузер вновь создает геокод и отправляет его обратно на сервер для кэширования.

Когда использовать геокодирование на стороне сервера?

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

Некоторые опасения связаны с неоправданным увеличением задержки для пользователя, а также со снижением качества результатов по сравнению с геокодированием на стороне клиента, поскольку в запросе содержится меньше информации.

Базовая архитектура геокодирующего приложения на стороне сервера:

  • Приложение на стороне сервера отправляет адрес геокодирующему сценарию сервера.
  • Сценарий проверяет кэш на наличие недавнего геокода для данного адреса.
  • Если геокод имеется, сценарий возвращает результат в исходное приложение.
  • Если геокода нет, сценарий отправляет запрос геокодирования в Google. Получив результат, сценарий его кэширует и возвращает в исходное приложение.

Заключение

Как правило, большинство задач решается комбинированием геокодирования на стороне клиента и кэширования. В случае возникновения проблем с квотой рассмотрите возможность разрешения тарификации или приобретения лицензии на Premium Plan.

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

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