无法删除OpenLayers 3中的功能

时间:2016-01-26 15:20:48

标签: javascript openlayers-3

我在stackoverflow上读过几十个线程,但没有一个帮助。所以,这就是我尝试做的事情:

features.forEach(function(feature){
    source.removeFeature(feature); 
    console.log("removed");
    console.log(feature);
});

因此,当我只选择了一个功能时,我会在控制台中看到这些消息:

removed Controller.js:525:8
Object { disposed_: false, onDisposeCallbacks_: undefined, ...}

就我在控制台中看到的而言,一切看起来都不错。但问题是该功能未从地图中删除。

修改

现在它更有趣了。如果我使用getArray将要素转换为数组并执行此操作:

 for(var i=0,len=features.length;i<len;i++){
    var feature = features[i];
    source.removeFeature(feature);
 }
 source.clear();

如果我有很多功能且只选择了一个功能,那么在这种情况下,只保留此选定功能,并删除所有其他功能。到底是怎么回事?

2 个答案:

答案 0 :(得分:2)

我有这个问题很长一段时间,我无法理解。事实证明,它似乎是OpenLayers中的一个刷新问题。我发现让图层刷新的方法是让它不可见,然后再次可见。

以下是我用来解决问题的代码(在AngularJS中):

vectorLayer.getSource().removeFeature(feature);
$timeout(function() {
    vectorLayer.setVisible(false);
    vectorLayer.setVisible(true);
}, 10);

如果您不使用Angular,请使用以下内容:

vectorLayer.getSource().removeFeature(feature);
vectorLayer.setVisible(false);
vectorLayer.setVisible(true);

答案 1 :(得分:1)

我有类似的问题。重复调用setVisible对我不起作用。

如果从图层中删除所选要素,则会将其删除,但仍会显示。它不会被删除&#34; Visually&#34;直到你选择别的东西。

我做了什么:

// collection that will contain all selected features
var selectFeatures = new ol.Collection();
// setting up the select interaction
var selectInteraction = new ol.interaction.Select({
  features: selectFeatures
});

// custom event to clear all selections
selectInteraction.on('clearSelections', function() {
   selectedFeatures.clear();
});



removeSomeFeaturesFromLayer() {
   // dispatch the event first
   selectInteraction.dispatchEvent({
      type: 'clearSelections'
   });

   /* 
    * NOW LOOP THROUGH THE FEATURES IN THE LAYER
    * AND REMOVE WHATEVER ONES YOU WANT
    */

}

我希望有所帮助。