質問

Leaflet.jsライブラリを使用して統計データに基づいて複数のマップを作成します。各マップにはさまざまな範囲の値が表示されるため、ユーザーがマップを変更したときに凡例を変更するのがいいでしょう。

この質問、しかし、必要なものが必要です2つ以上のレイヤーを切り替えるには。私は単にコード内の論理演算子と論理演算子をさらに追加してみましょうが、正しい作業を行いません:

map.on('baselayerchange', function (eventLayer) {
    if (eventLayer.name === 'Agricultural') {
        map.removeControl(VODlegend || BUDlegend || LISlegend);
        SGlegend.addTo(map);
    }
    else if  (eventLayer.name === 'Building') {
        map.removeControl(SGlegend || LISlegend || VODlegend);
        BUDlegend.addTo(map);
    }
    else if  (eventLayer.name === 'Forest') {
        map.removeControl(BUDlegend || VODlegend || SGlegend);
        LISlegend.addTo(map);
    }
    else if  (eventLayer.name === 'Water') {
        map.removeControl(LISlegend || SGlegend || BUDlegend);
        VODlegend.addTo(map);
    }
  })
.

JSfiddleでのマップの例です。 私はあらゆる助けに感謝します。

役に立ちましたか?

解決

VodleGend ||BudleGend ||LisleGend

JavaScriptでは、これは条件(結果が真またはfalseです)です...あなたが期待するようにリストではありません

そのようなあなたの現在のコントロールを追跡する必要があります

SGlegend.addTo(map);
currentLegend = SGlegend;


map.on('baselayerchange', function (eventLayer) {
    if (eventLayer.name === 'Agricultural') {
        map.removeControl(currentLegend );
        currentLegend = SGlegend;
        SGlegend.addTo(map);
    }
    else if  (eventLayer.name === 'Building') {
        map.removeControl(currentLegend );
        currentLegend = BUDlegend;
        BUDlegend.addTo(map);
    }
    else if  (eventLayer.name === 'Forest') {
       map.removeControl(currentLegend );
        currentLegend = LISlegend;
        LISlegend.addTo(map);
    }
    else if  (eventLayer.name === 'Water') {
       map.removeControl(currentLegend );
        currentLegend = VODlegend;
       VODlegend.addTo(map);
    }
  })
.

修正されたフィドルはここにあります: http://jsfiddle.net/franceImage/x678g/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top