在 Python/GeoPandas 中组合 shapefile

Combining shapefiles in Python / GeoPandas

我有三个相互重叠的多边形形状文件。我们称他们为:

我想合并它们并保持这样的值。

请问如何才能达到Python中的效果(如图)?

谢谢!

如果您只想从您提到的文件创建一个 shapefile,您可以尝试使用以下代码(我假设 shapefile 具有相同的列)。

import pandas as pd
import geopandas as gpd

gdf1 = gpd.read_file('file_one.shp')
gdf2 = gpd.read_file('file_two.shp')
gdf3 = gpd.read_file('file_three.shp')

gdf = gpd.GeoDataFrame(pd.concat([gdf1, gdf2, gdf3]))

首先,让我们生成一些数据进行演示:

import geopandas as gpd
from shapely.geometry import Point
shp1 = gpd.GeoDataFrame({'geometry': [Point(1, 1).buffer(3)], 'name': ['Shape 1']})
shp2 = gpd.GeoDataFrame({'geometry': [Point(1, 1).buffer(2)], 'name': ['Shape 2']})
shp3 = gpd.GeoDataFrame({'geometry': [Point(1, 1).buffer(1)], 'name': ['Shape 3']})

现在对所有形状取对称差,但最小的形状可以保留原样:

diffs = []
gdfs = [shp1, shp2, shp3]
for idx, gdf in enumerate(gdfs):
    if idx < 2:
        diffs.append(gdf.symmetric_difference(gdfs[idx+1]).iloc[0])
diffs.append(shp3.iloc[0].geometry)

好了,现在你有了所需的形状作为差异列表。如果你想将它们合并为一个 GeoDataFrame,只需按照以下步骤操作:

all_shapes = gpd.GeoDataFrame(geometry=diffs)