Совместимость drop-in
Чтобы пользоваться этим API, изучать его не обязательно. Для семнадцати других API геокодирования и определения IP у нас работает хост, который принимает формат запросов провайдера и отвечает в формате ответов этого провайдера, отдавая наши данные. То же касается JavaScript-библиотек карт, которые выпускают эти провайдеры. Миграция сводится к смене имени хоста.
Как это работает
Каждый совместимый хост полностью реализует публичный HTTP-интерфейс одного провайдера: те же пути, те же параметры запроса, те же имена полей JSON, вложенность и типы, тот же набор статусов и тот же формат ошибок. Значения наши. Ваш клиентский код, код разбора ответов и обработка ошибок не меняются.
- Смените хост.
maps.googleapis.comменяется наgapi.mygeocode.com,dev.virtualearth.netнаbing.mygeocode.comи так далее. Все пары приведены в таблице ниже. - Замените ключ или уберите его. Укажите свой ключ My Geocode в том параметре, где был старый ключ (
key,apiKey,access_token,token...). Любой адрес получает 2 500 бесплатных запросов в день без ключа, а каждый ключ получает собственные 2 500, поэтому миграция и тестирование ничего не стоят. - Сравните. Прогоните выборку реальных запросов через оба хоста. Координаты будут немного отличаться, потому что данные разные; имена полей не будут.
$ 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.com | gapi.mygeocode.com | key |
| Bing Maps REST Services Прямое, обратное, автодополнение, часовой пояс, высота | dev.virtualearth.net | bing.mygeocode.com | key |
| HERE Geocoding and Search Прямое, обратное, автодополнение | geocode.search.hereapi.comrevgeocode.search.hereapi.comautosuggest.search.hereapi.comautocomplete.search.hereapi.com | here.mygeocode.com | apiKey |
| Mapbox Geocoding Прямое, обратное, автодополнение | api.mapbox.com | mapbox.mygeocode.com | access_token |
| Geocode.Farm Прямое, обратное | api.geocode.farmwww.geocode.farm | farm.mygeocode.com | key |
| OpenStreetMap Nominatim Прямое, обратное | nominatim.openstreetmap.org | osm.mygeocode.com | нет; добавьте key или заголовок |
| OpenCage Прямое, обратное | api.opencagedata.com | opencage.mygeocode.com | key |
| LocationIQ Прямое, обратное, автодополнение, часовой пояс | us1.locationiq.comeu1.locationiq.com | locationiq.mygeocode.com | key |
| Geoapify Прямое, обратное, автодополнение, определение IP | api.geoapify.com | geoapify.mygeocode.com | apiKey |
| TomTom Search Прямое, обратное, автодополнение | api.tomtom.com | tomtom.mygeocode.com | key |
| MapQuest Geocoding Прямое, обратное | www.mapquestapi.comopen.mapquestapi.com | mapquest.mygeocode.com | key |
| Geocodio Прямое, обратное | api.geocod.io | geocodio.mygeocode.com | api_key |
| PositionStack Прямое, обратное | api.positionstack.com | positionstack.mygeocode.com | access_key |
| ip-api.com Определение IP | ip-api.compro.ip-api.com | ipapi.mygeocode.com | key |
| ipinfo.io Определение IP | ipinfo.io | ipinfo.mygeocode.com | token |
| ipstack Определение IP | api.ipstack.com | ipstack.mygeocode.com | access_key |
| Open-Elevation Elevation | api.open-elevation.com | openelevation.mygeocode.com | нет; добавьте key или заголовок |
Картографические библиотеки JavaScript
Смена провайдера больнее всего даётся в браузере, где карта, виджет геокодера и биллинг переплетены между собой. Для библиотек ниже сама библиотека загружается с нашего хоста (или, в случае MapLibre, Mapbox GL и Leaflet, направляется на наш хост через конфигурацию) и сохраняет свой публичный API: google.maps.Map, Microsoft.Maps.Map, H.Map и остальное. Тайлы, геокодирование, автодополнение и высоты предоставляем мы. Загрузки карты и тайлы бесплатны; вызовы геокодирования засчитываются как обычно.
| Библиотека | Откуда загружается | Откуда загружать вместо этого | Что продолжает работать |
|---|---|---|---|
| API Google Maps для JavaScript | maps.googleapis.com | gapi.mygeocode.com | google.maps.Map с нашими тайлами (типы карт roadmap, satellite и terrain) |
| Веб-элемент управления Bing Maps V8 | www.bing.com | bing.mygeocode.com | Microsoft.Maps.Map, Location, LocationRect, Pushpin, Infobox, Polyline, Polygon и Layer |
| Mapbox GL JS и mapbox-gl-geocoder | | mapbox.mygeocode.com | Стили векторных тайлов: streets, light, dark и outdoors, в спецификации стилей Mapbox |
| Плагины геокодирования для Leaflet | tile.openstreetmap.org | tiles.mygeocode.com | Leaflet Control Geocoder: геокодеры nominatim, google, bing, mapbox, here, opencage, latLng и mapquest, каждый из которых направлен на соответствующий хост www.mygeocode.com |
| HERE Maps API для JavaScript | js.api.here.com | here.mygeocode.com | H.Map, H.map.Marker, H.map.Polyline, H.map.Polygon, H.map.Group |
| MapQuest.js | api.mqcdn.com | mapquest.mygeocode.com | L.mapquest.map, tileLayer (map, hybrid, satellite, light и dark) |
На странице совместимых JavaScript-библиотек есть фрагменты кода «до» и «после», список того, что входит и не входит в каждую библиотеку, а также URL тайлов и стилей.
Куда передаётся ключ
Каждый хост принимает ключ там, где его ожидает исходный провайдер, а также в заголовке X-API-Key. Ключ необязателен: для 2 500 запросов в день с одного адреса он не нужен. Бесплатный ключ можно получить за минуту, и он добавляет баланс, пакеты и историю использования. Ключ с оплатой по мере использования можно использовать с двух IP-адресов за скользящие 24 часа, а ключ Unlimited с трёх; для большего числа адресов используйте больше ключей или пакетов (см. аутентификацию).
| Параметр | Кто использует |
|---|---|
key | Google Maps, Bing Maps, Geocode.Farm, OpenCage, LocationIQ, TomTom, MapQuest, ip-api (тариф pro) |
apiKey | HERE, Geoapify |
access_token | Mapbox |
api_key | Geocodio |
access_key | PositionStack, ipstack |
token или Authorization: Bearer | ipinfo, HERE |
| нет | Nominatim, Open-Elevation. Добавьте key=... в строку запроса или отправьте заголовок X-API-Key. |
Квоты и ошибки на совместимых хостах
Дневная квота такая же, как и везде, и считается на ключ или на адрес, если ключ не передан, суммарно по api.mygeocode.com и всем совместимым хостам: 2 500 бесплатных запросов в день, затем баланс или ключ Unlimited. Заголовки X-Quota-* и X-Key-IPs-* отправляются на каждом хосте, поэтому реальное состояние можно узнать из заголовков при любом формате тела ответа. В теле ответа лимиты сообщаются так, как их сообщает провайдер:
| Хост | Баланс исчерпан (402) | Неверный, отсутствующий или ограниченный по IP ключ | Некорректный запрос |
|---|---|---|---|
| gapi.mygeocode.com | HTTP 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.com | HTTP 429, {"title": "Too Many Requests", "status": 429} | HTTP 401 с error_description | HTTP 400 с title и cause |
| mapbox.mygeocode.com | HTTP 429, {"message": "Rate limit exceeded"} | HTTP 401, {"message": "Not Authorized - Invalid Token"} | HTTP 422 с message |
| osm.mygeocode.com | HTTP 429, {"error": {"code": 429, "message": "..."}} | Не применимо | HTTP 400, {"error": {"code": 400, "message": "..."}} |
| ipapi.mygeocode.com | HTTP 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, как и на наших собственных эндпоинтах.
Чек-лист миграции
- Найдите имя хоста провайдера в своём коде и конфигурации. Часто оно встречается в нескольких местах: серверный код, мобильные приложения, правило CDN, закешированная конфигурация.
- Замените его на совместимый хост из таблицы выше. Путь оставьте прежним.
- Замените ключ на ключ My Geocode. Используйте по одному ключу на сервер или не больше двух; ключ с оплатой по мере использования принимает два IP-адреса за скользящие 24 часа, ключ Unlimited три.
- Запустите свой существующий набор тестов. Он должен пройти без изменений. Если нужного вам поля нет, проверьте известные пробелы на странице хоста и сообщите нам.
- Повторите несколько сотен реальных запросов на обоих хостах и сравните координаты и поля, которые вы показываете. Обратите внимание на
precisionтам, где совместимый хост его отдаёт (какlocation_type,accuracy,resultTypeи так далее). - Понаблюдайте за
X-Quota-Usedв течение дня, чтобы подобрать тариф: баланс, если меньше примерно 19 000 запросов в день, ключ Unlimited, если больше. - Отмените старую оплату.
SDK провайдеров
Большинство официальных клиентских библиотек принимают собственный базовый URL, поэтому они тоже работают с совместимыми хостами: клиенты Google Maps Services (googlemaps для Python, @googlemaps/google-maps-services-js), SDK Mapbox (опция origin), REST-клиенты HERE, библиотеки ipinfo и обёртки для Nominatim, такие как geopy (domain=). Направьте их на хост из таблицы и передайте свой ключ My Geocode там, где был ключ провайдера.
Провайдера нет в списке
Добавление хоста занимает несколько дней работы, если формат провайдера документирован. Если вы пользуетесь сервисом, которого здесь нет, сообщите, каким именно, и примерно сколько запросов в день вы отправляете. Все недавно добавленные хосты появились по запросам пользователей.