Очень просто. Я хочу избежать перетаскивания первой и последней вершин. Я пытался использовать событие dragstart, но, видимо, полилиния его не слушает.
Мне удалось что-то сделать с set_at. У меня сохраняется последняя позиция, когда вызывается set_at, я проверяю индекс этой вершины, а затем устанавливаю latLng для этой вершины на старую. Это было возможно только с помощью функции setAt, которая снова запускает событие.
Таким образом, был создан флаг ignoreNextEvent, поэтому он не будет бесконечным циклом.
проблема в том, что функция setAt os использовалась API карт много раз, и решение, хотя и работает, не идеально, и мне нужно беспокоиться об ignoreNextEvent каждый раз, когда я взаимодействую с полилинией.
Я пытаюсь найти способ добиться этого, может ли кто-нибудь помочь?
Рабочий код:
google.maps.event.addListener(cable.getPath(), 'set_at', function(e){
if(!ignoreNextEvent){
if(e == 0 || e == cable.getPath().length-1){
var point = new google.maps.LatLng(cable.Cable.vertex[e].latitude, cable.Cable.vertex[e].longitude);
ignoreNextEvent = true;
cable.getPath().setAt(e,point);
}else{
if(cable.Cable.idx != 0){ saveCable(index, cable.Cable.destination_idx); }
}
}else{
ignoreNextEvent = false;
}
});