我有三个相互重叠的多边形shapefile。我们称它们为:
我想将它们结合起来并保持这样的值。
请问如何在Python中获得结果(如图所示)?
谢谢!
答案 0 :(得分:1)
首先,让我们生成一些数据进行演示:
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)
答案 1 :(得分:0)
如果只想从您提到的文件中创建一个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]))