【发布时间】: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