【问题标题】:Open Layers 3: How to create listener for a modify interaction打开第 3 层:如何为修改交互创建侦听器
【发布时间】:2014-07-13 20:18:35
【问题描述】:

我已经设法设置了修改交互。

ol.interaction.Modify (http://ol3js.org/en/master/apidoc/ol.interaction.Modify.html) 的文档没有提及修改功能时触发的单个事件。

不像 ol.interaction.Draw (http://ol3js.org/en/master/apidoc/ol.interaction.Draw.html),它工作得很好。

当一个特征被修改时,我需要更新数据库中的坐标。

如何设置监听器?

【问题讨论】:

  • 文档最近是否可能发生了变化。我在修改文档下看到 on(type, listener, opt_this)?
  • 那是以前的。但是使用 .on('change') 不起作用。我在这里找到了一个相当复杂的解决方案:boundlessgeo.com/2014/06/openlayers-editing-wfs-t。它通过监听功能本身的变化来工作
  • 这看起来很合理,实际上。您是否要发布某种我可以+1的有效答案? OpenLayers 3 文档目前自然有点薄,因为他们正在全力以赴完成代码,我想很多人会想知道一些旧的控件、拖动、修改和它们各自的回调是如何工作的。

标签: openlayers-3


【解决方案1】:

我找到了解决办法。

高级解释在这里:http://boundlessgeo.com/2014/06/openlayers-editing-wfs-t/

基本上,您不会听到修改交互中的变化(就像您在绘制交互中所做的那样)。相反,您可以聆听所选功能本身的变化。

这是一个简短的摘录:

// get the features from the select interaction
var selected_features = select_interaction.getFeatures();
// when a feature is selected...
selected_features.on('add', function(event) {
    // get the feature
    var feature = event.element;
    // ...listen for changes on it
    feature.on('change', function(event) {
        // got it!
    });
});

这是一个完整的工作示例:http://codepen.io/barbalex/pen/fBpyb

【讨论】:

  • 看起来 uid() 函数没有正常工作。我错了吗?
【解决方案2】:

为此,您必须使用如下:

feature.once('change', function(bool) {if (bool) {document.getElementById('my_input_text').value='feature changed'}})

您必须使用 'once' 而不是 'on' 以避免多次检查并使用布尔变量来检查功能是否已更改。

希望有帮助

【讨论】:

    猜你喜欢
    • 2013-03-04
    • 2021-09-12
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多