2015-07-03 1 views
0

Я хочу, чтобы начальная и конечная вершины редактируемой полилинии не редактировались. Чтобы пользователи могли редактировать все остальные вершины, кроме этих двух. Я выполнил прослушиватель событий (mousedown), чтобы отфильтровать вершину, но как я могу остановить ее редактирование.?Карты Google Api: события редактирования в полилинии - сделать вершину нередактируемой

google.maps.event.addListener(poly, 'mousedown', function (event) { 
    if (event.vertex === 0) { // First vertex of polyline 
     //disable vertex from being editable 
    } 
}); 

ответ

1

Вы на правильном пути.

Чтобы обнаружить, что вершина была перемещена, вы слушаете событие set_at на пути Полилинии. Однако это не даст вам знать, какова была исходная позиция, поэтому я бы сделал запись mousedown, как вы сказали, и объявите addListenerOnce на событие set_at пути Пути, чтобы сбросить вершинные координаты, если я 'm в первой или последней точке.

Следующий слушатель позволит пользователю перетаскивать эти вершины, но они будут subborntly вернуться в исходное положение они:

google.maps.event.addListener(poly, 'mousedown', function (event) { 
    var thePath = this.getPath(); 
    if (event.vertex === 0 || event.vertex === thePath.getLength() - 1) { 
     google.maps.event.addListenerOnce(thePath, 'set_at', function (vertex) { 
      this.setAt(vertex, event.latLng); 
     }); 
    } 
}); 

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

Редактировать: вот еще один выстрел в него. Следующий прослушиватель не позволит пользователю перетаскивать указанные вершины. Тем не менее, я повторно включаю редактируемое поведение inmediatly. В вашем браузере может быть состояние гонки.

google.maps.event.addListener(poly, 'mousedown', function (event) { 
    var thePath = this.getPath(); 

    if (event.vertex === 0 || event.vertex === thePath.getLength() - 1) { 
     console.debug('Vertex forbidden!'); 
     this.set('editable',false); 
     this.set('editable',true); 
    } 
}); 
+0

Хорошо, но нет способа отключить движение. Сделать точку устойчивой? –

+0

Привет @StathisGaknis Я добавил второй способ сделать это, что, возможно, и есть то, что вы ищете. Лучше всего трахаться. – amenadiel

+0

Благодарим вас за оба ответа. Я ищу твердое решение (без условий гонки), поэтому я вернусь, когда решит его. Однако я считаю, что это должно обрабатываться gmaps с событием или sth. –