• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
bobird的学习笔记
博客园    首页    新随笔    联系   管理    订阅  订阅
将Geodatabase导出为ShapeFile

可以将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。

posted on 2013-07-18 15:27  bobird  阅读(1665)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3