Перейти к основному содержимому

Оптимизация маршрута

Оптимизация маршрута — сервис, который позволяет решить задачу коммивояжёра и осуществить расчёт оптимального маршрута для набора произвольных целевых точек. Для расчёта оптимального маршрута могут быть использованы автомобильный, пешеходный и велосипедный графы.

/optimal_route — точка вызова сервиса расчета оптимального маршрута. Для входного набора координат строит оптимизированный по времени, либо по расстоянию маршрут и формирует список координат в порядке их посещения.

Запрос

Запрос передается в виде JSON с обязательными и необязательными параметрами запроса.

Ниже представлен простой пример запрос.

{"locations":[{"lon":49.22088,"lat":55.77055},{"lon":49.21999,"lat":55.77246},{"lon":49.21933,"lat":55.77222},{"lon":49.22999,"lat":55.78246},{"lon":49.26842,"lat":55.75043}],"costing":"pedestrian","directions_options":{"units":"miles"},"id":"optimal_route_test"}

Этот запрос рассчитывает оптимальный пеший маршрут со стартом в первой точке из списка locations и финишем в последней точке.

Обязательные параметры запроса

Имя поляФорматОписаниеПример

api_key

hex-string

Доступ к сервисам.

api_key=fa749bace6d8a3b1....

locations

list

Список точек, которые нужно отсортировать в соответствии с порядком их посещения. Первая и последняя точка в списке таковыми и остаются, а точки между ними могут быть переставлены для оптимизации маршрута по времени. Минимальное количество точек: 2.

"locations":
[
{
"lat":55.77055,
"lon":49.22088
},
{
"lat":55.796932,
"lon":37.537849
}
]

Дополнительные параметры запроса

Имя поляФорматОписаниеПример

costing

string

Тип транспорта для построения маршрута. Поддерживаемые значения:

auto (по умолчанию) — автомобильный;

truck — грузовики;

pedestrian — пешеходный;

bicycle — велосипедный.

"costing":"pedestrian"

id

string

Идентификатор запроса, который возвращается вместе с ответом, что позволяет точно установить соответствие запроса и ответа.

"id":"optimal_route_test"

costing_options

dict

Список параметров расчёта маршрута. Для различных типов транспорта используются различные опции и ограничения, аналогичные тем, которые используются в сервисе построения маршрута.

к сведению

Дополнительно присутствует опция shortest, по умолчанию выставленная в false. Если shortest=false, то маршрут оптимизируется по времени. Если shortest=true, то маршрут оптимизируется по расстоянию.

"costing_options":{
"auto":{
"shortest":true,
"use_tolls":0
}
}

units

string

Единица измерения расстояния в ответе:

kilometers (по умолчанию) — километры;

miles — мили.

"units":"miles"

fix_destination

bool

Флаг, указывающий на то, нужно ли фиксировать последнюю из перечисленных координат в locations в качестве финиша. Если fix_destination=true, то последняя из указанных локаций в ответе сервиса гарантированно будет являться точкой финиша. Если fix_destination=false, то последняя из указанных локаций может оказаться одной из промежуточных точек маршрута.

Значение по умолчанию: true.

"fix_destination":"false"

Ответ

Возвращаемый ответ соответствует структуре GeoJSON и содержит следующие поля.

Имя поляФорматОписаниеПример

id

string

Идентификатор запроса, который возвращается вместе с ответом, что позволяет точно установить соответствие запроса и ответа.

"id": "optimal_route_test"

trip

object map

Информация о маршруте определяется параметрами:

locations — список точек маршрута, отсортированных для оптимального по времени прохождения маршрута;

legs — информация о полилинии маршрута (см. также: Декодирование ломаной маршрута);

summary — краткая информация о маршруте;

status_message — текстовая расшифровка статуса выполнения запроса;

status — статус выполнения запроса;

units — единицы измерения;

language — язык, на котором представлена информация о маневрах.

{
"trip":{
"locations":[
{
"type":"break",
"lat":43.1332,
"lon":131.9113,
"original_index":0
},
{
"type":"break",
"lat":50.266,
"lon":127.5356,
"original_index":1
}
],
"legs":[
{
"summary":{
"min_lat":43.131777,
"min_lon":127.535648,
"max_lat":50.291427,
"max_lon":132.040931,
"time":58965.898,
"length":1424.861,
"cost":54399.585
},
"shape":"shape. In this example we skip it."
}
],
"summary":{
"min_lat":43.131777,
"min_lon":127.535648,
"max_lat":50.291427,
"max_lon":132.040931,
"time":58965.898,
"length":1424.861,
"cost":54399.585
},
"status_message":"Found route between points",
"status":0,
"units":"kilometers",
"language":"ru-RU"
},
"id":"my_route"
}

Если по запросу ничего не найдено, ответ будет выглядеть следующим образом.

js
{"status_code":400,"status":"Bad Request"}

Пример

Запрос

curl -X POST 
-H "Content-type: application/json"
-H "Accept: application/json"
-d '{"locations":[{"lon":49.22088,"lat":55.77055},{"lon":49.21999,"lat":55.77246},{"lon":49.26842,"lat":55.75043}],"costing":"pedestrian","directions_options":{"units":"miles"},"id":"optimal_route_test"}'
"https://geo.rustore.ru/api/optimal_route?api_key=<YOUR_API_KEY>"

Ответ

{
"trip": {
"locations": [{
"type": "break",
"lat": 55.77055,
"lon": 49.22088,
"original_index": 0
}, {
"type": "break",
"lat": 55.77246,
"lon": 49.21999,
"original_index": 1
}, {
"type": "break",
"lat": 55.75043,
"lon": 49.26842,
"original_index": 2
}],
"legs": [{
"summary": {
"min_lat": 55.77065,
"min_lon": 49.21999,
"max_lat": 55.772514,
"max_lon": 49.220883,
"time": 188.317,
"length": 0.164,
"cost": 193.317
},
"shape": "u~jiBepe{|AMlh@gq@o@or@m@eMMAtP"
}, {
"summary": {
"min_lat": 55.750237,
"min_lon": 49.21999,
"max_lat": 55.772515,
"max_lon": 49.269982,
"time": 3543.527,
"length": 3.113,
"cost": 3644.115
},
"shape": "cuakiBmxc{|A@uPEiUHgkAF_n@BgYHghAPwvBFgr@XcrD@{ZBmGJupAG_SHwD}RNoaC@cNfAyGxHaGja@Y~JmFxKyLlBuBfUy[pI_Ux@uBfNkb@rFwTvMgx@dBkKlD}SrFs]bFa@pCgTdI{i@fC}R@aD~PklAzBwObLqw@vIuf@lLop@p@oBrJuYfNmYbAwBtJwPfCuBxIkHzMqIh_@sRfCWb@}SqAu@_GcfB_Bqh@yBmk@w@}M{D}}@qG}yAuBqZ|D_G~oCshAhQmAzWiRla@wYlbAw}@fCsFj{@ijBjWij@zZsp@fm@eqAdAgDSsn@dBqFNea@xVavAdZajBxEomA|AeeBhHiNbLcAnAuGpT|VlD~DpaBf|@vkA|q@|eBjOv@b[tPwGzDtAs@_AtGUjo@{vAvUmm@iJyL"
}],
"summary": {
"min_lat": 55.750237,
"min_lon": 49.21999,
"max_lat": 55.772515,
"max_lon": 49.269982,
"time": 3731.844,
"length": 3.278,
"cost": 3837.433
},
"status_message": "Found route between points",
"status": 0,
"units": "miles",
"language": "ru-RU"
},
"id": "optimal_route_test"
}