关注公众号"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())
更多内容,欢迎关注公众号
