如何在同一 Geopandas 数据框中合并相交的几何图形

How to Union Intersecting Geometries in Same Geopandas Dataframe

我有一个带圆圈的数据框,其中一些圆圈与其他圆圈相交。我想将这些相交区域合并为数据框中的新行,添加相交区域的属性。我只看到如何在两个数据帧之间使用 sjoin。

设置

import geopandas as gpd, pandas as pd
from urbansim.maps import dframe_explorer
from shapely.geometry import Point
%matplotlib inline

c1 = Point(1, 0).buffer(1)
c2 = Point(.5, 0).buffer(1)

gdf = gpd.GeoDataFrame(dict(A=[1, 2], B=[3, 4]), geometry=[c1, c2])

gdf.plot()

解决方案
使用 reduce 来自 functools

from functools import reduce

intersection = reduce(Point.intersection, gdf.geometry) 

summed = gpd.GeoDataFrame(
    gdf.sum().to_frame().T,
    geometry=[intersection]
)

gdf.set_geometry(
    gdf.difference(intersection)
).append(summed, ignore_index=True).plot()