关注公众号"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: PyCharmimport arcpy,os,time
from arcpy import env
from os import pathimport sys
reload(sys)
sys.setdefaultencoding('utf8')source_dir = ur'F:\gisdata\实验数据\testgdb\source'
output_dir = ur'F:\gisdata\实验数据\testgdb\output'args = sys.argvif 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_spacefor 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_dirprint '开始执行' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())for ws in arcpy.ListWorkspaces():print arcpy.Describe(ws).workspaceTypeif arcpy.Describe(ws).workspaceType == 'FileSystem':continueprint u'当前文件:' + ws# 获取gdb 名字 ,并新建同名文件夹ws_new = path.split(ws)[1][0:-4]arcpy.CreateFolder_management(output_dir,ws_new)#导出所有的 feature class tableoutput_dir_new = output_dir + os.sep + ws_newexport_to_shp(ws,output_dir_new)for ds in arcpy.ListDatasets('','Feature'):# 创建 子文件夹arcpy.CreateFolder_management(output_dir_new,ds)# 导出所有的FCws_ds = ws + os.sep + dsoutput_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())
更多内容,欢迎关注公众号