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

Для поиска по карте нужно выполнить POST-запрос на URL https://waste.fantastic-game.ru/opm/search.php. В теле запроса – объект JSON с параметрами поиска:

{
 "request":[...],
 "count":16,
 "offset":0,
 "out":"info"
}
Параметр Описание
request
массив
Массив, содержащий JSON-QL запросы к карте. Обязательный.
count
число
Количество отображаемых в ответе данных. Обязательный. Минимальное значение: 1.
offset
число
Номер страницы. Рекомендуется ставить 0. Отлично работает, если request состоит из одного JSON-QL. Обязательный.
out
строка
Описывает то, что будет возвращено в ответе. Обязательный.
coords – будут возвращены только координаты найденных объектов карты 
tags – будут возвращены только тэги, описывающие объект карты
info – возвращает и координаты и теги объекта.
member_of – возвращает список объектов, участником которых является указанный объект (например список маршрутов для остановки)
bbox
массив
Массив. Граница поиска. Работает, если out=coords или out=info. Не обязательный. Не используется.
Описание параметров запроса.

JSON-QL

Этот раздел описывает объект JSON-QL.

JSON-QL – запрос к карте в формате JSON, который описывает критерии для поиска по базе данных карты. Представляет собой JSON-объект, состоящий из одного поля (node, way или relation), которое представляет из себя вложенный JSON-объект с массивом tags, описывающим теги искомого объекта карты, либо с его числовым идентификатором id. В параметре request может быть указано несколько таких JSON-QL запросов.
Структура JSON-QL:

{
  "тип_объекта_карты":{  // node, way, relation или any
    "id": 123,
    "tags":[
      {
        "key":"railway",    // ключ тега
        "value":"station",  // значение тега
        "operator":"equal"  // описывает взаимосвязь key и value
      },
      {...}
    ]
  }
}

где тип_объекта_карты – тип данных карты. Всего их три: node, way и relation:
        node – одиночная точка на карте;
        way – линия (или полигон), состоящая из нескольких точек. Это может быть участком дороги, зданием, лесом, рекой или озером;
        relation – отношение. Состоит из множества точек, линий и других отношений. Может представлять собой автобусный маршрут, состоящий из участков дороги (way) и остановок (node) или здание сложной формы, имеющее внешний и внутренний контуры (way).
        any – поиск выполняется независимо от типа объекта карты.

Описание параметров JSON-QL:

tags
массив

Массив, содержащий JSON-объекты, описывающие то, какие теги должны быть у искомого объекта карты. Необязательный.

Каждый объект должен содержать следующие параметры:
key – строка, ключ тега. Обязательный;
value – строка/число, значение тега.
operator – строка. Оператор, описывающий взаимосвязь между key и value. Обязательный.


id
число

Идентификатор конкретного объекта карты, информацию о котором необходимо вернуть. Необязательный.
Обязателен при отсутствии параметра tags или в случае, если out=member_of.

Если необходимо вернуть объект, который содержит key1=value1 И key2=value2, то в поле tags должны быть перечислены два JSON-объекта. 

Если необходимо вернуть объект, который содержит key1=value1 ИЛИ key2=value2, то в параметре request должны быть перечислены два JSON-QL, внутри которых tags содержит только один из тегов: один JSON-QL для key1=value1, второй для key2=value2

ОПЕРАТОРЫ

  • equal, = – эквивалентность, равенство. тег с ключом key должен иметь значение value.
  • not_equal, nequal, != – тег с ключом key должен иметь любое значение, не равное value.
  • like – значение тега с ключом key должно частично совпадать с value. В отличие от предыдущих, данный оператор регистронезависимый. Отлично подходит в сочетании с параметром key=name.
  • exists – тег с ключом key существует. Значение тега неважно.
  • regexp, rgex – позволяет использовать регулярное выражение в параметре value.
  • less, < – тег объекта должен быть меньше указанного числа (например для цены [opm:price]).
  • more, > – тег должен быть больше указанного числа.
  • nmore, <= – значение тега должно быть меньше либо равно указанному числу.
  • nlesss, >= – значение тега должно быть больше либо равно указанному числу.

РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ

Регулярные выражения можно использовать в параметре key.
Если operator=regexp, то регулярные выражения, также, можно использовать в параметре value.

Примеры регулярных выражений:

(name|description) — одно из двух: или name, или description.
Солнечн(ая|ый) — одно из двух: или Солнечная, или Солнечный.
(.*)— любой символ или символы в любом количестве.
и т.д.

ПАРАМЕТР OFFSET

Параметр можно охарактеризовать как номер страницы. Рекомендуется ставить всегда 0. Данный параметр отлично работает, если в параметре request указан только один JSON-QL. 

Несмотря на название (offset – смещение) должен передаваться «номер страницы», где 0 – это первая страница, 1 – вторая, и т.д. Смещение как таковое будет автоматически рассчитываться исходя из параметра сount.

ОТВЕТ

Ответ приходит в формате JSON. В случае успеха ответ будет содержать параметр count – количество найденных объектов карты и поле response.

В общем случае поле respone в ответе будет содержать массив объектов карты.
В случае, если в запросе параметр out=member_of, поле respone в ответе будет представлять из себя JSON-объект, содержащий объекты участия.

Пример ответа для общего случая:

{
  "count":1,
  "response":[
    {
      "id":"356095",
      "type":"node",
      "coordinates":[1.42618323897,72.16699583768],
      "tags":{
        "name":"Приволжск",
        "place":"town"
      }
    }
  ]
}

КООРДИНАТЫ ОБЪЕКТА

В ответе координаты приходят в следующем порядке: сначала долгота, а затем широта. Формат ответа зависит от типа объекта.

node

Для точек на карте координаты в coordinates приходят в виде массива с двумя числами: долгота и широта, соответственно.

"coordinates": [123, 45]

way

Для линий координаты приходят в виде массива, содержащего координаты точек, из которых состоит линия:

"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]]]

ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ

В ходе выполнения могут произойти предупреждения, связанные с неправильно составленным JSON-QL запросом. Если в ходе выполнения запроса была обнаружена некритическая ошибка в JSON-QL запросе, в ответ добавляется поле warnings – массив, содержащий тексты предупреждений с описанием ошибок, допущенных в JSON-QL запросе. Поле response при этом остается в ответе и содержит результаты поиска для JSON-QL запросов, составленных без ошибок.

В ходе выполнения также могут произойти критические ошибки. В этом случае возвращается только текстовое поле error с описанием критической ошибки.

ПРИМЕР ЗАПРОСА

 

ПРИМЕРЫ ЗАПРОСОВ