2016-05-24 3 views
2

リーフレットの標準"layer control"を使用します。インスタンス化は次のようになります。リーフレットレイヤーコントロール:オーダー

this.controls[id] = L.control.layers({}, {}, { 
    collapsed: false 
}); 

(xhr要求が完了した時点によって異なります)レイヤーは動的に、ランダムな順序で追加されます。しかし、リーフレットの暗黙性は、レイヤーコントロール内での順序付けのために各レイヤーの_leaflet_idを使用しているため、レイヤーはランダムな順序で表示されるようです。

リーフレットにどのような順序でレイヤーを表示する必要がありますか?例えば。 .addOverlayまたは.addBaseLayerのメソッドを呼び出すときにいくつかの追加パラメータを渡しますか?

リーフレットのバージョンは1.0-devの

+0

http://gis.stackexchange.com/questions/20331/how-to-change-leaflet-map-panes-layering-order-z-indexに似ていますか? – YaFred

+0

いいえ、上記の投稿はマップ自体のレイヤーの順番です。私が言っているのは、レイヤー**コントロール**のオーダーです。可視レイヤーを有効または無効にすることができるもの。 – newBee

答えて

0

私は問題のいくつかのハック・修正を見つけています。しかし、これはクリーンなソリューションではありませんので、より良い回答を投稿してください。

リーフレットは、レイヤオブジェクトの_leaflet_idをソートに使用します。したがって、最初に作成されたレイヤーは常に上になります。レイヤーをソートするには、レイヤー/フィーチャーグループ内の実際のレイヤーをラップする必要があります。

プログラムによる
|- dummy layer group 
    |- some dummy geojson layer 
    |- your actual layer (will be added later) 

var oFeatureGroup = L.featureGroup([ 
    L.geoJson({ 
     "type": "FeatureCollection", 
     "features": [] 
    }) 
]); 

その後、我々はいくつかの非同期読み込みを行うと、我々は準備ができていたら、私たちはにレイヤーを追加 - 多かれ少なかれ空 - 層群:

oFeatureGroup.addLayer(oMyMagicAsyncLoadedLayer) 

私たちは、レイヤーコントロールにレイヤーを追加することができ、レイヤーがoMyMagicAsyncLoadedLayerの代わりにoFeatureGroupレイヤーの作成順序に依存する場合は、「期待どおり」にソートされます。

+0

ダミーgeojson層を持つ必要はないと思います。ちょうど空の 'FeatureGroup'(あるいは単に' LayerGroup')がそのトリックをするべきです。 – IvanSanchez

+0

明らかに空のfeatureGroupを作成できますが、_leaflet_idは取得されません。有効なgeoJSONレイヤー(leaflet_idを持つ)を追加すると、リーフレットはfeatureGroup自体にIDを割り当てることになります。 – newBee

+1

私は 'L.Control.Layers'のLeaflet 0.7.xコードを見ています。追加されると、すべてのレイヤーは' L.Util.stamp() '処理を受け取ります。リーフレット1.0.0-rc1では、内部レイヤーIDはまったく使用されず、レイヤーコントロールは追加された順序を使用します。 – IvanSanchez

関連する問題