我不知道为什么这不起作用。我认为答案非常简单。我需要在添加新图层之前删除图层。
if (graphic) {
window.map.removeLayer(graphic);
}
var graphic = new OpenLayers.Layer.Image(
'Sightline'+''+SC,
url,
new OpenLayers.Bounds(derWesten[0].firstChild.nodeValue,derSueden[0].firstChild.nodeValue,derOsten[0].firstChild.nodeValue, derNorden[0].firstChild.nodeValue),
new OpenLayers.Size(0,0),
options
);
window.map.addLayer(graphic);
它只是在层上堆积而不是删除任何层。有什么帮助吗?
答案 0 :(得分:13)
您的if
语句将始终评估为false,因为每次运行该部分代码时都会重新声明graphic
。该变量是 hoisted ,在评估if
时,它的值将是未定义的。
您需要在不同的范围内声明变量:
var graphic;
function removeAddLayer() {
if (graphic) {
window.map.removeLayer(graphic);
}
graphic = new OpenLayers.Layer.Image( /* stuff */); // note: no 'var' in front of graphic
window.map.addLayer(graphic);
}
答案 1 :(得分:9)
使用map.getLayersByName(layerName)
获取图层。您可能需要跟踪某些数组中的图层名称
该方法返回一个数组,因此您将遍历图层数组
使用map.removeLayer(layer)
。
如果您愿意,可以将此解决方案外部化为不同的功能。
答案 2 :(得分:0)
实验上我发现删除一个图层不会清理客户端浏览器中的内存(在我的情况下,它是大约2百个wms图层,在firefox中获得大约2GB的内存)。 所以对我有用的唯一方法是只创建一个wms图层并mergeNewParams。 希望它会有所帮助。