【问题标题】:Leaflet: How to specifiy order of overlays in the layers control?传单:如何在图层控件中指定叠加顺序?
【发布时间】:2015-11-11 17:00:08
【问题描述】:

是否可以在图层控件中对叠加层进行排序?

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

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

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

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

- Bananas
- Apples
- Peaches

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

谢谢。

【问题讨论】:

    标签: leaflet mapbox


    【解决方案1】:

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

    解释是图层控件通过其“标记”(使用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% 的可靠性。

    话虽如此,在我测试过的所有浏览器中,顺序都是按照自然数顺序的,所以从今天开始,这个技巧有效。

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

    【讨论】:

    • 完美!效果很好!
    • 只是一个观察:这似乎在 FireFox (38.2.1) 中不起作用,但 Chrome 和 IE 都可以。
    • 该死的,我很想看到它以不同的顺序迭代!请问你能做一个jsfiddle给我看吗?我的 Firefox 仍然以正常的数字顺序 (jsfiddle.net/ve2huzxw/22) 进行迭代。你有哪个版本的FF和OS?
    • 我有大约 28 多个正在切换的变量,所以我将尝试看看如何移植一个示例。很快就会发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2013-06-25
    • 2019-01-28
    相关资源
    最近更新 更多