Совместимость drop-in

Чтобы пользоваться этим API, изучать его не обязательно. Для семнадцати других API геокодирования и определения IP у нас работает хост, который принимает формат запросов провайдера и отвечает в формате ответов этого провайдера, отдавая наши данные. То же касается JavaScript-библиотек карт, которые выпускают эти провайдеры. Миграция сводится к смене имени хоста.

Как это работает

Каждый совместимый хост полностью реализует публичный HTTP-интерфейс одного провайдера: те же пути, те же параметры запроса, те же имена полей JSON, вложенность и типы, тот же набор статусов и тот же формат ошибок. Значения наши. Ваш клиентский код, код разбора ответов и обработка ошибок не меняются.

  1. Смените хост. maps.googleapis.com меняется на gapi.mygeocode.com, dev.virtualearth.net на bing.mygeocode.com и так далее. Все пары приведены в таблице ниже.
  2. Замените ключ или уберите его. Укажите свой ключ My Geocode в том параметре, где был старый ключ (key, apiKey, access_token, token...). Любой адрес получает 2 500 бесплатных запросов в день без ключа, а каждый ключ получает собственные 2 500, поэтому миграция и тестирование ничего не стоят.
  3. Сравните. Прогоните выборку реальных запросов через оба хоста. Координаты будут немного отличаться, потому что данные разные; имена полей не будут.
До
$ curl "https://maps.googleapis.com/maps/api/geocode/json?address=10+Downing+St+London&key=GOOGLE_KEY"
После
$ curl "https://gapi.mygeocode.com/maps/api/geocode/json?address=10+Downing+St+London&key=MYGEOCODE_KEY"

Все совместимые хосты

Все хосты работают на той же инфраструктуре, с теми же данными, той же бесплатной квотой и теми же ценами, что и api.mygeocode.com. Нажмите на провайдера, чтобы увидеть список его эндпоинтов, пример ответа и известные отличия.

Провайдер и типы запросовИсходный хостСовместимый хостПараметр ключа
Google Maps Platform
Прямое, обратное, автодополнение, часовой пояс, высота
maps.googleapis.comgapi.mygeocode.comkey
Bing Maps REST Services
Прямое, обратное, автодополнение, часовой пояс, высота
dev.virtualearth.netbing.mygeocode.comkey
HERE Geocoding and Search
Прямое, обратное, автодополнение
geocode.search.hereapi.com
revgeocode.search.hereapi.com
autosuggest.search.hereapi.com
autocomplete.search.hereapi.com
here.mygeocode.comapiKey
Mapbox Geocoding
Прямое, обратное, автодополнение
api.mapbox.commapbox.mygeocode.comaccess_token
Geocode.Farm
Прямое, обратное
api.geocode.farm
www.geocode.farm
farm.mygeocode.comkey
OpenStreetMap Nominatim
Прямое, обратное
nominatim.openstreetmap.orgosm.mygeocode.comнет; добавьте key или заголовок
OpenCage
Прямое, обратное
api.opencagedata.comopencage.mygeocode.comkey
LocationIQ
Прямое, обратное, автодополнение, часовой пояс
us1.locationiq.com
eu1.locationiq.com
locationiq.mygeocode.comkey
Geoapify
Прямое, обратное, автодополнение, определение IP
api.geoapify.comgeoapify.mygeocode.comapiKey
TomTom Search
Прямое, обратное, автодополнение
api.tomtom.comtomtom.mygeocode.comkey
MapQuest Geocoding
Прямое, обратное
www.mapquestapi.com
open.mapquestapi.com
mapquest.mygeocode.comkey
Geocodio
Прямое, обратное
api.geocod.iogeocodio.mygeocode.comapi_key
PositionStack
Прямое, обратное
api.positionstack.compositionstack.mygeocode.comaccess_key
ip-api.com
Определение IP
ip-api.com
pro.ip-api.com
ipapi.mygeocode.comkey
ipinfo.io
Определение IP
ipinfo.ioipinfo.mygeocode.comtoken
ipstack
Определение IP
api.ipstack.comipstack.mygeocode.comaccess_key
Open-Elevation
Elevation
api.open-elevation.comopenelevation.mygeocode.comнет; добавьте key или заголовок

