Клуб API Карт

При перемещении метка маршрута прыгает

filenko.constantin
27 июля 2016, 22:56

Доброго времени суток. Я создаю маршрут, добавляю в него editor (из песочницы) по клику на кнопку, после чего мне нужно, чтоб метку маршрута можно было перемещать и по завершении перемещения, в balloonContent этой метки, добавлялся новый адрес(через geocode). Когда включаю режим редактирования, метку можно перемещать, но это сделать очень сложно, так как метка, из-за малейшего движения может переместиться на пол континента.

button2.click(function () {
    if (startEditing2 = !startEditing2) {
        // Включаем редактор.
        route.editor.start({ addWayPoints: false, removeWayPoints: true, editWayPoints: true });
        route.getWayPoints().options.set({
            draggable: true
        });
				
        route.events.add('drag', function (e) {
            var coords = e.get('coords');
	    var bc = '';
 	    ymaps.geocode(coords).then(function (res) {
                var firstGeoObject = res.geoObjects.get(0);
	            bc = firstGeoObject.properties.get('text');
	            e.properties.set("balloonContent", bc);
            });
       });
				
       button2.val('Режим перемещения меток ВЫКЛ');
    } else {
        // Выключаем редактор.
        route.editor.stop();
        button2.val('Режим перемещения меток ВКЛ');
    }
});

Но как бы плохо не перемещалась метка, адрес в ней так же не меняется. Помогите пожалуйста решить вопрос.

6 комментариев
Подписаться на комментарии к посту
route.getWayPoints().options.set({
draggable: true
});
Это не нужно добавлять, вы же уже включили перетаскивание через editWayPoints: true


И слушать надо не "drag", а "waypointdragend"
https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/router.Editor-docpage/
filenko.constantin
28 июля 2016, 15:38
dimik,
огромное спасибо!
filenko.constantin
28 июля 2016, 17:28
dimik,
почему-то слушатель вообще никак не реагирует
route.events.add('waypointdragend', function (e) {
    alert("Переместили");
});
filenko.constantin,
Наверное надо слушать это событие на редакторе, а не на маршруте
filenko.constantin
28 июля 2016, 18:06
dimik,
получилось так:
route.getWayPoints().each(function(wayPoint){
    wayPoint.events.add("dragend", function(e){
        var coords = e.get('target').geometry.getCoordinates()
        ymaps.geocode(coords).then(function (res) {
            var firstGeoObject = res.geoObjects.get(0);
            e.get('target').properties.set("balloonContent", firstGeoObject.properties.get('text'));
        });
    })
});
filenko.constantin,
Это плохо, так как будет "течь" по памяти. Вы навешиваете обработчики в цикле и не снимаете их. Лучше использовать один обработчик (делегирование событий) на редактор или можно попробовать слушать "dragend" на коллекции wayPoints, примерно так:
var listeners = route.getWayPoints().events.group()
.add('dragend', function (e) {
  var coords = e.get('target').geometry.getCoordinates()
...
})


Но в любом случае перед перестроением маршрута обработчики надо удалять через listeners.removeAll()