20

传单映射库中的a 到底layer代表什么?

从概念上讲,对我来说,一层代表某种类型的特征或对象的单层;例如,表示基本地图的所有图像瓦片将在单个图层上表示,一组表示美国各州的多边形可能在它们自己的单独图层上。

具体L.GeoJSON.addGeoJSON(geojson)来看,它读取创建的每个新多边形都放置在它自己的图层中(然后可能与您调用该方法的图层合并?)。我的用例是我需要一次添加许多 geoJSON 对象,并希望确保我不会创建许多不必要的层(或者如果我是,如果这实际上是一件坏事)。

谢谢你。

4

2 回答 2

31

在 Leaflet 中,可以添加到地图的任何内容都是图层。所以多边形、圆形、标记、弹出窗口、瓷砖都是图层。L.LayerGroup例如,如果您想将一组多边形视为单个图层,则可以将图层组合在一个(或 FeatureGroup)中。因此,也许您对层的解释与L.LayerGroupLeaflet 中的模型更匹配。

L.GeoJSON是从 GeoJSON 初始化的 LayerGroup(特别是 FeatureGroup)。使用 addLayer将每个新多边形添加到L.GeoJSONLayerGroup,这是将任何东西(即图层)添加到LayerGroup. 它不会为每个多边形创建一个新层(除了L.Polygon已经被认为是一个层的那个)。它只为 GeometryCollection 和 MultiPoints 创建新的 FeatureGroups(LayerGroups),(我假设)是为了保留 GeoJSON 的结构。

如果您想一次将 geoJSON 对象添加到同一个 LayerGroup,您可以调用L.GeoJSON.geometryToLayer转换您的 GeoJSON 对象,然后使用L.LayerGroup.addLayer.

于 2012-05-03T11:54:14.653 回答
0

正如您所提到的,“层”是一个来自更广泛范围的概念,而不仅仅是Leaflet实现。

它是地理空间数据上下文中“收集”的抽象概念。也是一个替代名称,但我看到在几种标准和技术中更多地使用“层”

这里的第一行描述它足够简单:
https ://doc.arcgis.com/en/arcgis-online/reference/layers.htm


Leaflet的上下文中,您可以拥有任意数量的层,并且没有必要“备用”它们。
除了考虑技术实现的优化之外,我还努力尝试将“层”(根据您的业务领域)识别为属于一起的地理空间数据的逻辑组。

具体来说L.GeoJSON.addGeoJSON(geojson),它读取创建的每个新多边形都放置在自己的图层中(然后可能与您调用该方法的图层合并?)。

  • 一个 Leaflet 层 => 一个 GeoJSON 特征(或一组特征,假设为FeatureCollectionextends 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
        ]
    }
}

(恕我直言)两个特征在概念上属于同一层。

于 2021-08-31T13:50:12.233 回答