【问题标题】:Definition of a Leaflet layerLeaflet层的定义
【发布时间】:2012-05-03 05:21:50
【问题描述】:

layerLeaflet Mapping Library 中究竟代表什么?

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

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

谢谢。

【问题讨论】:

    标签: leaflet


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是一个很好的答案,谢谢。为了清楚起见,L.GeoJSON 实际上是一个图层组(一组其他图层),而不是一个图层本身?不挑剔,但如果其他人读到这篇文章,只是为了完全清楚。
    • @oli 谢谢你是对的,L.GeoJSON 是一个 LayerGroup,但我猜 LayerGroup 也可以被视为一个层(取决于定义)。无论如何,为了清楚起见,我更新了答案。
    【解决方案2】:

    正如您所提到的,“层”是一个来自更广泛范围的概念,而不仅仅是 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
            ]
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多