有沒有一種在OpenLayers 2中以編程方式移動單個頂點的正確方法?OpenLayers 2 - 以編程方式移動頂點
問題是,我需要防止用戶繪製無效(例如自交)多邊形。爲此,我創建了一個函數來驗證多邊形,然後驗證dragComplete
方法OpenLayers.Control.ModifyFeature
類中的多邊形(我基於此創建了自己的類)。
基本上,我保存當前頂點位置dragStart
方法,那麼我驗證了多邊形dragComplete
方法,如果多邊形是無效的,我改變了頂點之前我已經保存的座標的座標。
它正在工作,頂點移回到先前的位置。但拖動和旋轉處理程序存在問題。這些處理程序不關心這個頂點已經移動,它們的位置被設置爲具有這個錯誤頂點的幾何體的中心(在移動之前)。當我拖動或旋轉特徵時,這兩個處理程序都會回到正確的位置。當這個頂點移動時,我需要正確設置它們。
是否有某些事件或方法需要調用才能正常工作?
這是我在dragComplete
方法的開頭提出的。
dragComplete: function (vertex) {
if (this.feature.geometry.isValid &&
!this.feature.geometry.isValid()) {
vertex.geometry.x = this.vertexPosition.x;
vertex.geometry.y = this.vertexPosition.y;
this.layer.drawFeature(this.feature);
}
...
}
它將頂點正確地移動到給定位置。事情是它不會影響拖動處理程序和旋轉處理程序。這是我嘗試使用,未經效應(它會略低於vertex.geometry.y = this.vertexPosition.y;
在dragComplete
法):
this.layer.events.triggerEvent('vertexmodified', {
feature: this.feature,
vertex: vertex
});
this.layer.events.triggerEvent('featuremodified', {
feature: this.feature
});
this.layer.events.triggerEvent('refresh');
this.onModification(vertex);
this.onModification(this.feature);
this.layer.drawFeature(vertex);
this.layer.redraw();
這一切都不工作。有沒有辦法讓這些處理程序更新?