Обратное геокодирование
На входе координаты, на выходе ближайший адрес или населённый пункт, регион либо страна, если вам нужно только это.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
latобязательный | число | От -90 до 90. |
lonобязательный | число | От -180 до 180. |
levelнеобязательный | строка | Самый детальный уровень для возврата: address (по умолчанию), street, postcode, city, region, country. Более крупные уровни работают быстрее и никогда не опускаются ниже запрошенного уровня. |
radiusнеобязательный | целое число | Радиус поиска адресов в метрах, от 1 до 5000. По умолчанию 5000. Задайте его небольшим, чтобы получить null вместо далёкого адреса. |
langнеобязательный | строка | Код ISO 639-1 для названий. По умолчанию en. |
keyнеобязательный | строка | API-ключ, если он не передан в заголовке. |
Пример
$ curl -H "X-API-Key: YOUR_KEY" "https://api.mygeocode.com/v1/reverse?lat=41.8902&lon=12.4922&lang=it"const url = new URL("https://api.mygeocode.com/v1/reverse");
url.searchParams.set("lat", 41.8902);
url.searchParams.set("lon", 12.4922);
url.searchParams.set("lang", "it");
const { result } = await (await fetch(url, { headers: { "X-API-Key": "YOUR_KEY" } })).json();
console.log(result ? result.formatted : "nothing nearby");import requests
r = requests.get("https://api.mygeocode.com/v1/reverse",
params={"lat": 41.8902, "lon": 12.4922, "lang": "it"}, headers={"X-API-Key": "YOUR_KEY"}, timeout=10)
result = r.json()["result"]
print(result["formatted"] if result else "nothing nearby"){
"status": "ok",
"lat": 41.8902,
"lon": 12.4922,
"result": {
"formatted": "Piazza del Colosseo 1, 00184 Roma RM, Italia",
"lat": 41.890251,
"lon": 12.492373,
"distance_m": 9,
"type": "address",
"precision": "house",
"place_id": "it.addr.5d09aa31",
"components": {
"house_number": "1",
"road": "Piazza del Colosseo",
"suburb": "Municipio Roma I",
"city": "Roma",
"county": "Roma",
"state": "Lazio",
"postcode": "00184",
"country": "Italia",
"country_code": "it"
}
}
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
lat, lon | число | Отправленная вами точка, возвращённая обратно. |
result | объект или null | null, если на запрошенном уровне в пределах radius ничего нет. |
result.formatted | строка | Адрес или название населённого пункта для более крупных уровней. |
result.lat, result.lon | число | Положение возвращённого объекта, а не вашей точки. |
result.distance_m | целое число | Расстояние в метрах от вашей точки до объекта. 0, если точка находится внутри него. |
result.type, result.precision, result.place_id, result.components | Как в прямом геокодировании. |
Примечания
- Большое значение
distance_mслужит сигналом. Точка в парке может находиться в 300 м от ближайшего адреса; в этом случае показать район обычно лучше, чем показать адрес. level=countryотвечает примерно за миллисекунду и является самым дешёвым способом ответить на вопрос «в какой стране находится эта точка».- Для точек в море возвращается
nullна уровнеaddressи, в пределах территориальных вод, страна на уровнеcountry.
Тот же запрос в форматах других провайдеров
Если у вас уже есть код, написанный под одного из этих провайдеров, оставьте его: совместимый хост принимает тот же путь и те же параметры и отвечает в формате ответа этого провайдера, а за ним работает этот эндпоинт. См. как работают совместимые хосты.
| Провайдер | Хост | Путь |
|---|---|---|
| Платформа Google Maps | gapi.mygeocode.com | /maps/api/geocode/json?latlng=lat,lng |
| REST-сервисы Bing Maps | bing.mygeocode.com | /REST/v1/Locations/{lat},{lon} |
| Геокодирование и поиск HERE | here.mygeocode.com | /v1/revgeocode?at=lat,lng |
| Mapbox Geocoding | mapbox.mygeocode.com | /geocoding/v5/mapbox.places/{lon},{lat}.json/search/geocode/v6/reverse?longitude=...&latitude=... |
| Geocode.Farm | farm.mygeocode.com | /reverse/?lat=...&lon=.../v3/json/reverse/?lat=...&lon=... |
| OpenStreetMap Nominatim | osm.mygeocode.com | /reverse?lat=...&lon=...&format=json |
| OpenCage | opencage.mygeocode.com | /geocode/v1/json?q=lat,lng |
| LocationIQ | locationiq.mygeocode.com | /v1/reverse?lat=...&lon=...&format=json |
| Geoapify | geoapify.mygeocode.com | /v1/geocode/reverse?lat=...&lon=... |
| TomTom Search | tomtom.mygeocode.com | /search/2/reverseGeocode/{lat},{lon}.json |
| MapQuest Geocoding | mapquest.mygeocode.com | /geocoding/v1/reverse?location=lat,lng |
| Geocodio | geocodio.mygeocode.com | /v1.7/reverse?q=lat,lng |
| PositionStack | positionstack.mygeocode.com | /v1/reverse?query=lat,lng |
Пакетные запросы
Отправьте POST-запрос с телом JSON на тот же путь с coords, массивом до 100 пар [lat, lon], и ответ будет содержать массив results с одной записью на каждую пару в порядке отправки. Каждая запись засчитывается как один запрос, а пакет, превышающий остаток квоты, отклоняется целиком.
$ curl -X POST "https://api.mygeocode.com/v1/reverse" -H "Content-Type: application/json" -d '{"coords": [[52.5163, 13.3777], [47.3769, 8.5417]]}'Ошибки
400 invalid_request, если lat или lon отсутствует или вне допустимого диапазона либо level не входит в перечисленные значения.