CAD转SHP、GDB格式。

# -*- 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值