合并数据库
最近做生态保护红线评估调整工作,需要以市州为单位提交数据库,省级又要以省为单位提交到国家,作业的时候是以县为单位来做的。这中间就涉及到很多数据库合并的事情了。本来是打算偷懒,用在网上找的一个超级工具里的合并数据库工具来合,结果用不起,最终还是得靠自己,老老实实写一个吧,应该不难。
就像这样,一堆数据库,数据库下数据集,数据集下有要素。这只是一个州的。
之前已经用代码创建了一个模板数据库了,这次开发就以模板数据库为底,把地方数据库里的数据追加到我的模板库里来。数据库里有数据集,数据集下面才是要素。对于没有数据集只有要素的数据库,还没管它,下回更新。
设计思路就是选择一堆我要合并的数据库,找一个模板库,然后开始合并。
在做的过程中,发现一个问题,有的电脑环境下,我输入了一堆数据库,输入的值会有引号,在有的电脑下又不会,不知道是什么导致的,暂时先认为它是arcgis在不同环境下结果不一样吧。
话不多说,直接贴代码:
###################
import arcpy
import os
import sys
reload(sys)
sys.setdefaultencoding('utf8')
Inputgdb = arcpy.GetParameterAsText(0)
outputgdb = arcpy.GetParameterAsText(1)
schemaType = "NO_TEST"
fieldMappings = ""
subtype = ""
flielist = Inputgdb.split(";")
fxsjlist = ''.join(Inputgdb)
arcpy.AddMessage(u"\n" + fxsjlist + u"\n")
arcpy.env.workspace = outputgdb
dcs = arcpy.ListDatasets()
for File in flielist :
if "'" == str(File)[0:1]:
Filelj = File.split("'")[1]
else:
Filelj = File
Filename = os.path.basename(File)
arcpy.AddMessage(u"\n 正在对 " + Filename + u" 进行合并\n" )
datasets = arcpy.ListDatasets(feature_type='feature')
datasets = [''] + datasets if datasets is not None else []
for ds in datasets:
for fc in arcpy.ListFeatureClasses(feature_dataset=ds):
path = os.path.join(arcpy.env.workspace, ds, fc)
fcname = os.path.basename(fc).split(".")[0]
arcpy.AddMessage(u"\n " + fcname + u"\n")
bdfclj = os.path.join(Filelj, ds, fc)
arcpy.AddMessage(bdfclj)
arcpy.AddMessage(path)
if arcpy.Exists(bdfclj):
arcpy.Append_management(bdfclj, path, schemaType, fieldMappings, subtype)
arcpy.AddMessage(u" 追加 "+ fcname + u" 图层成功\n")
else:
arcpy.AddMessage(u" 数据库内不存在 " + fcname + u" 图层,跳过\n")