Маршрутизатор
API предоставляет возможность прокладывания автомобильных маршрутов. Маршрут между начальным и конечным пунктом вычисляется автоматически, при этом можно задать произвольное количество точек остановки и транзитных точек маршрута.
Для построения маршрута предназначена функция route, в которую передается массив точек, через которые нужно проложить маршрут и, при необходимости, дополнительные опции его построения.
Вычисление маршрута производится асинхронно (аналогично геокодированию). Результат передается в функцию-обработчик в виде коллекции GeoObjectCollection. Этот объект реализует интерфейс IGeoObject, то есть может быть размещен на карте.
ymaps.route(['Москва', 'Санкт-Петербург']).then(
function (route) {
myMap.geoObjects.add(route);
},
function (error) {
alert('Возникла ошибка: ' + error.message);
}
);
Существует три способа задания точки маршрута:
-
Пара координат в виде массива (
[59.94, 30.31]
). -
Строка (
'Санкт-Петербург'
). Производится автоматическое геокодирование. -
Объект с полями
type
иpoint
({type: 'wayPoint', point: 'Санкт-Петербург'},``{type: 'viaPoint', point: [59.94, 30.31]
).Этот способ позволяет в явном виде указать тип точки маршрута: wayPoint — точка остановки, viaPoint — транзитная точка. Если в поле
point
передана строка, производится автоматическое геокодирование.
Если тип точки не указан, она считается точкой остановки.
ymaps.route([
'Кронштадт, Якорная площадь',
{
type: 'viaPoint',
point: [59.93328,30.342791]// или 'Аничков мост'
},
'Санкт-Петербург, Финляндский вокзал'// или [59.956084, 30.356849]
]).then(
function (route) {
myMap.geoObjects.add(route);
},
function (error) {
alert("Возникла ошибка: " + error.message);
}
);
Прокладывать маршрут можно как с учетом так и без учета пробок. Игнорирование или учет пробок регулируется опцией avoidTrafficJams
(true
/false
). По умолчанию пробки не учитываются. Маршрут, проложенный без учета пробок, может отличаться от маршрута, проложенного между теми же точками, но с учетом пробок.
ymaps.route(['Кронштадт, Якорная площадь', 'Санкт-Петербург, Финляндский вокзал'], {avoidTrafficJams: true});
Построенный маршрут представляется в виде упорядоченной коллекции путей (Path), попарно последовательно соединяющих точки остановки. Получить пути маршрута можно с помощью метода getPaths. Для предыдущего примера с промежуточной точкой «Аничков мост» код route.getPaths().getLength()
возвратит единицу, так как промежуточные точки не влияют на разбиение маршрута на пути.
Каждый путь разбивается на сегменты (router.Segment), получить которые из пути можно с помощью метода getSegments. Концами сегментов являются начальные и конечные точки путей, транзитные точки, точки вынужденной остановки (например, паром) и точки возможного изменения направления движения (развилка, въезд, съезд, поворот, разворот, перекресток).
Сегмент описывается ломаной, координаты точек ломаной возвращаются методом getCoordinates.
var routeLength = route.getLength(); // Длина маршрута
var firstPath = route.getPaths().get(0); // Первый путь
var firstPathLength = firstPath.getLength(); // Длина первого пути
var firtstPathTime = firstPath.getTime(); // Время без учета пробок
var firstPathFirstSegment = firstPath.getSegments()[0];// Первый сегмент первого пути
var firstPathFirstSegmentJamsTime = firstPathFirstSegment.getJamsTime();// Время с пробками
Для сегментов также доступны данные, позволяющие построить маршрутный лист: направление и угол поворота в конце сегмента, а также название улицы, на которой он начинается.