Картографические библиотеки JavaScript

Смена провайдера больнее всего даётся в браузере, где карта, виджет геокодера и биллинг переплетены между собой. Для библиотек ниже сама библиотека загружается с нашего хоста (или, в случае MapLibre, Mapbox GL и Leaflet, направляется на наш хост через конфигурацию) и сохраняет свой публичный API: google.maps.Map, Microsoft.Maps.Map, H.Map и остальное. Тайлы, геокодирование, автодополнение и высоты предоставляем мы. Загрузки карты и тайлы бесплатны; вызовы геокодирования засчитываются как обычно.

БиблиотекаОткуда загружаетсяОткуда загружать вместо этогоЧто продолжает работать
API Google Maps для JavaScriptmaps.googleapis.comgapi.mygeocode.comgoogle.maps.Map с нашими тайлами (типы карт roadmap, satellite и terrain)
Веб-элемент управления Bing Maps V8www.bing.combing.mygeocode.comMicrosoft.Maps.Map, Location, LocationRect, Pushpin, Infobox, Polyline, Polygon и Layer
Mapbox GL JS и mapbox-gl-geocodermapbox.mygeocode.comСтили векторных тайлов: streets, light, dark и outdoors, в спецификации стилей Mapbox
Плагины геокодирования для Leaflettile.openstreetmap.orgtiles.mygeocode.comLeaflet Control Geocoder: геокодеры nominatim, google, bing, mapbox, here, opencage, latLng и mapquest, каждый из которых направлен на соответствующий хост www.mygeocode.com
HERE Maps API для JavaScriptjs.api.here.comhere.mygeocode.comH.Map, H.map.Marker, H.map.Polyline, H.map.Polygon, H.map.Group
MapQuest.jsapi.mqcdn.commapquest.mygeocode.comL.mapquest.map, tileLayer (map, hybrid, satellite, light и dark)

На странице совместимых JavaScript-библиотек есть фрагменты кода «до» и «после», список того, что входит и не входит в каждую библиотеку, а также URL тайлов и стилей.

Куда передаётся ключ

Каждый хост принимает ключ там, где его ожидает исходный провайдер, а также в заголовке X-API-Key. Ключ необязателен: для 2 500 запросов в день с одного адреса он не нужен. Бесплатный ключ можно получить за минуту, и он добавляет баланс, пакеты и историю использования. Ключ с оплатой по мере использования можно использовать с двух IP-адресов за скользящие 24 часа, а ключ Unlimited с трёх; для большего числа адресов используйте больше ключей или пакетов (см. аутентификацию).

ПараметрКто использует
keyGoogle Maps, Bing Maps, Geocode.Farm, OpenCage, LocationIQ, TomTom, MapQuest, ip-api (тариф pro)
apiKeyHERE, Geoapify
access_tokenMapbox
api_keyGeocodio
access_keyPositionStack, ipstack
token или Authorization: Beareripinfo, HERE
нетNominatim, Open-Elevation. Добавьте key=... в строку запроса или отправьте заголовок X-API-Key.

Квоты и ошибки на совместимых хостах

Дневная квота такая же, как и везде, и считается на ключ или на адрес, если ключ не передан, суммарно по api.mygeocode.com и всем совместимым хостам: 2 500 бесплатных запросов в день, затем баланс или ключ Unlimited. Заголовки X-Quota-* и X-Key-IPs-* отправляются на каждом хосте, поэтому реальное состояние можно узнать из заголовков при любом формате тела ответа. В теле ответа лимиты сообщаются так, как их сообщает провайдер:

