GeoJson:基于点特征构建多边形

问题描述

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

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

初始数据:

Initial Data

我想将它们全部链接起来以构建一个多边形(代表一个区域)。

我在找什么:

what I'm looking for

或接受解决方案:

solution accepted

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

from geojson_rewind import rewind

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

enter image description here

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

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

非常感谢您的帮助!

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

[[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 看起来像这样:

{
  "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
            ]
          ]
        ]
      }
    }
  ]
}

解决方法

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

结果如下:

enter image description here

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

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

import json
geojson = json.dumps(feature_collection)