Вот решение, которое использует кнопку для удаления вершины.Кнопка отображается или скрывается, если есть удаляемая вершина (это может быть всплывающее окно).
Используется:
- опция условия, чтобы показать кнопку, если есть точкарядом с кнопкой
- параметр insertVertexCondition, чтобы скрыть кнопку (здесь нет вершины)
- событие modifystart и modifyend, чтобы скрыть кнопку (мы перемещаемся и не хотим, чтобы кнопка былавидимый)
- функция removePoint при нажатии на кнопку
Кнопка не отображается, если вы двигаетесь или нет смысла удалять.Он не полагается на функции, которые не документированы или являются закрытыми.
Вы можете увидеть его в действии здесь .
var btElt = document.getElementById("delete");
// Modify interaction
var mod = new ol.interaction.Modify({
source: vector.getSource(),
// Show on select
condition: function(e){
// Check if there is a feature to select
var f = this.getMap().getFeaturesAtPixel(e.pixel,{
hitTolerance:5
});
if (f) {
var p0 = e.pixel;
var p1 = f[0].getGeometry().getClosestPoint(e.coordinate);
p1 = this.getMap().getPixelFromCoordinate(p1);
var dx = p0[0]-p1[0];
var dy = p0[1]-p1[1];
if (Math.sqrt(dx*dx+dy*dy) > 8) {
f = null;
}
}
if (f) btElt.style.display = "inline-block";
else btElt.style.display = "none";
return true;
},
// Hide on insert
insertVertexCondition: function(e) {
btElt.style.display = "none";
return true;
}
});
// Hide on modifying
mod.on(['modifystart','modifyend'], function(){
btElt.style.display = "none";
});
map.addInteraction (mod);
// Delete vertex when click the button
function deleteVertex() {
mod.removePoint();
btElt.style.display = "none";
}