Клуб API Карт

Получение списка отрезков мультимаршрута (время, расстояние)

sisadmi
6 декабря 2014, 01:58

Есть код (карта построена)

В массиве jsonOut список адресов (Пусть их будет 10)


 

    var multiRoute = new ymaps.multiRouter.MultiRoute({
        referencePoints:
            jsonOut
        ,
        params: {
            // Максимальное количество маршрутов, которое вернет маршрутизатор.
            results: 1,
            avoidTrafficJams: true
        }
    }, {
        options: {
            boundsAutoApply: true
        }
    });
    myMap.geoObjects.add(multiRoute);


    // Подписываемся на события модели мультимаршрута.
    multiRoute.model.events.add("requestsend", function (event) {
        iLog('Отправлены данные на просчет, ожидаем ответ...');
    });
    multiRoute.model.events.add("requestsuccess", function (event) {
        iLog('Просчет получен.');
        iLog('Общая длина маршрута составляет: '+multiRoute.getRoutes().get(0).properties.get('distance').text); // ВЕСЬ маршрут   .value

        // ждем, пока закончит просчет всего маршрута
        for(var i=0; i<jsonOut.length; i++) {
            console.log(multiRoute.getWayPoints().get(i).properties.get('distance'));
        }
        console.log(multiRoute.getRoutes().get(0).model);
        $("#route2").prop('disabled', false);
    });

 

 

Как получить по всем 9-ти отрезкам расстояние и время в пути (для машины)

Получить длину всего маршрута могу. (указано в коде)

АПИ доки читал. Но пока не понял как.

6 комментариев

У маршрутов есть отрезки получить их можно методом getPaths

Из отрезков можно получить время и расстояние

Это я видел. Как реализовать не знаю.

АПИ (описание) скудное. Без примеров.

Именно без примеров. Есть один пример в песочнице и все.

Помогите написать запроса на получение массива данных.

под кат – через кнопку "врезка"

***В моем редакторе нет кнопки Врезка

 

Отлично! Работает! Дублирую тут код JS
для удобства (да и сторонний сервис может не работать)

/пробовал под кат, не получилось(



function init() {
    var myMap = new ymaps.Map('map', {
            center: [55.73197, 49.18978],
            zoom: 13,
            controls: []
        }),
        multiRoute = new ymaps.multiRouter.MultiRoute({
            referencePoints: [
                'Казань, Остановка «пос.Новая Сосновка»',
                [55.73197, 49.18978]
            ]
        }),
    state = 'masstransit';
    multiRoute.model.setParams({
        routingMode: 'masstransit'
    });

    multiRoute.events.add("update",function () {
        var wayPoints = multiRoute.getWayPoints();
       
        wayPoints.get(wayPoints.getLength() - 1).options.set({
            iconLayout: 'default#image',
            iconImageHref: 'ogo.png'
        });

        /**
         * Возвращает дочернюю коллекцию единичных маршрутов мультимаршрута.
         * @see https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.masstransit.Route-docpage/
        */
        multiRoute.getRoutes().each(function (route) {
            console.log('route data:', route.properties.getAll());
            /**
             * Возвращает массив путей маршрута.
             * @see https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.masstransit.Route-docpage/
             */
            route.getPaths().each(function (path) {
                console.log('path data:', path.properties.getAll());
                /**
                 * Возвращает массив сегментов пути.
                 * @see https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.masstransit.Path-docpage/
                 */
                path.getSegments().each(function (segment) {
                    console.log('segment data:', segment.properties.getAll());
                });
            });
        });
    });


    myMap.geoObjects.add(multiRoute);
}

ymaps.ready(init);

Здравствуйте!

dimik, а вы не могли бы пояснить почему решается именно таким способом: через событие "update" на мультимаршрутах?

Почему не получается просто получить активный маршрут и перебрать его сегменты?