【Python@arcpy】 GeoDataBase 导出为Shapefile

804 阅读1分钟

关注公众号"seeling_GIS",回复『前端视频』,领取前端学习视频资料

GeoDataBase 导出为Shapefile

  • 数据源是gdb ,需要用超图发布成服务,所有想到的办法就是通过将数据转换成shp然后在通过shp导入到超图udb文件中,然后发布成服务。

  • 虽然arcmap中能够通过界面化操作就能够实现,但是如果如果数据量过大,分类过多就比较费时费力,只是一个没有技术含量的体力活,所有想着用arcpy来实现通过脚本的方式批量转换。

  • 以下代码实现了gdb数据到shp的过程

# -*- coding: utf-8 -*-
# @Time    : 2020/3/16 21:09
# @Author  : seelingzheng
# @公众号  : seeling_gis
# @File    : gdb_to_shp.py
# @Software: PyCharm


import arcpy,os,time
from arcpy import  env
from os import  path

import sys
reload(sys)
sys.setdefaultencoding('utf8')

source_dir = ur'F:\gisdata\实验数据\testgdb\source'
output_dir = ur'F:\gisdata\实验数据\testgdb\output'

args = sys.argv

if len(args)> 1 and len(args) == 3:
    source_dir = args[1]
    output_dir = args[2]
elif source_dir =='' and  output_dir == '':
    source_dir = raw_input('源文件路径:')
    output_dir = raw_input("目标文件路径:")

if source_dir == '':
    source_dir = ur'd:\source'
if output_dir == '':
    output_dir = ur'd:\output' 

def export_to_shp(new_work_space, output_dir):
    env.workspace = new_work_space
    for fc in arcpy.ListFeatureClasses():
        desc = arcpy.Describe(fc)
        output_shp = output_dir + os.sep + fc + '.shp'
        # 删除以及存在的同名文件
        if path.exists(output_shp):
            os.remove(output_shp)
            os.remove(output_shp + '.xml')
        if desc.featureType == 'Simple':
            arcpy.CopyFeatures_management(fc,output_shp)
            print fc + u' 导出成功'


if __name__ == "__main__":
    env.workspace = source_dir
    print '开始执行' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    for ws in arcpy.ListWorkspaces():
        print arcpy.Describe(ws).workspaceType
        if arcpy.Describe(ws).workspaceType == 'FileSystem':
            continue
        print u'当前文件:' + ws
        # 获取gdb 名字 ,并新建同名文件夹
        ws_new = path.split(ws)[1][0:-4]
        arcpy.CreateFolder_management(output_dir,ws_new)

        #导出所有的 feature class table
        output_dir_new = output_dir + os.sep + ws_new
        export_to_shp(ws,output_dir_new)

        for ds in arcpy.ListDatasets('','Feature'):
            # 创建 子文件夹
            arcpy.CreateFolder_management(output_dir_new,ds)
            # 导出所有的FC
            ws_ds = ws + os.sep + ds
            output_dir_ds = output_dir_new + os.sep + ds # 子要素集文件夹
            export_to_shp(ws_ds,output_dir_ds)

    print '结束执行' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
 

更多内容,欢迎关注公众号

seeling_GIS