在Python,GeoPandas或形状上(在单个几何体中)组合多边形

p-r*_*bot 26 python pandas shapely geopandas

我试图在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()
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

union.png

首先,如何使用GeoPandas或形状poly_union从输入多边形(df1,df2)输出上面的polygon()?

其次,与poly_union我想要找到的几何()相关的正确命名法是什么?我称之为'联合',但我发现的每个例子都指的是'联合'不会输出这个几何.

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

poly1 = df1['geometry']; poly2 = df2['geometry']
mergedpoly = poly1.union(poly2)
mergedpoly.plot()
Run Code Online (Sandbox Code Playgroud)

merged_poly.png

p-r*_*bot 31

这里的问题/答案看来,它被称为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()
Run Code Online (Sandbox Code Playgroud)

注意:如果使用GEOS 3.2+,它会cascaded_union被取代unary_union- 这允许不同几何类型的联合,而不仅仅是多边形.要检查你的版本,

>>> shapely.geos.geos_version
(3, 5, 1)
Run Code Online (Sandbox Code Playgroud)

联盟

  • ```cascaded_union``` 被 ```shapely.ops.unary_union()``` 取代,如[此处](https://shapely.readthedocs.io/en/stable/manual.html#shapely.ops .cascaded_union)。它适用于不同的几何类型(不仅是多边形) (6认同)

Con*_*ito 10

@Rutger Hofste 的回答也最适合我。如果您的多边形缺少具有恒定值的列,只需简单地创建一个

gdf['new_column'] = 0 gdf_new = gdf.dissolve(by='new_column')


Rut*_*ste 6

如果您喜欢Geopandas而不是Shapely,则可以考虑溶解,并为所有条目使用具有恒定值的列:http : //geopandas.org/aggregation_with_dissolve.html