2014-09-26 76 views
4

删除该功能会很感激以下问题的任何及所有的帮助:的OpenLayers 3删除功能不会从地图

我使用的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); 
} 

在此先感谢!

编辑:发现的人一个解决办法谁遇到了同样的问题 - 调用矢量源清楚之前设置的所有以前绘制的特色几何与没有COORDS点,如下所示:

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

回答

4

不知道有没有什么帮助,但我有一个相关的问题:

我写了一段代码,这工作得很好“重置”绘图层。您可以先使用onDrawStart触发该功能,然后再启动绘图部分。

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

这适用于最新OL3建造(编辑:这在当时是V3.0.0)

+0

搞不清我跟随..到底是什么select_interaction?至于在矢量源上调用clear(),它似乎并没有擦除多边形(至少在当时使用的ol.js构建中 - 是否在以下版本中已修复) - 它们仍然可见,尽管有一个稍微更透明的背景 – MS86 2014-11-12 18:53:07

+0

对不起,也许我应该更详细地解释。在我的情况下,“select_interaction”是ol.interaction.Select的变量。像这里一样(http://openlayers.org/en/master/apidoc/ol.interaction.Select.html)。调用清除为我工作,我正在使用最新的ol版本。 – stopopol 2014-11-12 19:41:56

+0

我不确定你使用的是哪个ol3版本,但下面的[draw-features](http://openlayers.org/en/master/examples/draw-features.html)适用于我:'draw。 on('drawstart',function(){vector.getSource()。clear();});'。 – erilem 2014-11-12 22:24:47