Клуб API Карт

Как получить путевые точки, которые соединяет router.Path?

babymar
18 августа 2015, 10:22

Создал маршрут. Количество путевых точек более 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++;
           
            })
        }
    }
1 комментарий
Подписаться на комментарии к посту

 я когда-то делал такую обертку для маршрутизатора в 2.0

Она реализует интерфейс DirectionService как в АПИ Гугла

Есть еще DircetionRenderer

Все это используется как Model и View в примере расчета стоимости доставки, тут весь код