可以将Geodatabase中的Feature Class导出成Shapefile有不同的方式,右键一个Geodatabase可以将其中所有的Feature Class导出到一个文件夹中,右键一个Feature Dataset,可以将其中的所有Feature Class导出到一个文件夹中,右键一个Feature Class可以以Single或Multiple的方式导出到shapefile。
但是,如果想在导出的SHPS中保持Geodatabase中的目录结构,怎么办呢?以下的脚本就是解决的这样问题。
—————————————————————————我是一条分割线————————————————————————————— #-*- coding: UTF-8 -*- # ########################################################################################## #作者:mtl #最后修改:2011-4-26 #功能1:将一个目录下的所有PGDB及FGDB中的所有FC/Table都导出成SHP/DBF(不导出SHP不支持的topology等)。 #功能2:Shps的目录结构与源Geodatabase相同。 #参数1:source_foder,需要导出的Geodatabase所在的文件夹,该目录下所有Geodatabase都将被导出。 #参数2:desti_foder,存放SHPS的文件夹。 #使用方法:打开Python2.6中的IDLE,File - > Open 打开脚本文件, 然后run -> run Module。 ########################################################################################## import arcpy, os, time from arcpy import env from os import path #根据需要修改以下参数。 source_foder = ur'C:\mutianlong\牙克石市土地利用总体规划成果2011.4.20\图库' desti_foder = ur'C:\mutianlong\牙克石市土地利用总体规划成果2011.4.20\图库' def exportFCS(ws,desti_foder): env.workspace = ws for fc in arcpy.ListFeatureClasses(): desc = arcpy.Describe(fc) if desc.featureType == 'Simple': arcpy.CopyFeatures_management(fc, desti_foder + os.sep + fc + '.shp') print 'succeed in exporting ' + fc def exportTables(ws,desti_foder): env.workspace = ws for table in arcpy.ListTables(): arcpy.CopyRows_management(table, desti_foder + os.sep + table + '.dbf') print 'succeed in exporting ' + table if __name__ == "__main__": env.workspace = source_foder print 'start at ' + str(time.ctime()) for ws in arcpy.ListWorkspaces("*", "All"): if arcpy.Describe(ws).workspaceType == 'FileSystem': continue print "source Geodatabase's name" + ws #新建一个文件夹,以GDB的名字命名。 ws_name = path.split(ws)[1][0:-4] arcpy.CreateFolder_management(desti_foder, ws_name) #导出所有Stand Alone的FC与Table。 exportFCS(ws,desti_foder + os.sep + ws_name) exportTables(ws,desti_foder + os.sep + ws_name) #导出FDS中的FC与Table。 for ds in arcpy.ListDatasets('', "Feature"): #生成子文件夹。 arcpy.CreateFolder_management(desti_foder + os.sep + ws_name, ds) #导出所有的FC与Table。 exportFCS(ws + os.sep + ds,desti_foder + os.sep + ws_name + os.sep + ds) exportTables(ws + os.sep + ds,desti_foder + os.sep + ws_name + os.sep + ds) print 'end at ' + str(time.ctime()) —————————————————————————我是一条分割线————————————————————————————— 示例结果: start at Tue Apr 26 21:44:22 2011 source Geodatabase's nameC:\mutianlong\XXXX市土地利用总体规划成果2011.4.20\图库\中心城区.mdb succeed in exporting QWT succeed in exporting XZQJX succeed in exporting XZQ succeed in exporting ZFZD succeed in exporting ZSTC succeed in exporting ZRWH succeed in exporting JQDLTB succeed in exporting JQXZDW succeed in exporting XZZDJSXM succeed in exporting MZZDJSXM succeed in exporting TDZZZDQY succeed in exporting DZZDJSXM succeed in exporting TDYTQ succeed in exporting FMGM succeed in exporting FMGX source Geodatabase's nameC:\mutianlong\XXXX市土地利用总体规划成果2011.4.20\图库\XXXX土地利用总体规划.mdb succeed in exporting XZQ succeed in exporting YX succeed in exporting QWT succeed in exporting DZZDJSXM succeed in exporting XZZDJSXM succeed in exporting ZFZD succeed in exporting ZSTC succeed in exporting XZQJX succeed in exporting TDZZZDQY succeed in exporting MZZDJSXM succeed in exporting JQXZDW succeed in exporting JQDLTB succeed in exporting TDYTQ succeed in exporting FMGM succeed in exporting FMGX end at Tue Apr 26 21:49:44 2011 —————————————————————————我是一条分割线—————————————————————————————
附注:
1. 脚本不仅导出了Feature Class,而且导出了Table,其他如Topology等没有导出。
2. 未经过充分测试,已知的错误有当Table不包含多余字段时(仅有ObjectID与Shape两个字段)导出到DBF会出错(DBF要求必须有多余字段)。
3. 脚本将某一目录下的所有PGDB/FGDB都导出,而不是某单独一个PGDB或FGDB。