關注公衆號"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())
更多內容,歡迎關注公衆號