【问题标题】:OpenLayers 3 removing features does not remove the feature from the mapOpenLayers 3 删除要素不会从地图中删除要素
【发布时间】:2014-09-26 09:31:09
【问题描述】:

非常感谢您对以下问题的任何和所有帮助:

我正在使用 openlayers 3 来绘制多边形。我想要实现的目标如下 - 在开始绘制新多边形时 - 从地图中删除任何现有的多边形,以便在任何时候都只能绘制一个多边形。但是,会发生的情况是该要素(多边形)仅从内存中删除,但仍保持在地图上可见。

这个 jsfiddle 演示了这个问题: http://jsfiddle.net/jp4dojwu/

如您所见,onDrawStart 我首先清除 tempVectorSource(绘制多边形的位置,因为 featureOverlay.source===tempVectorSource),然后提醒 tempVectorSource 的特征数量。正如预期的那样,警报将始终指示 0,但多边形仍然在地图上可见。

function onDrawStart(event)
{
     //remove everything drawn previously
     tempVectorSource.clear();

     //can see the feature(s) are removed from memory
     alert(tempVectorSource.getFeatures().length);
}

提前致谢!

编辑:为遇到相同问题的任何人找到了一种解决方法 - 在矢量源上调用 clear 之前,将所有先前绘制的特征的几何图形设置为没有坐标的点,如下所示:

function onDrawStart(event)
{
    var features = tempVectorSource.getFeatures();
    for(var i=0;i<features.length;i++)
    {
        features[i].setGeometry(new ol.geom.Point([]));
    }
    tempVectorSource.clear();

}

上面基本上将所有多边形渲染成“不可见”的点。不过仍然很想找到真正的解决方案!

编辑(2):请在接受的答案下方查看我的评论,我已将 featureOverlay 设置为形状所在的地图实例。删除以下行可以解决问题,因为 featureOverlay 有自己的形状副本:

featureOverlay.setMap(map);

【问题讨论】:

    标签: javascript openlayers


    【解决方案1】:

    不知道这是否有帮助,但我遇到了一个相关的问题:

    我编写了那段代码,它可以很好地“重置”绘图层。您可以先使用 onDrawStart 触发该功能,然后启动绘图部分。

    function clearMap() {
      vector_layer.getSource().clear();
      if (select_interaction) {
        select_interaction.getFeatures().clear();
      }
    }
    

    这适用于最新的 ol3-build(编辑:当时是 v3.0.0)

    【讨论】:

    • 不太确定我是否遵循.. select_interaction 到底是什么?至于在矢量源上调用 clear() ,它似乎并没有擦除多边形(至少在当时使用的 ol.js 构建中 - 它是否已在以下版本中修复?) - 它们仍然可见,尽管带有背景稍微透明
    • 对不起,也许我应该更详细地解释一下。在我的例子中,“select_interaction”是 ol.interaction.Select 的变量。喜欢这里(openlayers.org/en/master/apidoc/ol.interaction.Select.html)。调用 clear 对我有用,我使用的是最新的 ol 版本。
    • 我不确定您使用的是什么 ol3 版本,但以下在 draw-features 示例中适用于我:draw.on('drawstart', function() { vector.getSource().clear(); });
    • 上面的 jsfiddle 直接从 openlayers.org/en/v3.0.0/build/ol.js 获取 ol.js v3.0.0 - 从小提琴可以看出,矢量源上的 .clear() 出于某种原因实际上并没有删除可见的地图上的多边形 - 我在做傻事吗?编辑:是的,我是 :) 我将 featureOverlay 设置为地图的实例.. D'Oh!谢谢大家!
    • vector_layer.getSource().clear(); 清除此来源的所有功能,而不仅仅是选定的功能。
    猜你喜欢
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多