REST API Сервис построения маршрутов
API сервиса построения маршрутов router.geo4.me
Определение местоположения
Данный сервис необходим для определения местоположения ближайшей точки дорожной сети к указанной координате.
Ближайшая точка определяется при отправке запроса следующего формата:
GET/locate?loc=lat,lon
Структура запроса:
GET/locate?loc=52.4224,13.333086
lat: широта
lon: долгота
Ответ:
{
"mapped_coordinate": [52.42244, 13.332101],
"status": 0
}
Ближайшая точка
Данный сервис позволяет определить ближайшую точку на некотором участке улицы дорожной сети к указанной координате.
Ближайшая точка определяется при отправке запроса следующего формата:
GET/nearest?loc=lat,lon
Структура запроса:
GET/nearest?loc=52.4224,13.333086
lat: широта
lon: долгота
Ответ:
{
"name": "Mariannenstraße",
"mapped_coordinate": [52.422592, 13.333837],
"status": 0
}
// название улицы
// координаты на карте
// статус: 0 – успешное выполнение запроса, 207 – нет маршрута
При использовании вышеупомянутого синтаксиса ответ приходит в формате JSON, который может быть дополнительно обработан многими языками программирования. При этом на выходе данные могут быть отформатированы как JSONP:
GET/nearest?52.555485441735&13.342227642887&jsonp=function
Запрос возвращает результат в формате JSON, обёрнутый функцией (), которая может быть легко переработана при помощи JavaScript:
function({"status":0,"result":[52.55567, 13.34252]"})
Построение маршрута
Данный сервис позволяет построить кратчайший маршрут через указанные координаты с учетом порядка следования координат. Основные точки между координатами (lat1, lon1) и (lat2, lon2) запрашиваются следующим образом:
GET/viaroute?loc=lat1,lon1&loc=lat2,lon2
Структура запроса:
GET/viaroute?loc= 55.7887400, 49.1221400&loc= 55.8437600, 48.5178400
lat: широта
lon: долгота
Чтобы построить маршрут через определенные координаты, перечислите их в запросе string в порядке своего появления (на текущий момент стоит максимальное ограничение в 25 точек).
При построении маршрута появляется параметр hint_data, который дает (кодированную) достоверную информацию о начальных и конечных точках. При этом при реализации API предполагается следующее:
- добавление &checksum=… в URL, где ‘…’ – это контрольная сумма в hint_data.checksum из предыдущего запроса.
- добавление &hint=… после каждого &loc=… параметра, если он не меняется по сравнению с предыдущим запросом.
- в случае, если координаты были изменены, то они не дают никакой «подсказки» для указанной координаты.
- «подсказки» должны быть размещены непосредственно после параметра &loc=…
Ответ:
{
"hint_data": {
"locations": ["1","2"],
"checksum": 3637997664
},
"route_name": ["1","2"],
"found_alternative": false,
"via_points": [[55.788872,49.121826],
[55.843784,48.517399]],
"route_summary": {
"end_point": "",
"start_point": "Университетская улица",
"total_time": 3128,
"total_distance": 42557
},
"route_geometry": "",
"status_message": "Found route between points",
"via_indices": [0, 362],
"status": 0
}
// информация о «подсказывающих» данных
// местоположение
// контрольная сумма
// массив строк, который хранит наименования маршрутов
// поиск альтернатив
// массив точек, в котором каждая точка представляет собой массив координат: [lat, lon]
// общие сведения о маршруте
// конечная точка
// начальная точка
// общее время пути в секундах
// общая длина в метрах
// геометрия маршрута
// сообщение о статусе (находит маршрут между точками или нет)
// целочисленный массив, который содержит положение начальных и конечных путевых точек
// статус: 0 – успешное выполнение запроса, 207 – нет маршрута
Таблица расстояний по дорожной сети
Запрос по таблицам расстояний аналогичен запросу по маршруту. Схема запроса по таблице расстояний выглядит следующим образом:
GET/table?loc=lat1,lon1&loc=lat2,lon2&…loc=latX,lonX
Структура запроса:
GET/table?loc=52.554070,13.160621&loc=52.431272,13.720654&loc=52.554070,13.720654&loc=52.554070, 13.160621&z=14
lat: широта
lon: долгота
Ответ:
{
"distance_table": [
[0, 26084, 22942, 26989],
[26319, 0, 30810, 19607],
[22782, 30482, 0, 37495],
[27376, 19415, 37693, 0]
]
}
Параметры
В запрос может быть добавлен ряд дополнительных параметров:
Название параметров | Описание параметров |
&z={0,…,18} | Определяет уровень масштабирования и упрощает геометрию маршрута (то есть на сколько точной будет возвращаемая геометрия маршрута). |
output={json, gpx} | Форматирует выходные данные как JSON или GPX. |
&jsonp=_function_ | Форматирует выходные данные как JSONP, обернутые функцией. |
&instructions={true, false} | Возвращает инструкции для каждого маршрута в виде массива.
|
&alt={true, false} | Возвращает альтернативный маршрут при его наличии. |
Automap — rest — events
События ТС
Получение всех событий
GET /events/last
Структура запроса:
GET /events/last?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[{
"id": 29041304,
"dataFrom": 1389361046000,
"dataTill": 1389361188000,
"info": " ",
"data": "6547",
"gaugeInfo": null,
"gaugeId": null,
"glonassId": 42117,
"carId": 111447,
"eventId": 1,
"notifiable": true,
"carNo": "С001СЕ",
"carName": "CHEVROLET"
},...]
// id события, целое число
// время начала действия события, timestamp
// время конца действия события, timestamp
// информация о событии, строка
// данные, строка
// информация о датчике, строка
// id датчика, целое число
// id ГЛОНАСС, целое число
// id ТС, целое число
// id события, целое число
// посылает оповещения, булевое поле
// номер ТС, строка
// название ТС, строка
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Получение события по ID
GET /events/{id}
Структура запроса:
GET /events/29041304?token=bw3ty3h46yth
id: id события
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 29041304,
"dataFrom": 1389361046000,
"dataTill": 1389361188000,
"lat": 55.7876,
"lon": 49.1406,
"description": "Остановка (00:02:22)"
}
// id события, целое число
// время начала действия события, timestamp
// время конца действия события, timestamp
// широта, число с плавающей точкой
// долгота, число с плавающей точкой
// описание события, строка
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Получение новых событий
Для подписки на обновление информации о событиях конкретных ТС необходимо отправить WebSocket-сообщение «SET_OBSERVABLE_CARS», содержащее массив glonassID данных ТС. Новые события приходят в сообщении вебсокета с заголовком EVENT_UPDATES.
Структура запроса:
Формат: json
{
"command": "SET_OBSERVABLE_CARS",
"data": [3333,107285,107305,107328]
}
// заголовок сообщения, строка
// glonassId ТС, на которые подписываемся
Ответ:
Формат: json
{
"command": "EVENT_UPDATES",
"data": [
{
"carId": 1869,
"carName": "ПАЗ-115",
"carNo": "ВН115 16 RUS",
"dataFrom": 1390224122000,
"dataTill": 1390226705000,
"eventId": 1,
"gaugeInfo": null,
"glonassId": 223789,
"id": 44672821,
"info": ""
}
]
}
// заголовок сообщения, строка
// id ТС, целое число
// название ТС, строка
// номер ТС, строка
// начало действия события, timestamp
// конец действия события, timestamp
// тип события(см. ниже), целое число
// информация о датчике, строка
// ГЛОНАСС id, целое число
// id события, целое число
// если событие датчика, то тип датчика, строка
Типы событий
GET /events/types
Структура запроса:
GET /events/types?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Формат: json
[{
"id": 1,
"name": "parking",
"defaultMessage": "ТС car.carInfo.carNo остановилось в date",
"title": "Остановка",
"iconList": "/assets/images/icons/parking.png",
"iconMap": "/assets/images/markers/parking.png",
"view": true,
"isModul": false,
"notifiable": true
},...]
// id типа события, целое число
// название события, строка
// сообщение по умолчанию, строка
// заголовок, строка
// иконка списка, строка
// иконка карты, строка
// является видимым, булевое поле
// является модулем, булевое поле
// посылает оповещения, булевое поле
Типы событий:
1 — остановка
2 — потеря сигнала
3 — поворот
4 — поломка оборудования
5 — смена скоростного режима
6 — вход в геозону
7 — выход из геозоны
8 — событие цифрового датчика (если тип датчика 32, то событие 8 — это зажигание)
9 — событие аналогового датчика
10 — заправка топлива
11 — слив топлива
12 — зажигание сработало без назначенного водителя
13 — прибыл в контрольную точку
14 — прибыл к месту заявки
15 — зажигание
16 — выход на маршрут
17 — уход с маршрута
18 — задание назначено
19 — задание выполнено
20 — задание просрочено
21 — задание отменено водителем
22 — задание принято водителем
23 — задание отменено диспетчером
24 — ТС ушло с маршрута
25 — долгая остановка ТС на маршруте
Automap — rest — log — app
Журнал приложения
Логи приложения
GET /log/app
Структура запроса:
GET /log/app?token=bw3ty3h46yth
token: ключ доступа
Параметры фильтрации
GET /log/app?level=3
message: поиск логов по сообщению
logger: поиск логов по источнику логов приложения
thread: поиск логов по потокам логов приложения
level: получение списка логов по id уровня ошибки
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
id: "52bd1f69e4b0f5cc9d5de9b3",
time: 1388126057286,
message: "refresh inmemory car storage at Fri Dec 27",
level: "NOTICE",
logger: "application",
thread: "application-akka.actor.default-d-11334",
}
]
// массив логов
// id лога
// время
// сообщение
// уровень
// источник логов приложения
// поток логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Количество логов приложения
GET /log/app/count
Структура запроса:
GET /log/app/count?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
4303
// количество логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Источники логов
GET /log/app/loggers
Структура запроса:
GET /log/app/loggers?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
value: "application"
}
]
// массив источников логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Количество источников логов
GET /log/app/loggers/count
Структура запроса:
GET /log/app/loggers/count?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
8
// количество источников логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Потоки логов
GET /log/app/threads
Структура запроса:
GET /log/app/threads?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
value: "application-akka.actor.default-dispatcher-15756"
}
]
// массив потоков логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Количество потоков логов приложения
GET /log/app/threads/count
Структура запроса:
GET /log/app/threads/count?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
145
// количество потоков логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Список уровней ошибок
GET /log/app/levels
Структура запроса:
GET /log/app/levels?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
id: 1,
type: "ALERT"
}
]
// массив уровней ошибок
// id уровня ошибки
// тип уровня ошибки
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки