我试图从OpenLayers 4地图中删除一系列特征。 我不想清除源中的所有功能。向阵列中添加了一些选定的功能。
目前,正在迭代数组并使用它。source.removeFeature(array[index]);
除了多次循环之外,还有什么方法可以一次删除数组中的特征?
注意:我不想删除源中的所有功能,而只想删除 我已添加到数组中的功能
法典:
var docketSource = new ol.source.Vector({
url: dataUrl,
format: new ol.format.TopoJSON()
});
var redFeatures = [];
function removeRedFeature(redFeatures) {
for (var i = 0; i < redFeatures.length; i++) {
docketSource.removeFeature( redFeatures[i] );
}
}
您的解决方案是一个解决方案,但您也可以使用返回ol.Feature
sol.Collection
的docketSource.getFeaturesCollection()
。然后,您可以操作返回的集合并使用函数remove
所以,你可以做docketSource.getFeaturesCollection().remove(yourfeature);
但是,如果需要循环访问集合,则将使用集合forEach
方法,该方法类似于解决方案。
看看ol.Collection
方法,看看它们是否更适合你的目的。
假设您的source
是ol.source.Vector
,您可以通过执行以下操作来执行clear()
:
source.clear()
我对你的问题有点困惑,但你提到了"选定的功能"。也许这就是你所追求的?
var select = new ol.interaction.Select();
select.getFeatures().forEach(function(feature){
docketSource.removeFeature(feature);
});
有关详细信息,请参阅 http://openlayers.org/en/v3.0.0/apidoc/ol.source.Vector.html#clear。
更新:OL 2.13.1中有一个removeFeatures
函数。
删除功能:功能(功能,选项(
从图层中移除要素。 这将拭除所有绘制的要素,并将其从图层的控制中移除。 将为每个功能触发之前的功能删除和功能删除事件。 删除所有功能后,将触发功能删除事件。 要禁止事件触发,请使用静默选项。
请参阅:http://dev.openlayers.org/releases/OpenLayers-2.13.1/doc/apidocs/files/OpenLayers/Layer/Vector-js.html#OpenLayers.Layer.Vector.removeFeatures
removeFeature 是唯一从 ol.source.Vector 中删除某些功能的 API 函数。(见 https://github.com/openlayers/openlayers/blob/v4.6.5/src/ol/source/vector.js(
如果你遇到触发大量事件或类似事件的问题,你可以扩展 ol.source.Vector 类并实现一个 removeFeatures 函数,例如修改 clear 函数或将 clear 与 removeFeature 合并。