Вы на правильном пути.
Чтобы обнаружить, что вершина была перемещена, вы слушаете событие 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);
}
});
Хорошо, но нет способа отключить движение. Сделать точку устойчивой? –
Привет @StathisGaknis Я добавил второй способ сделать это, что, возможно, и есть то, что вы ищете. Лучше всего трахаться. – amenadiel
Благодарим вас за оба ответа. Я ищу твердое решение (без условий гонки), поэтому я вернусь, когда решит его. Однако я считаю, что это должно обрабатываться gmaps с событием или sth. –