9

我不知道为什么这不起作用。我认为答案非常简单。在添加新图层之前,我需要删除图层。

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

它只是不断地堆积在层上,而不是去除任何东西。有什么帮助吗?

4

3 回答 3

15

您的声明将始终评估为 false,因为您每次运行该部分代码时都if重新声明。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);
}
于 2012-08-25T23:35:28.680 回答
10

使用map.getLayersByName(layerName)获取图层。您可能需要跟踪某个数组或其他内容中的图层名称

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

如果需要,您可以将此解决方案外部化到不同的功能中,并且它可以工作。

于 2012-11-30T13:31:57.050 回答
0

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

于 2014-01-23T02:06:19.510 回答