Создал маршрут. Количество путевых точек более 2-х.
Разобрал маршрут по отрезкам router.Path.
Вывожу отрезки справа от карты в табличку. Все хорошо, но от router.Path кроме расстояния и времени напрямую получить больше ничего не получается. Хотелось бы не просто "1. 2,2 км", а что-то вида "1. Адрес 1 -> Адрес 2, 2,2 км.", т.е. добавить данные точек, которые соединяет router.Path.
Пока кроме костыля в виде счетчика counterPath после collroute.each(function (Path) { и соответственного выдергивания точек из исходного массива по номеру элемента (вроде point1 = points.get(counterPath); point2 = points.get(counterPath+1);) ничего не на ум не приходит.
Может есть более цивилизованный способ? Тем более, боюсь, что each может скушать точки с одинаковыми координатами и, соответственно, нулевой длиной отрезка.
function calcRoute(options){
ymaps.route(options,
{
// Опции маршрутизатора
mapStateAutoApply: true, // автоматически позиционировать карту
avoidTrafficJams: true // Учитывать пробки
}).then(
function (router) {
route = router;
myMap.geoObjects.add(route);
var points = route.getWayPoints(),
lastPoint = points.getLength() - 1;
// Задаем стиль метки - иконки будут красного цвета, и
// их изображения будут растягиваться под контент.
points.options.set('preset', 'twirl#redStretchyIcon');
// Задаем контент меток в начальной и конечной точках.
points.get(0).properties.set('iconContent', 'Начало маршрута');
points.get(lastPoint).properties.set('iconContent' , 'Конец маршрута');
});
getRoutePaths();
},
function (error) {
alert("Возникла ошибка: " + error.message);
});
}
function getRoutePaths() {
var collroute = route.getPaths();
if (collroute.getLength() > 0) {
var i=1;
collroute.each(function (Path) {
var f = Path.getLength()/1000;
f = Number(f).toFixed(1);
$("#route_table tr:last").after("<tr><td>"+i+".</td><td>"+f+" км.</td></tr>");
i++;
})
}
}