项目中经常遇到矢量数据库需要重投影的情况,arcgis自带工具又只能对要素层进行投影,对于有多个要素集、多个要素层的MDB或者GDB库数据,没有现成的工具处理,目前还是通过二次开发的工具来实现。
下面为我通过arcpy编写的shp、MDB或者GDB库数据重投影的工具箱
实现的功能:
1、支持SHP\MDB\GDB同时转换
2、支持MDB、GDB带有多个要素集或者多个要素层的情况
核心代码:
for i in range(0,len(mdbdir)): new_mdb = mdbfile[i] additem = 0 while arcpy.Exists(os.path.join(outpath,new_mdb)): additem +=1 new_mdb = mdbfile[i].split('.')[0] + str(additem) + '.mdb' new_mdb_dir = os.path.join(outpath,new_mdb) try: arcpy.CreatePersonalGDB_management(outpath, new_mdb) info = new_mdb_dir + u' 创建成功' arcpy.AddMessage(info) with open(outpath + "\\" + u"log.txt", mode="a") as log: log.write(info + "\n") except: info = new_mdb_dir + u' 创建异常' arcpy.AddMessage(info) with open(outpath + "\\" + u"log.txt", mode="a") as log: log.write(info + "\n") walk = arcpy.da.Walk(mdbdir[i], datatype="Any", type="Any") for dirpath, dirnames, filenames in walk: if len(dirnames) == 0: pass else: for dirname in dirnames: try: arcpy.CreateFeatureDataset_management(new_mdb_dir, dirname, spt) info = dirname + u' 数据集投影完成' arcpy.AddMessage(info) with open(outpath + "\\" + u"log.txt", mode="a") as log: log.write(info + "\n") except: info = dirname + u' 数据集投影异常' arcpy.AddMessage(info) with open(outpath + "\\" + u"log.txt", mode="a") as log: log.write(info + "\n") for filename in filenames: infc = os.path.join(dirpath,filename) outfc = infc.replace(infc.split('.')[0],new_mdb_dir.split('.')[0]) try: arcpy.Project_management(infc, outfc, spt) info = outfc + u' 要素类投影完成' arcpy.AddMessage(info) with open(outpath + "\\" + u"log.txt", mode="a") as log: log.write(info + "\n") except: info = outfc + u' 要素类投影异常' arcpy.AddMessage(info) with open(outpath + "\\" + u"log.txt", mode="a") as log: log.write(info + "\n")