2012-08-25 84 views
4

我不知道为什么这不起作用。我会假设答案非常简单。我需要删除一个图层,然后再添加一个图层。删除OpenLayers中的图层

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

它只是在图层上堆积而不去除任何东西。任何帮助?

回答

10

您的if语句将始终评估为false,因为您每次运行该代码部分时都重新声明graphic。变量被吊起,当评估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); 
} 
+0

对我来说非常合适。谢谢! – g07kore

7

使用map.getLayersByName(layerName)拿到层。您可能需要跟踪某些阵列中的图层名称或其他东西

该方法返回一个数组,因此您会遍历图层数组,并使用使用map.removeLayer(layer)

如果您愿意并且工作正常,您可以将此解决方案外化为其他功能。

0

实际上,我发现删除图层并不会清理客户端浏览器中的内存(在我的情况下,它大约有2百个wms图层,可以在Firefox中获得大约2GB的内存)。 所以对我而言,唯一的方法是只创建一个wms图层并合并NewParams。 希望它会有所帮助。

+1

可能想分享一些代码吗? – F3L1X79