GeoJson:基于点特征构建多边形
GeoJson : build a Polygon based on Point feature
亲爱的 Whosebug 团队,
令我印象深刻的是,在论坛上翻了好几个小时后,我仍然找不到与我的问题类似的 question/answer :
我有一个具有很多点功能的 GeoJson。我收集了所有遵循某些规范(每个点之间的距离)的点(在我的示例中为绿色,见下图)
初始数据:
我想 link 全部构建一个多边形(代表一个区域)。
我在找什么:
或接受解决方案:
所以我从这些点收集所有坐标,并确保多边形符合 GeoJson 要求,我使用了“倒带”功能
from geojson_rewind import rewind
但最后,无论我尝试过什么,我都只能得到那种多边形:
我可能没有正确使用“倒带”功能?
我正在寻找一种(简单的)自动方法 link 将所有点放在“凸包”中
非常感谢您的帮助!
我的初始坐标收集在一个列表中:
[[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]]
我设法构建的多边形 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)
亲爱的 Whosebug 团队, 令我印象深刻的是,在论坛上翻了好几个小时后,我仍然找不到与我的问题类似的 question/answer :
我有一个具有很多点功能的 GeoJson。我收集了所有遵循某些规范(每个点之间的距离)的点(在我的示例中为绿色,见下图)
初始数据:
我想 link 全部构建一个多边形(代表一个区域)。
我在找什么:
或接受解决方案:
所以我从这些点收集所有坐标,并确保多边形符合 GeoJson 要求,我使用了“倒带”功能
from geojson_rewind import rewind
但最后,无论我尝试过什么,我都只能得到那种多边形:
我可能没有正确使用“倒带”功能?
我正在寻找一种(简单的)自动方法 link 将所有点放在“凸包”中
非常感谢您的帮助!
我的初始坐标收集在一个列表中:
[[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]]
我设法构建的多边形 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)