在 GeoPandas 或 Shapely 中合并多边形(合并为单个几何体)

新手上路,请多包涵

我试图在 GeoPandas 中找到两个多边形的并集,并输出一个包含来自两个多边形的点作为其顶点的单一几何体。 geopandas.overlay 函数为每个单独的联合提供了多边形,但我想要一个多边形。

对于上下文,我使用它来将两个行政区域合并为一个区域(即包括一个国家内的城镇地区)。

以下示例来自 geopandas 网站并说明了我想要的内容:

 from matplotlib import pyplot as plt
import geopandas as gpd
from shapely.geometry import Polygon

polys1 = gpd.GeoSeries([Polygon([(0,0), (2,0), (2,2), (0,2)]),
                         Polygon([(2,2), (4,2), (4,4), (2,4)])])

polys2 = gpd.GeoSeries([Polygon([(1,1), (3,1), (3,3), (1,3)]),
                         Polygon([(3,3), (5,3), (5,5), (3,5)])])

df1 = gpd.GeoDataFrame({'geometry': polys1, 'df1':[1,2]})
df2 = gpd.GeoDataFrame({'geometry': polys2, 'df2':[1,2]})

res_union = gpd.overlay(df1, df2, how='union')
res_union.plot()

res_union.png

输出几何形状都不是我所期望的,如下所示:

 poly_union = gpd.GeoSeries([Polygon([(0,0), (0,2), (1,2), (1,3), \
    (2,3), (2,4), (3, 4), (3, 5), (5, 5), (5, 3), (4, 3), (4, 2), \
    (3,2), (3,1), (2, 1), (2, 0), (0, 0)])])

poly_union.plot(color = 'red')
plt.show()

联盟.png

首先,我如何从输入多边形( df1df2 和形状)输出上述多边形( poly_union )?

其次,与我要查找的几何( poly_union )相关的正确命名法是什么?我会称它为“联合”,但我发现每个涉及“联合”的示例都不会输出此几何图形。

注意: 示例似乎也没有输出单个多边形:

 poly1 = df1['geometry']; poly2 = df2['geometry']
mergedpoly = poly1.union(poly2)
mergedpoly.plot()

merged_poly.png

原文由 p-robot 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

注意: cascaded_union 下面的答案中提到的被 unary_union 如果使用GEOS 3.2+ - 这允许不同几何类型的联合,而不仅仅是多边形。要检查您的版本,

 >>> shapely.geos.geos_version
(3, 5, 1)


此处 的问题/答案来看,这似乎 cascaded_union 中称为 shapely

 from shapely.ops import cascaded_union
polygons = [poly1[0], poly1[1], poly2[0], poly2[1]]
boundary = gpd.GeoSeries(cascaded_union(polygons))
boundary.plot(color = 'red')
plt.show()

联盟

原文由 p-robot 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题