如何在更改要素几何图形时收到通知?

时间:2016-11-03 19:43:08

标签: openlayers-3

ol.Feature OL3 API的文档声明它会触发'change:geometry'事件。该文档未指定何时触发此事件。

以下JSFiddle有一个使用ol.interaction.Translate移动矢量要素以移动要素的示例。在移动某个功能时,会触发“更改”事件,但不会触发“更改:几何”事件。

通知功能几何体已更新的正确方法是什么?

代码:

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

1 个答案:

答案 0 :(得分:1)

如果您更改几何对象,feature.setGeometry(aNewGeomObj)事件发生在要素级别,即如果您执行了此操作:feature.setGeometry(null)change等。

您正在寻找的是监听几何对象本身的var geometry = feature.getGeometry(); geometry.on('change', function(evt) { console.log(evt) }, this); 事件。你可以这样做:

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import java.io.File;
import java.io.IOException;
import java.util.Map;

public class Parser {

    public static void main(String[] args) throws IOException {
        File input = new File("input.txt");
        Map<String, Object> jsonFileAsMap = new ObjectMapper().readValue(input, new TypeReference<Map<String, Object>>() {});

        Map<String, Object> ratesMap = (Map<String, Object>) jsonFileAsMap.get("rates");
        ratesMap.forEach((k, v) -> System.out.println("Key = " + k + ", Value = " + v));
    }
}

你应该能够从那里做你想做的事。