2012-08-25 126 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