2016-05-24 38 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