Site icon FantasticGame

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

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

{
 "request":[...],
 "count":16,
 "offset":0,
 "out":"info"
}
ПараметрОписание
request
массив
Массив, содержащий JSON-QL запросы к карте. Обязательный.
count
число
Количество отображаемых в ответе данных, от 1 до 20. Обязательный.
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

ОПЕРАТОРЫ

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

(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 с описанием критической ошибки.

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

 

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

JSON-схема объекта карты

JSON-объект с информацией об объекте карты, возвращаемый в api поиска по карте содержит следующие параметры:

БАЗОВЫЕ ПОЛЯ

ПараметрОписание
id
число
Числовой идентификатор объекта карт
type
строка

Тип объекта карты:
node – отдельная точка на карте.
way – линия (или полигон, в зависимости от набора тегов и замкнутости линии).
relation – отношение, состоящее из одной или нескольких точек и/или одной или нескольких линий.

photo
строка

Ссылка на фотографию. Поле возвращается только при запросе информации о конкретном объекте карты и только в случае наличия фотографии.

ОПЦИОНАЛЬНЫЕ ПОЛЯ

Включение в ответ этих полей зависит от параметров запроса

ПараметрОписание
tags
объект
JSON-объект, в котором перечислены теги объекта в виде {"key":"value"}
coordinates
массив

Координаты объекта карты. Формат ответа зависит от типа объекта:
node – массив [широта, долгота].
way – массив, состоящий из координат точек, из которых состоит линия: [[ш, д], [ш, д], [ш, д]].

points
массив

Координаты отдельных точек, участвующих в отношении (type=relation). Формат аналогичен координатам линии: [[ш, д], [ш, д], [ш, д]]

line_points
массив

Массив с координатами линий, участвующих в отношении.
[[[ш1, д1], [ш1, д1], [ш1, д1]], [[ш2, д2], [ш2, д2], [ш2, д2]]]

nd
массив

Массив, в котором перечислены числовые идентификаторы точек, из которых состоит линия. Поле присутствует только у линий (type=way) и в случае, если в ответе возвращаются координаты (см параметр запроса out).

members
массив

Массив из объектов, описывающих участников отношения. Поле присутствует только у отношений (type=relation) и в случае, если в ответе возвращаются координаты (см параметр запроса out).

Объект участника содержит 3 параметра:
id – числовой идентификатор участника
type – тип участника (node, way, relation)
role – (строка) роль участника.

city
строка

Экспериментальное поле. Указывается город, в границах которого находится точка. Поле возвращается только в том случае, если точка находится внутри границ города и если известны координаты этой точки (см параметр запроса out)

JSON-объект участия

Возвращается в поле response в случае, если параметр запроса out=member_of.

JSON-объект состоит из трёх полей node, way и relation, которые включаются в ответ по мере надобности. Из всех запрошенных объектов карты в ответ включаются только те объекты, которые являются участниками какого-либо другого объекта.

Структура всех трёх полей одинаковая и представляет собой JSON-объект, ключами которого являются числовые идентификаторы некоторых из запрошенных объектов, при этом каждый ключ содержит массив из объектов карты, участником которых является запрошенный объект. При этом возвращаются только числовой идентификатор объекта, его тип и теги.

Поля JSON-объекта участия

node
объект

Объект, в котором из всех перечисленных в запросе точек указываются только те точки, которые являются участниками какого-либо другого объекта карты (линии или отношения). Включается только в том случае, если хотя бы одна из запрошенных точек является участником чего-либо.
Имеет вид:

{"node":{
"id_запрошенной_точки1":[/*объекты карты, в которых участвует эта точка*/],
"id_запрошенной_точки2": [...],
...
}}
way
объект

Аналогично для запрошенных линий.

relation
объект

Аналогично для запрошенных отношений.

<

Exit mobile version