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
с описанием критической ошибки.
ПРИМЕР ЗАПРОСА
ПРИМЕРЫ ЗАПРОСОВ