问题描述
亲爱的 Stackoverflow 团队, 我印象深刻的是,在论坛上挖了几个小时后,我仍然找不到任何与我的问题类似的问题/答案:
我有一个带有很多 Points 功能的 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 看起来像这样:
{
"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
结果如下:
在 shapely.geometry.mapping
的帮助下将其转换为 GeoJSON:
feature_collection = {
"type": "FeatureCollection","features": [
{"type": "Feature","properties": {},"geometry": sg.mapping(polygon)}
],}
import json
geojson = json.dumps(feature_collection)