窗体版Python批量处理地理数据--栅格裁剪
2015-12-20 16:21
776 查看
一、说明
之前写过用Python代码块处理地理数据的例子,如裁剪、投影、格式转换等,曾想过用C#制作个窗体,嵌入Python代码,今天无意发现Python也能用tKinter构建简单的窗体,眼前一亮,先写个批量裁剪的例子吧。这样就不用对数据路径改来改去了,只需确定元数据路径,掩膜数据和输出路径就OK了,十分方便。
二、效果
三、代码
#coding=utf-8
from Tkinter import *
from tkFileDialog import *
import Tkinter,tkMessageBox,arcpy
arcpy.CheckOutExtension("spatial")
arcpy.gp.overwriteOutput=1
OutPath=""
MaskFile=""
root=Tk()
#root.geometry("600x400")
root.title("Extrack By Mask")
def OpenData():
filefolder1=askdirectory()
text1.delete(0,END)
text1.insert(0,filefolder1)
def OpenMask():
MaskFile=askopenfilename()
text2.delete(0,END)
text2.insert(0,MaskFile)
def SavePath():
OutPath=askdirectory()
text3.delete(0,END)
text3.insert(0,OutPath)
def Run():
if len(str(text1.get()))==0|len(str(text2.get()))==0|len(str(text3.get()))==0:
tkMessageBox.showinfo("Warning","Please choose the data source!")
return
arcpy.env.workspace=text1.get()
Rasters=arcpy.ListRasters()
s=0
for Raster in Rasters:
s=s+1
if s==0:
tkMessageBox.showinfo("Error","No data!")
return
i=1
RunButton.config(text="Running,please wait!")
for Raster in Rasters:
root.title("Processing "+Raster+" ("+str(i)+"/"+str(s)+")")
arcpy.gp.ExtractByMask_sa(Raster, text2.get(), text3.get()+"/"+Raster)
i=i+1
tkMessageBox.showinfo("Congratulations","All done")
exit()
frame1=Frame(root)
frame1.pack(side=TOP)
label1= Label(frame1,text="Input Raster:",width=10)
label1.pack(side=LEFT)
text1 = Entry(frame1,bd=1,width=60)
text1.pack(side=LEFT)
OpenDataButton = Tkinter.Button(frame1, text ="Choose", command =OpenData)
OpenDataButton.pack(side=LEFT)
frame2=Frame(root)
frame2.pack(side=TOP)
label2= Label(frame2,text="Mask:",width=10)
label2.pack(side=LEFT)
text2 = Entry(frame2,bd=1,width=60)
text2.pack(side=LEFT)
OpenMaskButton = Tkinter.Button(frame2, text ="Choose",command=OpenMask)
OpenMaskButton.pack(side=LEFT)
frame3=Frame(root)
frame3.pack(side=TOP)
label3= Label(frame3,text="OutPath:",width=10)
label3.pack(side=LEFT)
text3 = Entry(frame3,bd=1,width=60)
text3.pack(side=LEFT)
OpenPathButton = Tkinter.Button(frame3, text ="Choose",command=SavePath)
OpenPathButton.pack(side=LEFT)
frame4=Frame(root,bd=3)
frame4.pack(side=TOP)
RunButton=Tkinter.Button(frame4,text="Run",command=Run,width=20,bd=2)
RunButton.pack(side=RIGHT)
root.mainloop()
之前写过用Python代码块处理地理数据的例子,如裁剪、投影、格式转换等,曾想过用C#制作个窗体,嵌入Python代码,今天无意发现Python也能用tKinter构建简单的窗体,眼前一亮,先写个批量裁剪的例子吧。这样就不用对数据路径改来改去了,只需确定元数据路径,掩膜数据和输出路径就OK了,十分方便。
二、效果
三、代码
#coding=utf-8
from Tkinter import *
from tkFileDialog import *
import Tkinter,tkMessageBox,arcpy
arcpy.CheckOutExtension("spatial")
arcpy.gp.overwriteOutput=1
OutPath=""
MaskFile=""
root=Tk()
#root.geometry("600x400")
root.title("Extrack By Mask")
def OpenData():
filefolder1=askdirectory()
text1.delete(0,END)
text1.insert(0,filefolder1)
def OpenMask():
MaskFile=askopenfilename()
text2.delete(0,END)
text2.insert(0,MaskFile)
def SavePath():
OutPath=askdirectory()
text3.delete(0,END)
text3.insert(0,OutPath)
def Run():
if len(str(text1.get()))==0|len(str(text2.get()))==0|len(str(text3.get()))==0:
tkMessageBox.showinfo("Warning","Please choose the data source!")
return
arcpy.env.workspace=text1.get()
Rasters=arcpy.ListRasters()
s=0
for Raster in Rasters:
s=s+1
if s==0:
tkMessageBox.showinfo("Error","No data!")
return
i=1
RunButton.config(text="Running,please wait!")
for Raster in Rasters:
root.title("Processing "+Raster+" ("+str(i)+"/"+str(s)+")")
arcpy.gp.ExtractByMask_sa(Raster, text2.get(), text3.get()+"/"+Raster)
i=i+1
tkMessageBox.showinfo("Congratulations","All done")
exit()
frame1=Frame(root)
frame1.pack(side=TOP)
label1= Label(frame1,text="Input Raster:",width=10)
label1.pack(side=LEFT)
text1 = Entry(frame1,bd=1,width=60)
text1.pack(side=LEFT)
OpenDataButton = Tkinter.Button(frame1, text ="Choose", command =OpenData)
OpenDataButton.pack(side=LEFT)
frame2=Frame(root)
frame2.pack(side=TOP)
label2= Label(frame2,text="Mask:",width=10)
label2.pack(side=LEFT)
text2 = Entry(frame2,bd=1,width=60)
text2.pack(side=LEFT)
OpenMaskButton = Tkinter.Button(frame2, text ="Choose",command=OpenMask)
OpenMaskButton.pack(side=LEFT)
frame3=Frame(root)
frame3.pack(side=TOP)
label3= Label(frame3,text="OutPath:",width=10)
label3.pack(side=LEFT)
text3 = Entry(frame3,bd=1,width=60)
text3.pack(side=LEFT)
OpenPathButton = Tkinter.Button(frame3, text ="Choose",command=SavePath)
OpenPathButton.pack(side=LEFT)
frame4=Frame(root,bd=3)
frame4.pack(side=TOP)
RunButton=Tkinter.Button(frame4,text="Run",command=Run,width=20,bd=2)
RunButton.pack(side=RIGHT)
root.mainloop()
相关文章推荐
- python-markdown无法将```生成标签问题解决方法
- python的局部变量和全局变量
- python核心编程-实例的默认参数
- python requests模块和Beautiful Soup模块
- Python中的ftplib模块
- python碰到问题的时候应该如何查找帮助
- python核心编程-继承
- Python2还是Python3
- windows下面安装Python和pip终极教程
- python定时任务调度——apscheduler模块
- 零基础入门学习Python(15):二进制存储 pickle 和异常处理
- Python学习实践----比较字典中是否有相同键值的方法之一
- python 返回的json格式转换
- learn python in 10 monutes
- python: 实现通讯录录入与查找的小脚本
- Python基础教程 第9章: 魔法方法、属性和迭代器 学习笔记
- 查找算法—折半查找算法分析与实现(Python)
- python中and和or的使用方法
- Python: scikit-image 图像的基本操作
- Python: scikit-image binary descriptor