提问人:user2503169 提问时间:11/17/2023 最后编辑:user2503169 更新时间:11/18/2023 访问量:87
在 Geopandas/Python 中从重叠的多边形创建不同的非重叠多边形
Create distinct non-overlapping polygons from overlapping polygons in Geopandas/Python
问:
给定一个具有一些重叠多边形(缓冲区)的 GeoDataFrame,我想在有重叠的地方创建唯一的、不重叠的多边形,并保留不重叠的多边形。输出将没有重叠的面。此功能可在 ArcMap/ArcGIS Desktop 中使用要素转面工具使用:
https://pro.arcgis.com/en/pro-app/3.1/tool-reference/data-management/feature-to-polygon.htm
我尝试过很多不同的东西,但似乎不能完全正确。感谢您的帮助。
编辑以添加示例:
#example
import geopandas as gpd
from shapely.geometry import Point
import matplotlib.pyplot as plt
import numpy as np
polys = gpd.GeoDataFrame(geometry=[Point(0, 0), Point(1, 1), Point(1, 2), Point(2, 1)])
polys['geometry'] = polys.buffer(1)
ax2 = polys.plot(figsize=(5,5), edgecolor=u'white', color='gray')
colors = [1,2,3,4]
for name in (colors):
polys.loc[polys['id'].eq(name)].plot(edgecolor=u'white', color=np.random.rand(3,), ax=ax2)
ax2.axis('scaled')
plt.show()
输出:
期望输出:
答:
1赞
Timeless
11/17/2023
#1
IIUC,您可以多边形化每个单独多边形
的外部
unary_union
:
from shapely.ops import polygonize
nonov_polys = gpd.GeoDataFrame(geometry=list(
polygonize(polys.exterior.unary_union)))
print(nonov_polys.shape[0]) # 9 polygons
nonov_polys.plot(ec="w", cmap="plasma"); # + plt.text for annotations
评论
0赞
user2503169
11/17/2023
谢谢!我尝试了许多不同的使用叠加层的东西,包括遍历每个多边形,在其余功能上运行相交和差异,将它们添加到新的GeoDataFrame中......但不能完全正确。我尝试了您的建议,但是当有多个重叠时,它似乎不起作用。
0赞
Timeless
11/17/2023
你的问题仍然缺乏细节,但我更新了我的答案,给你一般的逻辑。
0赞
user2503169
11/18/2023
谢谢。仍然无法让它产生我正在寻找的东西。此示例中所需的输出是包含 9 个非重叠面的 geodataframe。因此,它将有 9 行,每个非重叠多边形对应一行。下面是一个 shapefile 表示形式:drive.google.com/drive/folders/...
0赞
Timeless
11/18/2023
知道了,更新的答案应该能给你你想要的东西。
1赞
user2503169
11/18/2023
是的,这行得通,而且是一句话!非常感谢,真的很感激!
评论