[初学入门]ArcGIS中Python脚本学习(3)
有点像Module,但更简单,函数是一个自己定义功能,用在之后的代码中,并且提供任何你想要使用的参数。这个函数从此可像变量那样在程序中使用,结合例子更容易理解。接下来的代码定义了一个将度转换为弧度的简单函数,同时也定义了一个弧度转换为度的函数,它们和Excel内置的函数类似。
import math
def radians(angdeg):
return angdeg*math.pi/180 def degrees(angrad):
return angrad*180/math.pi print math.sin(radians(45)) print degrees(math.acos(0.5))
运行之,得到结果:0.707106781187 60.0
6 / 33
5流程控制结构:If,While,For
任何脚本或编程语言的一个重要特征就是执行一系列不同情形语句的能力。 你想要创建一系列山影栅格来代表夏天、冬天和春秋分。山影(hillshade)工具需要有太阳高度角和方位角作为输入参数。 重要日期 夏至(6月21日) 春秋分(3月21日,9月21日) 冬至(12月21日) 太阳倾角 23.44 0 -23.44 接下来是一段相当简单的代码,通过太阳倾角(太阳光线正午垂直照射的纬度)获取太阳角和方位角以及纬度。输入两个参数:lat(研究区域的纬度,南半球为负)和decl(太阳倾角),由此得到sunangle和azimuth:
lat=30
decl=20
sunangle=90-lat+decl azimuth=180 if sunangle>90:
sunangle=180-sunangle azimuth=0
print sunangle,azimuth
上面的例子中lat和decl强制赋了值。 有三种流程控制操作:
if 仅在一个特定情形下才执行语句; while 当一种情形存在下,持续执行语句 for 遍历一系列值
这些语法和def有些相似:初始语句后加顿号、需要执行的语句块有缩进。 这三个结构的一些重要的公共特征:
①if、while、for语句均以冒号结尾,接下来是缩进的代码块,用于if、while、for定义的情形。在脚本编写窗口,你会发现,你在一行末尾打上冒号后,下一行自动缩进,在接下来的一行按下退格键取消缩进。
②如果你只需做一件事情,你可以在冒号后面同一行添加简短的语句,比如: if x>0: print ‘x 比0大’ print ‘下一行不要缩进了。。。’
if(continued)
接下来,我们会探索一下另一个方便的模块:os.path: 开始之前,在d:/下创建一个“testfolder”文件夹,然后新建一个“test.txt”文件; 尝试以下代码段,确保print语句前有缩进。 import os.path
if os.path.exists(\ print \测试文件夹存在\ print \文件存在\
7 / 33
elif os.path.exists(\
print \测试文件夹存在\
print \测试文件夹存在,但txt文件不存在\else:
print \两者都不存在\可选探索示例
接下来的例子做的事情对GIS非常重要,但是实际上不用任何地理处理代码。USGS7.5米分辨率DEM(数字高程模型)是文本文件(USGSDEM文件),投影为UTM,UTM北向和东向单位是米,但是高程单位可能是英尺(feet)或米(meters)。因此在获取垂直或水平距离信息时会有问题,比如坡度可以通过垂直距离/水平距离获得。如果你不在使用Z值之前设置为0.3048,将会出现错误结果。但是不幸的是,你可能不知道DEM文本文件的垂直单位是英尺还是米。这些信息保存在第539个字符里,“1”代表英尺,“2”代表米,所以可以通过读取这个文件判断。
下面的脚本演示了上述内容: import fileinput
infile=r\firstline=fileinput.input(infile)[0] unitchar=firstline[539]
unit=\if unitchar==\if unitchar==\print \fileinput.close()
输出结果:Elevation in feet
while(continued)
? 运行下面的代码,说明了一种while循环: x=1
while x<10: print x x=x+1
屏幕依次输出1~9
? 下面说明一下“==”(等于)的概念: x=5 z=x==4 print z 输出False x=5 z=x==5 print z 输出True “==”是逻辑运算符之一,其他有“<”(小于)、“>”(大于)、“>=”(大于或等于)、“<=”(小于或等于)、“<>”(不等于)。
使用逻辑运算符计算得到结果为布尔型:true(1)和false(0)。 下面例子简单体会一下布尔型表达式: x=1
while x<10:
8 / 33
print x x=x+1
表达式“x<10”结果是true或false,所以这样允许我们在计算完一种情况时运行一系列代码。许多情况下我们需要使用条件代码。
while循环的一个优点是允许我们跳过整个部分,如果条件不满足初始情况。由于while提供一种容易结束循环的方法,我们甚至用它代替if语句。当循环一个数据集时(GIS中很常用的工作)while循环很有用。在后面地理处理中我们会接触一些例子。
for
? 尝试下面代码,演示了for循环:
for x in [1,2,3,4]:(注:[1,2,3,4]用range(1,5)代替是一样的) msg=\
print str(x)+\(注:当我们希望一个数字x和字符串连接时,必须先对数字进行格式转换即str(x),否则系统报错)
? 下面的代码创建并输出指定文件夹内shp文件名列表(每个都以‘.shp’结尾)
import os
ws=\
ilist=os.listdir(ws)#创建一个列表保存工作文件夹内的文件 fcs=[]#创建一个空列表,保存结尾为‘.shp’的文件 for i in ilist:
if i.endswith(\ fcs.append(i) for fc in fcs: print fc(输出结果如右图所示)
? 下面这个例子的循环较多次数。变量mu是算术平均数,s是标准差——这两个是
random.gauss()用到的参数,可以尝试改变n的值查看结果!
import random mu=50 s=10
z5=mu-s*1.96 z95=mu+s*1.96 count=0 n=100000
for i in range(n):
x=random.gauss(mu,s)
if x
print float(count)/n(每次运行的结果都不同,但都在0.05左右,即统计结果在5%左右)
6简单输入和输出
我们现在利用前面计算太阳角代码的片段,之前是直接指定参数值,现在我们有很多种
9 / 33
方法提供输入参数,现在我们用sys方法。尝试下面的代码,点击(run运行)之
后,在对话框中函数自变量(Arguments)一栏填入:40 23.44,如下图:
import sys
lat=float(sys.argv[1])
decl=float(sys.argv[2])#使用arguments(argv)方法从“Arguments”一栏中获取输入参数,并指定一个浮点型转换将字符型输入值传递给lat和decl
sunangle=90-lat+decl azimuth=180 if sunangle>90:
sunangle=180-sunangle azimuth=0
print \正午太阳角=\
print \方位角=\(结果:正午太阳角=73.44 方位角=180)
二、ArcGIS&Python
1如何创建地理处理对象(geoprocessor object)
所有geoprocessing的Python脚本都可以通过import arcgisscripting或者win32com去穿件geoprocessor object。下面的例子显示二者区别:arcgisscripting module需要在Python2.5.1版本上创建并且需要此版本创建geoprocessor;通过win32com创建的geoprocessor可以在不同的Python版本上运行。 #9.3
import arcgisscripting
gp=arcgisscripting.create(9.3) gp.workspace=” …… 此处隐藏:2178字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [学前教育]MC9S12XS256RMV1 xs128芯片手册4
- [学前教育]安东尼语录经典语录
- [学前教育]e级gps控制测量技术设计书
- [学前教育]苏教版2022-2022学年八年级下学期期末
- [学前教育]装修公司推广 营销
- [学前教育]家政服务合同(完整版)
- [学前教育]湖北省2016届高三联考语文试题
- [学前教育]爱立信无涯学习系统LTE题库1-LTE基础知
- [学前教育]揭秘大众柴油车作弊软件原理
- [学前教育]人才流失原因及对策分析
- [学前教育]房屋建筑施工工程劳务分包合同
- [学前教育]国际贸易实务试卷A卷09.6
- [学前教育]校园废品回收活动计划方案书范文格
- [学前教育]电大成本会计试题及答案
- [学前教育]大学物理实验 华南理工出版社 绪论答案
- [学前教育]爱丁堡产后抑郁量表
- [学前教育]液压冲击的危害、产生原因与防止方法(
- [学前教育]学生工作总结高一学生期中考试总结_020
- [学前教育]人民医院医疗废物管理规章制度大全
- [学前教育]阳光维生素的巨大抗癌潜能阅读题答案.d
- 马云在云锋基金江苏论坛闭幕式的发言
- 试论小学体育教育中的心理健康教育-教
- 语文A版一年级下册《语文乐园一》教学
- 2021四川大学物理化学考研真题经验参考
- [人教A版]2015-2016学年高中数学 第二
- 终端网点销售返利协议书
- 江苏省2015年眼科学主治医师青光眼考试
- 2017年部编人教版八年级语文上册教案
- 十一中学七年级英语上册Unit7Howmuchar
- 以赛促教的创新性实验教学机制建设实践
- 平凉市崆峒区2015七年级下生物期末试题
- 琶洲(地块五)A、B塔楼1、2#塔吊基础
- 一级医院工作制度与人员岗位职责
- 2018北京西城区高三二模理科数学试题及
- 炒股密码线技术 - 图文
- 职高学生生涯发展辅导教案
- 语文人教版四年级上册8 世界地图引出的
- 最新最新人教版二年级上册全册数学教案
- 2017高考英语全国2卷精彩试题(有问题
- 普通心理学笔记