ХостБаланс исчерпан (402)Неверный, отсутствующий или ограниченный по IP ключНекорректный запрос
gapi.mygeocode.comHTTP 200, "status": "OVER_QUERY_LIMIT""status": "REQUEST_DENIED""status": "INVALID_REQUEST"
bing.mygeocode.com"statusCode": 429 в обёртке ответа"statusCode": 401, authenticationResultCode: InvalidCredentials"statusCode": 400 с errorDetails
here.mygeocode.comHTTP 429, {"title": "Too Many Requests", "status": 429}HTTP 401 с error_descriptionHTTP 400 с title и cause
mapbox.mygeocode.comHTTP 429, {"message": "Rate limit exceeded"}HTTP 401, {"message": "Not Authorized - Invalid Token"}HTTP 422 с message
osm.mygeocode.comHTTP 429, {"error": {"code": 429, "message": "..."}}Не применимоHTTP 400, {"error": {"code": 400, "message": "..."}}
ipapi.mygeocode.comHTTP 200, {"status": "fail", "message": "quota"}{"status": "fail", "message": "invalid key"}{"status": "fail", "message": "invalid query"}
ОстальныеКак описано в документации провайдера; см. страницу каждого хоста

Что совпадает, а что нет

Совпадает

  • Пути, методы и параметры запроса, описанные в документации провайдера.
  • Структура ответа: имена полей, вложенность, массивы, типы, порядок координат (включая [lon, lat] у Mapbox).
  • Наборы значений статуса и достоверности (ROOFTOP, High, houseNumber, EXACT_MATCH...), сопоставленные с нашими precision и confidence.
  • Формат ошибок, поэтому существующая обработка продолжает работать.
  • Цены и квоты: за использование совместимого хоста ничего дополнительно не взимается.

Отличается

  • Данные. Координаты, отформатированные строки и значения достоверности наши и не совпадут с оригиналом цифра в цифру. Покрытие на уровне домов различается по странам; см. покрытие.
  • Идентификаторы. Идентификаторы мест наши и стабильны, но их нельзя отправить исходному провайдеру.
  • Всё, что выходит за рамки геокодирования, автодополнения, IP, часовых поясов и высот: маршруты, подробности о местах, фотографии, пробки, Street View. На странице каждого хоста перечислено, чего не хватает.
  • Ключи: два IP-адреса за скользящие 24 часа для ключа с оплатой по мере использования и три для ключа Unlimited, как и на наших собственных эндпоинтах.

Чек-лист миграции

  1. Найдите имя хоста провайдера в своём коде и конфигурации. Часто оно встречается в нескольких местах: серверный код, мобильные приложения, правило CDN, закешированная конфигурация.
  2. Замените его на совместимый хост из таблицы выше. Путь оставьте прежним.
  3. Замените ключ на ключ My Geocode. Используйте по одному ключу на сервер или не больше двух; ключ с оплатой по мере использования принимает два IP-адреса за скользящие 24 часа, ключ Unlimited три.
  4. Запустите свой существующий набор тестов. Он должен пройти без изменений. Если нужного вам поля нет, проверьте известные пробелы на странице хоста и сообщите нам.
  5. Повторите несколько сотен реальных запросов на обоих хостах и сравните координаты и поля, которые вы показываете. Обратите внимание на precision там, где совместимый хост его отдаёт (как location_type, accuracy, resultType и так далее).
  6. Понаблюдайте за X-Quota-Used в течение дня, чтобы подобрать тариф: баланс, если меньше примерно 19 000 запросов в день, ключ Unlimited, если больше.
  7. Отмените старую оплату.

SDK провайдеров

Большинство официальных клиентских библиотек принимают собственный базовый URL, поэтому они тоже работают с совместимыми хостами: клиенты Google Maps Services (googlemaps для Python, @googlemaps/google-maps-services-js), SDK Mapbox (опция origin), REST-клиенты HERE, библиотеки ipinfo и обёртки для Nominatim, такие как geopy (domain=). Направьте их на хост из таблицы и передайте свой ключ My Geocode там, где был ключ провайдера.

Провайдера нет в списке

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