Archives by date

You are browsing the site archives by date.

REST API Сервис построения маршрутов

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
}


// координаты на карте
// статус: 0 – успешное выполнение запроса, 207 – нет маршрута

Ближайшая точка

Данный сервис позволяет определить ближайшую точку на некотором участке улицы дорожной сети к указанной координате.
Ближайшая точка определяется при отправке запроса следующего формата:

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} Возвращает инструкции для каждого маршрута в виде массива.

  • 0 – направление пути
  • 1 – название маршрута (строка)
  • 2 – длина в метрах (целое число)
  • 3 – положение
  • 4 – время в секундах
  • 5 – длина в метрах (строка)
  • 6 – аббревиатура направления (N – север, S – юг, E – восток, W — запад)
  • 7 – азимут
&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

Содержит описание ошибки

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

Содержит описание ошибки