如何在特征几何形状更改时收到通知?

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);

你应该可以在那里做你想做的事。