API поиска по карте

Для поиска по карте нужно выполнить 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. Получить точки и линии, в названии или описании которых есть слово «волчанск»

https://reqbin.com/aki3atg8

{
"request": [
{
"node": {
"tags": [{
"key": "(name|description)",
"value": "волчанск",
"operator": "like"
}]
}
},
{
"way": {
"tags": [{
"key": "(name|description)",
"value": "волчанск",
"operator": "like"
}]
}
}
],
"count": 3,
"offset": 0,
"out": "coords"
}