Цель состоит в том, чтобы иметь редактируемую полилинию с настраиваемыми маркерами в каждой вершине.
Как я вижу, Map API V3 не позволяет этого. Поэтому я сделал редактируемую ломаную линию вот так:
let polyline = new self.google.maps.Polyline({
strokeColor: '#000000',
strokeOpacity: 0.3,
strokeWeight: 3,
editable: false,
path: path,
map: self.map
});
polyline.binder = new MVCArrayBinder(polyline.getPath());
let markers = [];
for (let i = 0; i < path.length; i++) {
let marker = this.getBasicMarker(path[i]);
marker.bindTo('position', polyline.binder, i.toString());
markers.push(marker);
}
getBasicMarker(position){
return new this.google.maps.Marker({
position: position,
map: this.map,
icon: {
url: "https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle.png",
size: new google.maps.Size(7, 7),
anchor: new google.maps.Point(3.5, 3.5)
},
draggable: true,
visible: false
});
}
function MVCArrayBinder(mvcArray) {
this.array_ = mvcArray;
}
MVCArrayBinder.prototype = new google.maps.MVCObject();
MVCArrayBinder.prototype.get = function (key) {
if (!isNaN(parseInt(key))) {
return this.array_.getAt(parseInt(key));
} else {
this.array_.get(key);
}
};
MVCArrayBinder.prototype.set = function (key, val) {
if (!isNaN(parseInt(key))) {
this.array_.setAt(parseInt(key), val);
} else {
this.array_.set(key, val);
}
};
Окончательная полилиния теперь выглядит так: http://sandbox.rubera.ru/img/2019-05-28_17-04-25.jpg. Я могу перетащить любую существующую точку. Обновление полилинии при перетаскивании точки.
Теперь мне нужно добавить новую вершину где-то между двумя существующими.
Вот где я застрял.
Может быть, есть другое решение, как решить задачу?