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

コードのその部分を実行するたび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);
}
于 2012-08-25T23:35:28.680 に答える
10

map.getLayersByName(layerName)レイヤーの取得を使用します。いくつかの配列または何かでレイヤーの名前を追跡する必要があるかもしれません

このメソッドは配列を返すため、レイヤーの配列を調べて を使用しますmap.removeLayer(layer)

必要に応じて、このソリューションを別の機能で外部化でき、機能します。

于 2012-11-30T13:31:57.050 に答える
0

実験的に、レイヤーを削除してもクライアント ブラウザーのメモリがクリーンアップされないことがわかりました (私の場合、firefox で約 2GB のメモリを取得するのは約 200 の wms レイヤーです)。したがって、私にとってうまくいった唯一の方法は、wms レイヤーを 1 つだけ作成して、mergeNewParams を実行することです。それが役立つことを願っています。

于 2014-01-23T02:06:19.510 に答える