社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
现有多个区县的GDB数据库
每个数据库包含多个要素数据集
每个要素数据集下又包含多个要素类
现在需要创建一个新的GDB数据库,包括之前所有数据库的要素数据集和要素类。之前所有数据库的同名要素数据集合并为新的要素数据集,同名要素类合并为新的要素类且位于原来的数据集之下。
使用Arcpy处理效果如下
(PS:这里因为示例的4个数据库中要素类的命名并不一致,所以出现了以首字母命名的要素类和与中文命名的要素类并列而未合并的情况,所以实际项目中我们要检查数据库的结构是否一致。)
代码如下
import os #加载os库
import arcpy #加载arcpy库
gdblist=[] #新建空白列表 #关于列表的概念请移步 https://www.runoob.com/python3/python3-list.html
file_dir="D:\Desktop" #输入待合并GDB数据库所在的文件夹的路径
dirlist=os.listdir(file_dir) #获取 D:\Desktop 下一层级目录的路径
for dir in dirlist: #循环dirlist列表
if ".gdb" in dir: #如果路径名称中包含 .gdb 字符串
gdblist.append(file_dir+"\"+dir) #将待合并GDB数据库的路径添加到gdblist列表中
print(gdblist)
outpath="D:\Desktop" #合并后汇总数据库所在的文件夹
outgdbname="汇总数据库" #合并后汇总数据库的名称
allgdb=outpath+"\"+outgdbname+".gdb" #汇总数据库的完整路径
if arcpy.Exists(allgdb): #判断是否已存在将新建的汇总数据库
pass
else:
arcpy.CreateFileGDB_management(outpath,outgdbname) #建立汇总数据库
for gdb in gdblist: #循环待合并GDB数据库
print(gdb) #打印循环到的某个数据库的路径
arcpy.env.workspace = gdb #将循环到的数据库作为工作空间
datasets = arcpy.ListDatasets() #列出该数据库包含的要素数据集
for ds in datasets: #循环要素数据集
print(" " + ds) # 打印该要素数据集的名称
if arcpy.Exists(allgdb+"\"+ds): #判断汇总数据库中是否已存在同名要素数据集
pass
else: #如果不存在该要素数据集
desc = arcpy.Describe(ds) #获取该要素数据集的描述
sr = desc.spatialReference #获取该要素数据集的空间参考
arcpy.CreateFeatureDataset_management(allgdb,ds,sr) #在汇总数据库中创建同名的要素数据集,并且空间参考与待合并数据库中的要素数据集保持一致
fcs=arcpy.ListFeatureClasses(feature_dataset=ds) #获取该要素数据集下的所有要素类
for fc in fcs: #循环该要素数据集下的所有要素类
print(" " + fc) # 打印要素类名称便于查看进度
if arcpy.Exists(allgdb+"\"+ds + "\" + fc): #如果汇总数据库下已存在该名称的要素类
arcpy.Append_management(gdb + "\" + ds + "\" + fc,
allgdb + "\" + ds + "\" + fc,
"NO_TEST") #将该要素类追加到汇总数据库下同名的要素类中
else: #如果汇总数据库下不存在该名称的要素类
arcpy.FeatureClassToFeatureClass_conversion(fc,allgdb+"\"+ds,fc) #复制该要素类至汇总数据库下的要素数据集中
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!