2013-05-30 8 views
8

2つのgeoJsonレイヤーがロードされています - 両方のレイヤーはテスト目的で同じデータですが、2つの異なるjsonファイルから描画されます。レイヤコントローラでレイヤのオン/オフを切り替えると、レイヤの描画順序が変わります。レイヤーのオン/オフを切り替えるときのレイヤー順序の変更

これは何が起こっているのですか?

私はJSFiddleに私のコードを入れている:http://jsfiddle.net/lprashad/ph5y9/10/とJSは以下の通りです:

//styling for watersheds_copy 
var Orange = { 
    "color": "#ff7800", 
     "weight": 5, 
     "opacity": 0.65 
}; 

var Water_Orange = L.geoJson(watersheds_copy, { 
    style: Orange 
}); 

Water_Orange.addData(watersheds_copy); 

//these are blue 
var Water_blue = L.geoJson(watersheds, {}); 
Water_blue.addData(watersheds); 

//This sets the inital order - last in layer list being on top. Except minimal - tile layer is always on bottom 
var map = L.map('map', { 
    center: [41.609, -74.028], 
    zoom: 8, 
    layers: [minimal, Water_Orange, Water_blue] 
}); 

var baseLayers = { 
    "Minimal": minimal, 
     "Night View": midnight 
}; 

//This controls the order in the layer switcher. This does not change draw order 
var overlays = { 
    "Water_Orange": Water_Orange, 
     "Water_blue": Water_blue 
}; 
L.control.layers(baseLayers, overlays).addTo(map); 

LP

+0

あなたのjsfiddleには何も表示されません。 –

+0

あなたのJSFiddleは動作しません。ただし、レイヤーコントロールを使用してオン/オフを切り替えると、レイヤーの順序が変わることはありません。 APIのL.Control.Layersセクションの 'autoZIndex'オプションを参照してください:http://leafletjs.com/reference.html#control-layers。このコントロールの外側でレイヤーを変更する可能性はありますか? –

+0

私はJSFiddleを修正しました:http://jsfiddle.net/lprashad/ph5y9/、ありがとう。私もautoZindexをtrueに設定しようとしましたが、これは役に立ちません。両方の流域レイヤーをオフにしてから、青いレイヤーをオンにし、レイヤーコントロールのオレンジ色のレイヤーをオンにすると、マップの初期化時とは異なるレイヤーでレイヤーが表示されます。 – Lee

答えて

0

それはL.GeoJson層に固有ではありません。私が知る限り、レイヤーコントロールを備えたすべてのリーフレットレイヤーに当てはまります。最後にオンになったレイヤーが上に表示されます。私はこれもバグだとは思わない。私が使用する予測可能な振る舞いで、レイヤーコントロールで地図をデザインするときに...

+0

私は、ポリゴンの底部にあるポイントをクリックしようとすると、非常に混乱していると感じるでしょう。リストの上のレイヤーは、ユーザーが上に描画することが期待されます(GISデスクトップソフトウェア製品のように)。 – jbchurchill

1

少なくとも0.7.2で、map.on('overlayadd')のコールバックでbringToFrontを使用しなければなりませんでした。 autoZIndex: falseは私の場合でもうまくいきませんでした。その理由を説明するのがA comment on this issueかもしれません。

2

私はリーフレットコードの一部を示し、このサイト上に起こっ検索中:それは http://ruby-doc.org/gems/docs/l/leaflet-js-0.7.0.3/lib/leaflet/src/control/Control_Layers_js.html

私はautoZIndexの用途のためにこの条件が見つかりました:

if (this.options.autoZIndex && layer.setZIndex) { 
      this._lastZIndex++; 
      layer.setZIndex(this._lastZIndex); 
    } 

TileLayerが唯一の層タイプですそれはsetZIndex関数を持っているので、明らかにautoZIndexはそこでのみ動作します。

もっと迷惑をかけることはわかりません。この信じられないほどの制限、またはLeafetのドキュメントではそれを指摘していないという事実。

関連する問題