Клуб API Карт

Редактирование маршрутов

Пост в архиве.

Всем добрый день, 

Прошу помочь мне отловить событие редактирования маршрута на карте. Т.е. человек задав начлаьную и конечную точку получил маршрут, и рассчитанную длину пути и время поездки. После этого изменяет маршрут прямо на карте, и... как мне это событие отловить и пересчитать длину с временем пути?

Строю маршрут я так:

 

  map.removeControl(editor);

  var routerModel = new YMaps.RouterEditor.RouterModel();

  var editor = new YMaps.RouterEditor.DragAndDropEditor(routerModel, {

            viaPointHintContent: 'Перетащите точку или удалите ёё двойным щелчком',

            cursorHintContent: 'Перетащите метку, чтобы создать промежуточную точку',

            maxPoints: 3

        }

    );

  routerModel.getRouteProvider().route({

        wayPoints: [start, end],

        viaPoints: [],

        options: { boundedBy: map.getBounds() } // область для геокодирования

    },

    function (rr) {

        // Передача полученного результат в модель.

        // Модель оповестит о новом маршруте редактор.

        routerModel.setRouterResult(rr);

            helper = new YMaps.RouterEditor.RouterResultHelper(rr);

            var dist = Math.round(helper.getDistance()/1000,2) + ' км. ~' +  Math.round(helper.getDuration()/60) + 'мин.';

         document.getElementById('dist').innerHTML = dist;

    }

    );

    // Размещение редактора на карте.

    map.addControl(editor); 

 

3 комментария

Вам нужно подписаться на событие модели RouterResultChange и использовать в обработчике события тот же код, который используется в методе route.

 

Сергей Канаев
28 января 2016, 06:09

Спасибо за ответ,

но не могли бы Вы чуть поподробне описать как мне нужно отловить событие?

попробовал вот так:

 

    YMaps.Events.observe(routerModel, routerModel.RouterResultChange, function (rr) {

        // Передача полученного результат в модель.

        // Модель оповестит о новом маршруте редактор.

        routerModel.setRouterResult(rr);

            g_geo_count = 1;

            helper = new YMaps.RouterEditor.RouterResultHelper(rr);

            var dist = Math.round(helper.getDistance()/1000,2) + ' км. ~' +  Math.round(helper.getDuration()/60) + 'мин.';

         document.getElementById('dist').innerHTML = dist;

        });

ничего не получилось. 

 

http://api.yandex.ru/maps/jsapi/examples/router_editor_result.html - посмотрите этот пример, он должен вам помочь