2

マップボックスとタイルミル レイヤーの問題があります。

ここで私のコードをチェックしてください: http://bl.ocks.org/marishaf/3cc9bfbeb412c1120e93

レイヤー ボタンは常に「アクティブ」モードにあるように見えますが、レイヤーのロードとアンロードは引き続き行われます。

凡例はレイヤーごとに読み込まれます (Public Land レイヤーと Zoning レイヤーには凡例が存在します) が、両方を読み込んでから両方のレイヤーを削除しようとすると、最初に読み込まれたレイヤーの凡例が保持されます。

凡例はツールチップでも持続します。たとえば、最初に凡例を含むレイヤーをロードし (レイヤーがこの順序でロードされた場合にのみ発生します)、次にツールチップを含むレイヤー (たとえば、ポイント ソース汚染) をロードし、ポイントの上にマウスを移動すると、ツールチップが呼び出され、次に凡例のあるレイヤーを削除しようとすると、凡例が残ります。

4

1 に答える 1

0
  1. 「link.className = 'active';」を削除 onclick関数の前。
  2. 「if (map.hasLayer(layer))」ステートメントを「else」ステートメントに似たものに変更します (「thelayer」の代わりに「layer」を使用し、「className」を 1 つだけ変更します)。

スニペット:

link.href = '#';
// remove line that was here
link.innerHTML = name;


link.onclick = function(e) {
    e.preventDefault();
    e.stopPropagation();

    if (map.hasLayer(layer)) {
        map.removeLayer(layer);
        map.removeLayer(gridlayer);
        // you had "thelayer", but it should be "layer":
        map.legendControl.removeLegend(layer.getTileJSON().legend);
        // change two lines that were here to the following:
        this.className = '';
    } else {
        map.addLayer(layer);
        map.addLayer(gridlayer);
        this.className = 'active';
        map.legendControl.addLegend(layer.getTileJSON().legend);

    }
       thelayer = layer;  

};

乱雑な説明で申し訳ありませんが、あなたは一度に 2 つの質問をしていました。これが私が考える最も明確な回答方法です。

于 2014-04-09T16:52:01.043 に答える