如何在特征几何形状更改时收到通知?
How to be notified when a Feature geometry is changed?
ol.Feature OL3 API 的文档指出它会触发 'change:geometry' 事件。文档未指定何时触发此事件。
下面的JSFiddle有一个使用ol.interaction.Translate移动特征的移动矢量特征的例子。移动要素时,会触发 'change' 事件,但不会触发 'change:geometry' 事件。
获知要素几何已更新的正确方法是什么?
代码:
var select = new ol.interaction.Select();
select.on('select', (event) => {
event.selected.forEach((selectedFeature) => {
selectedFeature.on('change', (event) => {console.log('change', event)})
selectedFeature.on('change:geometry', (event) => {console.log('change:geometry', event)})
})
})
var translate = new ol.interaction.Translate({
features: select.getFeatures()
});
如果您更改几何对象,则 change:geometry
事件会在要素级别发生,即如果您这样做:feature.setGeometry(aNewGeomObj)
、feature.setGeometry(null)
等
您正在寻找的是侦听几何对象本身的 change
事件。你可以这样做:
var geometry = feature.getGeometry();
geometry.on('change', function(evt) {
console.log(evt)
}, this);
你应该可以在那里做你想做的事。
ol.Feature OL3 API 的文档指出它会触发 'change:geometry' 事件。文档未指定何时触发此事件。
下面的JSFiddle有一个使用ol.interaction.Translate移动特征的移动矢量特征的例子。移动要素时,会触发 'change' 事件,但不会触发 'change:geometry' 事件。
获知要素几何已更新的正确方法是什么?
代码:
var select = new ol.interaction.Select();
select.on('select', (event) => {
event.selected.forEach((selectedFeature) => {
selectedFeature.on('change', (event) => {console.log('change', event)})
selectedFeature.on('change:geometry', (event) => {console.log('change:geometry', event)})
})
})
var translate = new ol.interaction.Translate({
features: select.getFeatures()
});
如果您更改几何对象,则 change:geometry
事件会在要素级别发生,即如果您这样做:feature.setGeometry(aNewGeomObj)
、feature.setGeometry(null)
等
您正在寻找的是侦听几何对象本身的 change
事件。你可以这样做:
var geometry = feature.getGeometry();
geometry.on('change', function(evt) {
console.log(evt)
}, this);
你应该可以在那里做你想做的事。