【问题标题】:GeoJson : build a Polygon based on Point featureGeoJson:基于点特征构建多边形
【发布时间】:2021-05-26 21:08:28
【问题描述】:

尊敬的 Stackoverflow 团队, 令我印象深刻的是,在挖掘论坛几个小时后,我仍然找不到与我的问题类似的任何问题/答案:

我有一个具有很多积分功能的 GeoJson。我收集了遵循某种规范(每个点之间的距离)的所有点(在我的示例中为绿色,见下图)

初始数据:

我想将所有这些链接起来以构建一个多边形(代表一个区域)。

我在寻找什么:

或接受的解决方案:

所以我从这些点收集所有坐标,并确保多边形遵循 GeoJson 要求,我使用“倒带”功能

from geojson_rewind import rewind

但最后,无论我尝试过什么,我都只能得到那种多边形:

我可能没有正确使用“倒带”功能?

我正在寻找一种(简单的)自动方式将所有点链接到一个“凸包”中

非常感谢您的帮助!

我的初始坐标被收集在一个列表中:

[[4.3556672, 50.8538851], [4.3542534, 50.8546955], [4.3567798, 50.8547854], [4.3566527, 50.8541356], [4.3574286, 50.8552813], [4.3572234, 50.8551264], [4.3547752, 50.8545063], [4.3572736, 50.8560176], [4.3571226, 50.8546104]]

我设法构建的 Polygon GeoJson 具有倒带功能(重新复制最后一个坐标以获取 Polygon)看起来像这样:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              4.357223,
              50.855126
            ],
            [
              4.35678,
              50.854785
            ],
            [
              4.355667,
              50.853885
            ],
            [
              4.356653,
              50.854136
            ],
            [
              4.357123,
              50.85461
            ],
            [
              4.354253,
              50.854695
            ],
            [
              4.354775,
              50.854506
            ],
            [
              4.357429,
              50.855281
            ],
            [
              4.357274,
              50.856018
            ],
            [
              4.357223,
              50.855126
            ]
          ]
        ]
      }
    }
  ]
}

【问题讨论】:

    标签: polygon geojson convex


    【解决方案1】:

    shapely 库对于进行此类几何操作非常有用。

    要生成一组几何的凸包的多边形,您可以使用object.convex_hull

    import shapely.geometry as sg
    
    points = [[4.3556672, 50.8538851], [4.3542534, 50.8546955], [4.3567798, 50.8547854], [4.3566527, 50.8541356], [4.3574286, 50.8552813], [4.3572234, 50.8551264], [4.3547752, 50.8545063], [4.3572736, 50.8560176], [4.3571226, 50.8546104]]
    polygon = sg.MultiPoint(points).convex_hull
    

    这会导致以下形状:

    shapely.geometry.mapping 的帮助下将其转换为 GeoJSON:

    feature_collection = {
        "type": "FeatureCollection",
        "features": [
            {"type": "Feature", "properties": {}, "geometry": sg.mapping(polygon)}
        ],
    }
    
    import json
    geojson = json.dumps(feature_collection)
    

    【讨论】:

    • 非常感谢,谢谢!你的答案的准确性和你带来的巨大帮助:)
    • 很高兴我能帮上忙 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2017-03-15
    • 2015-08-30
    相关资源
    最近更新 更多