# -*- coding:utf-8 -*-
import arcpy
import os
from Tkinter import *
import Tkinter, tkFileDialog
window = Tkinter.Tk()
window.title(u"CAD转SHP")
#window.rowconfigure(1, weight=1)
#window.columnconfigure(0, weight=1)
window.geometry('500x150')
def open_new_window():
new_window = Tkinter.Tk()
new_window.title(u"新窗口")
label = Tkinter.Label(new_window, text=u"这是一个新窗口")
label.pack()
def se1():#这是获取路径函数
g1.delete(0, "end")
#path=tkFileDialog.askopenfilename(filetypes=[("GDB file", "*.gdb"),("all","*.*")])
path=tkFileDialog.askdirectory()
path=path.replace("/","\\\\")#通过replace函数替换绝对文件地址中的/来使文件可被程序读取 #注意:\\转义后为\,所以\\\\转义后为\\
g1.insert('insert',path)
# 处理文件选择的函数
def on_select_file():
file_path = tkFileDialog.askopenfilename()
directory = os.path.dirname(file_path) # 获取文件的目录路径
if directory:
g1.delete(0, END)
g1.insert(0, directory)
def path_name():
try:
# 自定义输入文件路径
#e2 = Label(window, text=u"-----开始运行-----",bg="green")#这是标签
#e2.grid(row=7,column=1,padx=10, pady=10)
if g1.get()=='':
e2 = Label(window, text=u"-----路径不能为空-----",bg="red")#这是标签
e2.grid(row=7,column=1, pady=10)
else:
a=0
defaultpath=g1.get() #修改这个位置
file_names = os.listdir(defaultpath) # 返回文件夹中的所有文件名
print file_names
#file_names = file_names.decode('encoding')
#file_names =file_names.decode('ascii', errors='replace')
for file_name in file_names:
print file_name
#g5.delete(0, "end")
#g5.insert('insert',file_name.decode(u'gbk'))
if u'.dwg' in file_name or u'.DWG' in file_name:
a+=1
#print(file_name[:-4])
# 输入CAD文件名称
CADname=file_name[:-4]
# 定义工作空间
arcpy.env.workspace = defaultpath
# CAD文件路径
input_cad_dataset =os.path.join(defaultpath,CADname+'.dwg')
# gdb文件路径
out_gdb_path = os.path.join(defaultpath,'gdb',CADname+'.gdb')
if not os.path.exists(os.path.join(defaultpath,'gdb')):
os.makedirs(os.path.join(defaultpath,'gdb'))
# 要素集文件名称
out_dataset_name = CADname
# CAD转shp坐标比例
reference_scale = "1"
# 先创建一个gdb地理数据库
arcpy.CreateFileGDB_management(os.path.join(defaultpath,'gdb'), CADname+'.gdb')
# 将CAD文件导入到gdb地理数据库,新建一个要素集
arcpy.CADToGeodatabase_conversion(input_cad_dataset, out_gdb_path, out_dataset_name, reference_scale)
# 注意:你需要知道你的数据的正确地理坐标系,这里仅为示例
#spatial_reference = arcpy.SpatialReference(4490) # 2000 的SRID是4490
# 设置GDB的默认地理坐标系
#arcpy.env.workspace = out_gdb_path
#arcpy.env.outputCoordinateSystem = spatial_reference
# 切换工作空间到gdb中
arcpy.env.workspace = out_gdb_path
# 获取gdb中的文件列表
datasets = arcpy.ListDatasets(feature_type='feature')
# 输入shp文件的保存路径
output_shp_path=os.path.join(defaultpath,'shp')
if not os.path.exists(output_shp_path):
os.makedirs(output_shp_path)
datasets = [''] + datasets if datasets is not None else []
# 获取每个地理数据库中的要素集
for ds in datasets:
for fc in arcpy.ListFeatureClasses(feature_dataset=ds):
path = os.path.join(arcpy.env.workspace, ds, fc)
# print(path)
outfc = arcpy.ValidateTableName(fc)
# print(outfc)
# 将要素集里的要素转为shp文件
arcpy.FeatureClassToShapefile_conversion(outfc, output_shp_path)
#print CADname,u"-完成-"
e2 = Label(window, text=u"CAD路径:")#这是标签
e2.grid(row=7,column=1)
#label1.grid(row=7, column=1)
#print u"-----全部完成-----"
#g5.delete(0, "end")
#g5.insert('insert',u"-----全部完成-----")
if a==0:
e2 = Label(window, text=u"----文件夹中无DWG文件,请核实-----",bg="green")#这是标签
e2.grid(row=7,column=1,pady=10)
else:
e2 = Label(window, text=u"-----DWG全部转化完成-----",bg="green")#这是标签
e2.grid(row=7,column=1,pady=10)
#open_new_window()
except Exception as e:
e2 = Text(window,bg="red",width=40)#这是标签
e2.grid(row=7,column=1,padx=10, pady=10)
e2.insert('insert',e)
e1 = Label(window, text=u"CAD路径:")#这是标签
e1.grid(row=1,column=0, sticky=Tkinter.W)
g1 = Entry(window,width=45)#这是输入框
g1.grid(row=1, column=1,columnspan=1)
#g5 = Entry(window,width=40)#这是输入框
#g5.grid(row=6, column=1,columnspan=1)
b1 = Button(window, text=u"打开路径", command=on_select_file)#这是按键
b1.grid(row=1, column=3,padx=5, pady=5)
b5 = Button(window, text=u"开始运行", command=path_name)#这是按键
b5.grid(row=2, column=1,padx=2, pady=2)
window.mainloop()
CAD转SHP、GDB格式。复制代码,改文件后缀名为.pyw。双击直接运行即可(电脑必须按照了arcgis)