如何按名字删除层 - 的OpenLayers 3

问题描述:

我是wkt源添加矢量层与下面的代码映射:如何按名字删除层 - 的OpenLayers 3

var SelectVector = null; 

for (var i = 0; i < wktarray.length; i++) { 
    var wkt = wktarray[i]; 
    var format = new ol.format.WKT(); 
    var feature = format.readFeature(wkt, { 
     dataProjection: 'EPSG:4326', 
     featureProjection: 'EPSG:4326' 
    }); 
    SelectVector = new ol.layer.Vector({ 
     source: new ol.source.Vector({ 
      features: [feature] 
     }),style: new ol.style.Style({ 
      fill: new ol.style.Fill({ 
       color: 'rgba(255, 255, 255, 0.2)' 
      }),
  stroke: new ol.style.Stroke({ 
       color: '#ffcc33',
     width: 2 
      }),
 image: new ol.style.Circle({ 
       radius: 7, 
       fill: new ol.style.Fill({ 
        color: '#ffcc33' 
       }) 
      }) 
     }) 
    }); 
    map.addLayer(SelectVector); 
    SelectVector.set('name', 'selectvector'); 
} 

现在,我想从地图中删除此矢量图层。在下面的代码中写道,但是,它不会删除所有带有selectvector名称的图层。

map.getLayers().forEach(function (layer) { 
    if (layer.get('name') != undefined & layer.get('name') === 'selectvector') { 
     map.removeLayer(layer); 
    } 
}); 

有什么不对?

我认为问题在于removeLayer会更改您正在循环的相同集合。这样

var layersToRemove = []; 
map.getLayers().forEach(function (layer) { 
    if (layer.get('name') != undefined && layer.get('name') === 'selectvector') { 
     layersToRemove.push(layer); 
    } 
}); 

var len = layersToRemove.length; 
for(var i = 0; i < len; i++) { 
    map.removeLayer(layersToRemove[i]); 
} 

尝试财产以后还请注意,你在你的,如果条件缺少“&”。

+0

非常感谢。 – Farzaneh

像fradal83指出,你正在改变收藏,而骑自行车。

而不是从第一个骑自行车,你可以反转它(从最后一个开始到第一个)。这样,删除一个项目不会影响循环。