【Python@arcpy】 GeoDataBase 導出爲Shapefile

關注公衆號"seeling_GIS",領取前端學習視頻資料

  • 數據源是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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章