Для поиска по карте нужно выполнить POST-запрос на URL https://waste.fantastic-game.ru/opm/search.php. В теле запроса – объект JSON с параметрами поиска:
{ "request":[..], "count":16, "offset":0, "out":"info" }
Параметр | Описание |
request | Массив, содержащий запросы. Обязательный. |
count | Число от 1 до 20. Количество отображаемых в ответе данных. Обязательный. |
offset | Число. Номер страницы. Рекомендуется ставить 0. Отлично работает , если request состоит из 1-го объекта. Обязательный. |
out | Строка. Описывает то, что будет возвращено в ответе. Обязательный. coords – будут возвращены только координаты найденных объектов карты (например, для Leaflet* (сайт заблокирован на территории РФ)) tags – будут возвращены только тэги, описывающие объект карты info – координаты и тэги. |
bbox | Массив. Граница поиска. Работает, если out=coords или out=info. Не обязательный. Не используется. |
ЗАПРОСЫ
Этот раздел описывает параметр request.
Параметр request содержит массив c запросами, которые описывают, какие данные карты вы хотите получить. Пример запроса:
{ "node":{ "tags":[ { "key":"railway", "value":"station", "operator":"equal" } ] } }
где node – тип данных карты. Всего их три: node, way и relation.
node – одиночная точка на карте;
way – линия (полигон), состоящая из нескольких точек. Это может быть участком дороги, зданием, лесом, рекой или озером;
relation – отношение. Состоит из множества точек, линий и других отношений. Может представлять собой автобусный маршрут, состоящий из участков дороги (way) и остановок (node) или здание сложной формы, имеющее внешний и внутренний контуры (way).
Параметр | Описание |
tags | Массив, содержащий JSON-объекты, описывающие то, какие теги должны быть у объектов карты. |
id | Число. ID объекта карты, информацию о котором вы хотите получить. Не обязательный. |
ПАРАМЕТР TAGS
Параметр tags должен содержать один или несколько JSON-объектов, описывающих то, какие теги должен быть у объекта карты:
{ "key":"place", "value":"town", "operator":"equal" }
где key – строка. Ключ тега, обязательный;
value – строка. Значение тега. Не обязательно, если operator=exists;
operator – строка. Оператор.
ОПЕРАТОРЫ
- equal – эквивалентность, равенство. тег с ключом key должен иметь значение value.
- not_equal, nequal – тег с ключом key должен иметь любое значение, не равное value.
- like – значение тега с ключом key должно частично совпадать с value. В отличие от предыдущих, данный оператор регистронезависимый. Отлично подходит в сочетании с параметром key=name.
- exists – тег с ключом key существует. Значение тега неважно.
- regexp, rgex — позволяет использовать регулярное выражение в параметре value.
ПАРАМЕТР OFFSET
Параметр можно охарактеризовать как номер страницы. Рекомендуется ставить всегда 0. Данный параметр отлично работает, если в параметре request указан только один JSON-объект. Если их несколько – может возникнуть баг.
ОТВЕТ СЕРВЕРА
Ответ приходит в формате JSON. В случае успеха ответ будет содержать параметр count – количество найденных объектов карты и массив response с этими объектами:
{ "count":1, "response":[ { "id":"356095", "type":"node", "coordinates":[1.42618323897,72.16699583768], "tags":{ "name":"Приволжск", "place":"town" } } ] }
где id – ID объекта карты;
type – тип объекта: node, way или relation;
coordinates* – координаты (зависит от типа объекта);
tags – теги.
КООРДИНАТЫ ОБЪЕКТА
В зависимости от типа объекта координаты указаны по-разному. В отличие от bbox в запросе, в ответе координаты приходят в обратном порядке: сначала долгота, а только затем широта.
node
Для точек на карте координаты в ответ приходят в coordinates в виде массива с двумя числами: долгота и широта, соответственно.
"coordinates": [123, 45]
way
Для линий координаты приходят в coordinates в виде массива, содержащего координаты точек:
"coordinates": [[1, 2], [2, 4] [3, 6]]
relation
Поскольку отношения одновременно могут содержать как точки, так и линии (например, автобусный маршрут), то координаты точек приходят в виде массива points, а координаты линий приходят в виде массива line_points, содержащего массивы с точками:
"points":[[1, 1], [2, 4]], "line_points": [[[1, 2], [3, 4]], [[3, 4], [5, 6]], [[5, 6], [7, 8]]]
ПРИМЕРЫ
Посмотреть, как все работает можно на странице https://reqbin.com/. Тело запроса нужно поставить во вкладку «Content».
1. Получить координаты трёх точек, в названии которых есть «Приволжск»
https://reqbin.com/7tpe20ia
Тело запроса:
{ "request":[{ "node":{ "tags":[{ "key":"name", "value":"Приволжск", "operator":"like" }] } }], "count":3, "offset":0, "out":"coords" }
Ответ:
{ "count":3, "response":[ { "id":"354869", "type":"node", "coordinates":[1.39663472057,72.16805992967] }, { "id":"356095", "type":"node", "coordinates":[1.42618323897,72.16699583768] }, { "id":"516300", "type":"node", "coordinates":[1.36904787392,72.16951513869] } ] }
2. Получить информацию об отношении номер 688055
https://reqbin.com/yiproklb
Тело запроса:
{ "request":[{ "relation":{ "id":688055 } }], "count":1, "offset":0, "out":"info" }
Ответ (часть ответа скрыта):
{ "count":1, "response":[ { "id":688055, "type":"relation", "points":[...], "line_points":[...], "tags":{ "name":"Автобус №71", "public_transport:version":"2", "ref":"71", "route":"bus", "type":"route" } } ] }
3. Получить точки и линии, в названии или описании которых есть слово «волчанск»
{
"request": [
{
"node": {
"tags": [{
"key": "(name|description)",
"value": "волчанск",
"operator": "like"
}]
}
},
{
"way": {
"tags": [{
"key": "(name|description)",
"value": "волчанск",
"operator": "like"
}]
}
}
],
"count": 3,
"offset": 0,
"out": "coords"
}