Оптимизация маршрута
Оптимизация маршрута — сервис, который позволяет решить задачу коммивояжёра и осуществить расчёт оптимального маршрута для набора произвольных целевых точек. Для расчёта оптимального маршрута могут быть использованы автомобильный, пешеходный и велосипедный графы.
/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 |
|
||
locations | list |
Список точек, которые нужно отсортировать в соответствии с порядком их посещения. Первая и последняя точка в списке таковыми и остаются, а точки между ними могут быть переставлены для оптимизации маршрута по времени. Минимальное количество точек: 2. |
|
Дополнительные параметры запроса
Имя поля
|
Формат
|
Описание
|
Пример
| |
---|---|---|---|---|
costing | string |
Тип транспорта для построения маршрута. Поддерживаемые значения:
|
|
|
id | string | Идентификатор запроса, который возвращается вместе с ответом, что позволяет точно установить соответствие запроса и ответа |
|
|
costing_options | dict |
Список параметров расчёта маршрута. Для различных типов транспорта используются различные опции и ограничения, аналогичные тем, которые используются в сервисе построения маршрута
|
|
|
units | string |
Единица измерения расстояния в ответе:
|
|
|
fix_destination | bool |
Флаг, указывающий на то, нужно ли фиксировать последнюю из перечисленных координат в locations в качестве финиша. Если fix_destination=true, то последняя из указанных локаций в ответе сервиса гарантированно будет являться точкой финиша. Если fix_destination=false, то последняя из указанных локаций может оказаться одной из промежуточных точек маршрута. Значение по умолчанию: true. |
|
Ответ
Возвращаемый ответ соответствует структуре GeoJSON и содержит:
Имя поля
|
Формат
|
Описание
|
Пример
| |
---|---|---|---|---|
id | string | Идентификатор запроса, который возвращается вместе с ответом, что позволяет точно установить соответствие запроса и ответа |
|
|
trip | object map |
Информация о маршруте определяется параметрами:
|
|
Если по запросу ничего не найдено, ответ будет выглядеть следующим образом:
{"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_SHw\\D}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@eqAdAgD`Ssn@dBqFNea@xVavAdZajBxEomA|AeeBhHiNbLcAnAuGpT|VlD~DpaBf|@vkA|q@|eBjOv`@b[tPwGzDtA`s@`_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" } |