我使用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);
}
});
怎么了?
我认为问题在于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]);
}
还请注意,如果条件中缺少“&”。
[就像fradal83指出的那样,您在骑自行车时正在更改收藏。
您可以颠倒它(而不是从第一个开始循环(从最后一个开始直到第一个)。这样,删除项目不会影响循环。