正如您所提到的,“层”是一个来自更广泛范围的概念,而不仅仅是 Leaflet 实现。
它是地理空间数据上下文中“收集”的抽象概念。
层也是一个替代名称,但我看到“层”在多种标准和技术中的使用更多。
这里的第一行描述得很简单:
https://doc.arcgis.com/en/arcgis-online/reference/layers.htm
在 Leaflet 的上下文中,您可以拥有任意多的层,而不必“备用”它们。
除了考虑优化技术实现之外,我还努力尝试将“层”(根据您的业务领域)识别为属于一起的地理空间数据的逻辑组。
具体查看L.GeoJSON.addGeoJSON(geojson),它读取到创建的每个新多边形都放置在自己的图层中(然后可能与您调用该方法的图层合并?)。
- 一个 Leaflet 层 => 一个 GeoJSON 特征(或一组特征,假设
FeatureCollection 扩展了 Feature)。
- 不会合并:当您添加 GeoJSON 数据时,Leaflet 将用新生成的地理空间数据替换整个图层。自定义实现可能可以合并,但我不知道是否可取。
我的用例是我需要一次添加许多 geoJSON 对象,并希望确保我不会创建许多不必要的层(或者如果我创建了,如果这实际上是一件坏事)。
本身并不是一件坏事,有很多层;只要不出现具体性能问题。
如果您想减少层数,请努力对 GeoJSON 的结构进行建模,以便大多数相关对象包含在单个 GeoJSON/Layer(按域分组)中,而不是为每个单独的对象设置一个层(按技术实现分组)。
例如与“风险区域”相关的层
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"title": "virus spread area",
"risk": "high"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
114.521484375,
30.89279747750818
],
[
113.89251708984374,
30.64972717137329
],
[
114.28253173828124,
30.21635515266855
],
[
114.521484375,
30.89279747750818
]
]
]
}
},
{
"type": "Feature",
"properties": {
"name": "Wuhan Institute of Virology",
"risk": "high"
},
"geometry": {
"type": "Point",
"coordinates": [
114.35462951660156,
30.543338954230222
]
}
}
]
}
而不是为多边形设置一层:
{
"type": "Feature",
"properties": {
"title": "virus spread area",
"risk": "high"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
114.521484375,
30.89279747750818
],
[
113.89251708984374,
30.64972717137329
],
[
114.28253173828124,
30.21635515266855
],
[
114.521484375,
30.89279747750818
]
]
]
}
}
还有一个单独的(但实际上相关的)用于 Point:
{
"type": "Feature",
"properties": {
"name": "Wuhan Institute of Virology",
"risk": "high"
},
"geometry": {
"type": "Point",
"coordinates": [
114.35462951660156,
30.543338954230222
]
}
}
(恕我直言)两个特征在概念上属于同一层。