在OpenLayers中删除图层

时间:2012-08-25 22:15:05

标签: javascript 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);   

它只是在层上堆积而不是删除任何层。有什么帮助吗?

3 个答案:

答案 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。 希望它会有所帮助。