传单:如何在图层控件中指定叠加顺序?

Leaflet: How to specifiy order of overlays in the layers control?

是否可以在图层控件中订购叠加层?

这是我的问题。当我对叠加层执行此操作时:

var overlays = {
"Apples": apples,
"Bananas": bananas,
"Peaches": peaches
};

L.control.layers(baseLayers, overlays).addTo(map);

Leaflet 以随机方式(由于迭代)将叠加层添加到地图上的图层控件:

- Bananas
- Apples
- Peaches

是否可以指定我想要显示叠加层的顺序? *(就我而言,我希望它按字母顺序排列。此外,我正在使用 Mapbox API)

谢谢。

我不确定 Mapbox API 是否更改了默认的图层控制代码/行为,但后者不提供按特定顺序显示叠加层的 100% 可靠方式。有关详细信息,请参阅 post

解释是图层控件通过 "stamp"(使用 L.stamp(myLayer) 创建的唯一标识整数)迭代叠加层。根据您的图层类型,此图章会在不同时刻自动分配。

您可以在实例化图层后立即强制创建它。例如你的情况:

var apples = L.layerGroup();
L.stamp(apples);

var bananas = L.layerGroup();
L.stamp(bananas);

var peaches = L.layerGroup();
L.stamp(peaches);

不幸的是,根据 JS 规范无法保证迭代顺序,因此不可能 100% 可靠地实现此行为。

也就是说,在我测试过的所有浏览器中,顺序都是按照自然数顺序排列的,所以从今天开始,这个技巧起作用了。

如果您想要更有信心,您应该寻找明确为您提供手动指定列表顺序功能的控件插件。