2016-05-24 37 views
2

我們使用Leaflet的標準"layer control"。 Instantiation如下:傳單層控制:訂購

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) 

我們然後可以將該圖層添加到圖層控件,並將按照「預期」進行排序,其中訂單取決於oFeatureGroup圖層的創建順序,而不是oMyMagicAsyncLoadedLayer

+0

我不認爲你需要一個虛擬geojson層 - 只是一個空的'FeatureGroup'(或者甚至只是一個'LayerGroup')應該做的伎倆。 – IvanSanchez

+0

顯然,您可以創建一個空的featureGroup,但它不會得到_leaflet_id。添加一個有效的geoJSON-圖層(將有一個leaflet_id)將導致傳單爲特徵組本身分配一個ID。 – newBee

+1

我正在查看'L.Control.Layers'的Leaflet 0.7.x代碼,並且所有圖層在添加時都會獲得L.Util.stamp()'處理。在Leaflet 1.0.0-rc1中,根本不使用內部圖層ID,圖層控件使用它們添加到它的順序。 – IvanSanchez