【问题标题】:Leaflet Layer Control: Ordering传单层控制:排序
【发布时间】:2016-05-24 14:23:06
【问题描述】:

我们使用 Leaflet 中的标准 "layer control"。实例化如下:

this.controls[id] = L.control.layers({}, {}, {
   collapsed: false
});

图层以随机顺序动态添加(取决于 xhr 请求何时完成)。然而,leaflet 似乎隐含地使用相应层的 _leaflet_id 在层控制中进行排序,因此我们的层以随机顺序出现。

有没有办法告诉传单它应该以什么顺序显示控件中的图层?例如。通过在调用.addOverlay.addBaseLayer 方法时传递一些附加参数?

Leaflet 版本是 1.0-dev

【问题讨论】:

标签: leaflet


【解决方案1】:

我为这个问题找到了一些 hack-fix。但是,这不是一个干净的解决方案,因此请随时发布更好的答案。

Leaflet 使用图层对象的 _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 的创建顺序。

【讨论】:

  • 我不认为你需要一个虚拟的 geojson 层——一个空的FeatureGroup(或者甚至只是一个LayerGroup)就可以了。
  • 显然,您可以创建一个空的 featureGroup,但它不会获得 _leaflet_id。添加一个有效的geoJSON-Layer(将有一个leaflet_id)将导致leaflet 也为featureGroup 本身分配一个ID。
  • 我正在查看 L.Control.Layers 的 Leaflet 0.7.x 代码,所有层在添加时都会得到 L.Util.stamp() 处理。在 Leaflet 1.0.0-rc1 中,根本不使用内部层 ID,并且层控件使用它们添加到其中的顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多