Leaflet 传单层控制:订购

Leaflet 传单层控制:订购,leaflet,Leaflet,我们使用传单上的标准。实例化如下: this.controls[id] = L.control.layers({}, {}, { collapsed: false }); 层是以随机顺序动态添加的(取决于xhr请求何时完成)。然而,传单隐式似乎在层控件中使用相应层的_-传单_id进行排序,因此我们的层以随机顺序出现 有没有办法告诉传单在控件中显示图层的顺序?例如,在调用.addOverlay或.addBaseLayer方法时传递一些附加参数 传单版本是1.0-dev我找到了一些解决问题的

我们使用传单上的标准。实例化如下:

this.controls[id] = L.control.layers({}, {}, {
   collapsed: false
});
层是以随机顺序动态添加的(取决于xhr请求何时完成)。然而,传单隐式似乎在层控件中使用相应层的_-传单_id进行排序,因此我们的层以随机顺序出现

有没有办法告诉传单在控件中显示图层的顺序?例如,在调用
.addOverlay
.addBaseLayer
方法时传递一些附加参数


传单版本是1.0-dev

我找到了一些解决问题的黑客补丁。然而,这不是一个干净的解决方案,所以请随意发布更好的答案

传单使用图层对象的_传单_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)

然后,我们可以将层添加到层控件中,它将按“预期”排序,其中顺序取决于自然组
层的创建顺序,而不是
myMagicasSyncloadedLayer

是否类似?否,上面的帖子是关于地图上层的顺序。我说的是图层控制中的顺序。你可以启用或禁用可见层。我认为你不需要一个虚拟的geojson层——只需要一个空的
FeatureGroup
(或者甚至只是一个
LayerGroup
)就可以了。显然,你可以创建一个空的FeatureGroup,但它不会得到一个“传单id”。添加一个有效的geojson层(具有传单id)将导致传单也为featureGroup本身分配id。我正在查看
L.Control.Layers
的传单0.7.x代码,所有层都获得
L.Util.stamp()
添加时的处理。在传单1.0.0-rc1中,根本不使用内部层ID,层控件使用它们添加到其中的顺序。