python2利用wxpython生成投影界面工具的圖文詳解
本投影界面工具的功能:
準備好.prj投影文件,將輸入文件夾內(nèi)的WGS84經(jīng)緯度坐標shp文件,投影為平面文件,成果自動命名為prj_***并新建在輸入文件夾同一路徑下。
下一步目標:
利用pyinstaller或其他打包庫生成exe文件,目前停滯在python2語法、arcpy打包出錯相關問題上。
參考文獻:
《Using Py2exe with Arcpy- It can be done easily!》
GUI界面示意圖
投影文件所在文件夾結構如下:
GUI代碼
# -*- coding: utf-8 -*- # ============================================================================= # 輸入文件——點選、復制、拖拽 # 選擇待投影的文件夾、投影文件所在文件夾 # ============================================================================= """ Created on Thu Feb 4 16:12:00 2021 @author: zhutong """ import wx from Def_Projection_common_E import createPrjFile,projection #創(chuàng)建應用程序?qū)ο? app = wx.App() #自定義窗口類MyFrame class MyFrame(wx.Frame): def __init__(self): super(MyFrame,self).__init__(None,title="通用經(jīng)緯度轉(zhuǎn)平面坐標工具",pos=(600,500),size=(600,300))#Python2語法 panel = wx.Panel(parent=self)#創(chuàng)建面板對象 self.statictext_shp = wx.StaticText(parent=panel,label="待投影數(shù)據(jù)所在文件夾",pos=(60,30))#創(chuàng)建靜態(tài)文本對象 self.statictext_shp = wx.StaticText(parent=panel,label="投影文件所在文件夾",pos=(60,80))#創(chuàng)建靜態(tài)文本對象 self.shp_text = wx.TextCtrl(parent=panel,value="",pos=(60,50),size=(350,25))#【文本控件1】 open_shp_button = wx.Button(parent=panel, label='打開',pos=(430,50))#【按鈕控件1】 self.prj_text = wx.TextCtrl(parent=panel,value="",pos=(60,100),size=(350,25))#【文本控件2】 open_prj_button = wx.Button(parent=panel, label='打開',pos=(430,100))#【按鈕控件2】 projection_button = wx.Button(parent=panel, label='平面投影',pos=(150,150),size=(180,30))#【按鈕控件3】 self.Bind(wx.EVT_BUTTON, self.onButton_opendir, open_shp_button)#綁定事件1——打開文件夾 self.Bind(wx.EVT_BUTTON, self.onButton_opendir, open_prj_button)#綁定事件2——打開文件夾 self.Bind(wx.EVT_BUTTON, self.onButton_projection, projection_button)#綁定事件3——投影 self.Bind(wx.EVT_TEXT, self.inputText, self.shp_text)#綁定事件4——直接在文本框輸入路徑 self.Bind(wx.EVT_TEXT, self.inputText, self.prj_text)#綁定事件4——直接在文本框輸入路徑 def onButton_opendir(self,control):#在事件源(控件)上產(chǎn)生特定事件(左鍵單擊)后的處理程序 # Create open file dialog openDirDialog = wx.DirDialog(parent=self, message="選擇一個文件夾", defaultPath="", style=wx.DD_DEFAULT_STYLE) openDirDialog.ShowModal() self.path = openDirDialog.GetPath() print(self.path) openDirDialog.Destroy() control.SetValue(self.path)#將路徑顯示在文本框1中 def inputText(self,control): self.path = control.GetValue() def onButton_projection(self,event): inWorkspace = self.shp_text.GetValue() prjdir = self.prj_text.GetValue() prjWorkspace = createPrjFile(inWorkspace,add_str="prj_")#新建投影成果根目錄prjWorkspace projection(inWorkspace,prjdir,prjWorkspace) if __name__ == "__main__": # #創(chuàng)建窗口對象 frm = MyFrame() # #顯示窗口 frm.Show() #進入主事件循環(huán) app.MainLoop()
功能正確,但提示有冗余報錯
平面投影代碼
# coding=utf-8 # --------------------------------------------------------------------------- # # 為文件夾內(nèi)所有城市的經(jīng)緯度shp生成對應的平面shp # 注意文件夾內(nèi)所有路徑須為英文路徑,python2 # # --------------------------------------------------------------------------- #注意西安和香港 import arcpy import os,re import time #os,arcpy文件覆蓋寫 arcpy.env.overwriteOutput = True #啟用覆蓋地理處理操作的輸出 inWorkspace = r'D:\PythonCode_E3DCM\01Data\04BackPoiProcess\02POI\POI_4'#待投影根目錄【運行前確認修改!】 prjdir = r'D:\PythonCode_E3DCM\01Data\prjFile'#投影文件所在路徑 ##判斷是否為shp文件 def isShapefile(file_name): if ".shp" in file_name and ".xml" not in file_name: flag = True else: flag = False return flag ##建立對應投影成果文件夾——絕對路徑中【葉子節(jié)點】文件夾前加"add_str" def createPrjFile(file_dir,add_str): dir_name,base_name = os.path.split(file_dir)#如果路徑末有//,則輸出路徑和為空文件名 #print dir_name #print base_name prj_file_dir = os.path.join(dir_name,add_str + base_name) if os.path.exists(prj_file_dir) == False: os.mkdir(prj_file_dir) print prj_file_dir + u" 文件夾新建成功!" return prj_file_dir #返回一個文件在投影文件列表中匹配的投影文件 def prjMatch(shp_dir,prjdir):#shp_dir最好為絕對路徑,1文件夾或2文件名匹配投影文件均可行 #打印作為參數(shù)輸入的shp路徑 print "\nshp_dir:\n" + shp_dir.lower() prjfile_ls = os.listdir(prjdir) #city_ls = [i.replace(suffix,"") for i in os.listdir(prjdir)] #檢查城市名是否有包含的情況,如香港xinggang包含西安xian for prjfile in prjfile_ls: suffix = ".prj" city = prjfile.replace(suffix,"") if city.lower() in shp_dir.lower(): print city #排除特殊城市西安xian【有錯誤!】 if ("xian" in shp_dir.lower()) and ("xianggang" not in shp_dir.lower()): print "xian branch prj" return os.path.join(prjdir,"xian.prj") elif "xianggang" in shp_dir.lower(): print "xianggang branch prj" return os.path.join(prjdir,"xianggang.prj") else:#忽略shp_dir中城市名大小寫 prjfile_dir = os.path.join(prjdir,prjfile) print "Ordinary branch:\n" + prjfile_dir + "\n" return prjfile_dir #else: #print "prj match fail!" #如果列表中的元素是字符串,判斷任一元素不被包含在其他元素中 num_shp = 0 num_shp_ok = 0 num_shp_fail = 0 ##針對文件夾內(nèi)shp,建立對應所在投影文件夾、并投影 #參數(shù):inWorkspace待投影成果根目錄,ini_root(=inWorkspace)新建投影文件夾替換字符用 def projection(inWorkspace,prjdir,prjWorkspace):#遞歸函數(shù)的參數(shù)只能是變量參數(shù) global num_shp global num_shp_ok global num_shp_fail file_names = os.listdir(inWorkspace) for file_name in file_names:#文件或文件夾名,不是絕對路徑 file_dir = os.path.join(inWorkspace,file_name)#待投影文件的絕對路徑 if os.path.isdir(file_dir):#判斷是否為文件夾 #建立對應投影成果文件夾 prjSubfolder= file_dir.replace(inWorkspace,prjWorkspace) if os.path.exists(prjSubfolder) == False: os.mkdir(prjSubfolder) #inWorkspace = file_dir#將當前文件夾當作根目錄 projection(file_dir,prjdir,prjSubfolder)#遞歸 else: if isShapefile(file_name): print "file_name:"+file_name #投影成果shp的絕對路徑 prj_file_dir = file_dir.replace(inWorkspace,prjWorkspace) #print prj_file_dir #投影文件prj的絕對路徑 prjfile_dir = prjMatch(file_dir,prjdir) #print prjfile_dir #如果投影成果不存在(6個文件),再投影 try: arcpy.Project_management(file_dir, prj_file_dir, prjfile_dir) #prj_file_dir投影成果shp文件的路徑,prjfile_dir投影文件的路徑 num_shp_ok += 1 print file_dir + u"投影成功!" except: num_shp_fail += 1 print file_dir + u"投影失??!" else: pass #print "Srange ERROR in: "+file_dir print inWorkspace + u" 文件夾投影完成!"#注意不是局部變量inWorkspace print str(num_shp_ok) + u"shp文件投影成功!" print str(num_shp_ok) + u"shp文件投影失??!" ## return paths if __name__ == '__main__': time_start=time.time() prjWorkspace = createPrjFile(inWorkspace,add_str="prj_")#新建投影成果根目錄prjWorkspace projection(inWorkspace,prjdir,prjWorkspace) time_end=time.time() print u'投影耗時:{:.2f}min'.format((time_end-time_start)/60)
附錄:在python2中調(diào)試wxpython,界面一閃而過的解決辦法:
到此這篇關于python2利用wxpython生成投影界面工具的圖文詳解的文章就介紹到這了,更多相關python投影界面工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python的print輸出在控制臺并且將輸出內(nèi)容保存為文件(最新推薦)
這篇文章主要介紹了python的print輸出在控制臺并且將輸出內(nèi)容保存為文件,我感覺就是類似于重寫一下調(diào)用print的時候執(zhí)行的方法,讓他既能夠在控制臺輸出,也能保存到文件里去,需要的朋友可以參考下2023-01-0120行Python代碼實現(xiàn)一款永久免費PDF編輯工具
本文主要介紹了Python代碼實現(xiàn)一款永久免費PDF編輯工具,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07Python使用scipy模塊實現(xiàn)一維卷積運算示例
這篇文章主要介紹了Python使用scipy模塊實現(xiàn)一維卷積運算,結合實例形式分析了scipy模塊的功能及使用scipy模塊進行一維卷積運算的相關操作技巧,需要的朋友可以參考下2019-09-09