在Python / GeoPandas中合并shapefile

时间:2019-07-05 15:13:29

标签: python gis spatial shapefile geopandas

我有三个相互重叠的多边形shapefile。我们称它们为:

  • file_one.shp(多边形名称为1)
  • file_two.shp(多边形名称为2)
  • file_three.shp(多边形名称为3)

我想将它们结合起来并保持这样的值。

enter image description here

请问如何在Python中获得结果(如图所示)?

谢谢!

2 个答案:

答案 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]))