【问题标题】:How to remove layers by name - openlayers 3如何按名称删除图层 - openlayers 3
【发布时间】:2017-10-17 08:11:21
【问题描述】:

我添加了带有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);
    }
});

怎么了?

【问题讨论】:

    标签: openlayers openlayers-3


    【解决方案1】:

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

    另请注意,您的 if 条件中缺少“&”。

    【讨论】:

      【解决方案2】:

      就像 fradal83 指出的那样,您正在骑自行车时更改收藏。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多