如何按名称删除图层 - openlayers 3

时间:2017-10-17 08:11:22

标签: openlayers openlayers-3

我添加了带有wkt来源的矢量图层,用以下代码进行映射:

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

出了什么问题?

2 个答案:

答案 0 :(得分:8)

我认为问题在于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]);
}

另请注意,您错过了&#34;&amp;&#34;在你的if条件下。

答案 1 :(得分:2)

就像fradal83指出的那样,你在骑车时正在改变这个系列。

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