如何在同一 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()
我有一个带圆圈的数据框,其中一些圆圈与其他圆圈相交。我想将这些相交区域合并为数据框中的新行,添加相交区域的属性。我只看到如何在两个数据帧之间使用 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()