在OpenLayers中删除图层

Mit*_*ram 8 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);   
Run Code Online (Sandbox Code Playgroud)

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

bat*_*koo 14

您的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);
}
Run Code Online (Sandbox Code Playgroud)


小智 9

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

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

如果需要,可以将此解决方案外部化为不同的功能.