合并两个矢量shp文件
代码:
from osgeo import ogr
def merge_shapefiles(input_shapefile1, input_shapefile2, output_shapefile):
# 打开第一个 Shapefile
ds1 = ogr.Open(input_shapefile1)
if ds1 is None:
raise Exception(f"无法打开 Shapefile 文件: {input_shapefile1}")
# 打开第二个 Shapefile
ds2 = ogr.Open(input_shapefile2)
if ds2 is None:
raise Exception(f"无法打开 Shapefile 文件: {input_shapefile2}")
# 获取第一个图层
layer1 = ds1.GetLayer()
# 获取第二个图层
layer2 = ds2.GetLayer()
# 创建输出 Shapefile
driver = ogr.GetDriverByName("ESRI Shapefile")
if driver is None:
raise Exception("无法获取ESRI Shapefile驱动程序")
output_ds = driver.CreateDataSource(output_shapefile)
if output_ds is None:
raise Exception(f"无法创建 Shapefile 文件: {output_shapefile}")
# 创建新的图层
output_layer = output_ds.CreateLayer("merged", geom_type=ogr.wkbPolygon)
# 复制第一个图层的字段到新图层
for i in range(layer1.GetLayerDefn().GetFieldCount()):
field_defn = layer1.GetLayerDefn().GetFieldDefn(i)
output_layer.CreateField(field_defn)
# 复制第一个图层的要素到新图层
for feature in layer1:
output_layer.CreateFeature(feature)
# 复制第二个图层的字段到新图层
for i in range(layer2.GetLayerDefn().GetFieldCount()):
field_defn = layer2.GetLayerDefn().GetFieldDefn(i)
output_layer.CreateField(field_defn)
# 复制第二个图层的要素到新图层
for feature in layer2:
output_layer.CreateFeature(feature)
# 关闭数据源
ds1 = None
ds2 = None
output_ds = None