当前位置:文档之家› arcgis中Python脚本的使用【简明教程】

arcgis中Python脚本的使用【简明教程】

[初学入门]ArcGIS中Python脚本的使用By:飞天小猪目录写在前面的话 (2)前言 (2)一、PYTHON语言基础 (3)1数学运算符 (3)2字符串操作 (4)3模块的使用(M ODULES) (5)4使用DEF构建函数 (6)5流程控制结构:I F,W HILE,F OR (7)6简单输入和输出 (9)二、ARCGIS&PYTHON (10)1如何创建地理处理对象(GEOPROCESSOR OBJECT) (10)2获取地理处理帮助 (11)2.1举例:如何使用Geoprocessor Programming Model中的Lists (11)3使用地理处理工具——T OOLBOXES和A LIASES (12)4在建模中使用脚本(S CRIPTS IN M ODEL B UILDER) (13)5在P YTHON W IN里调试地理处理脚本 (19)5.1 调试选择和消息 (20)5.2PythonWin的调试工具 (21)5.3地理处理工具举例 (22)6使用描述(D ESCRIBE)和存在(E XISTS)获取数据信息 (22)6.1描述 (23)6.2存在(Exists) (24)6.3在循环中使用描述和存在 (24)7在P YTHON脚本中使用地图代数(M AP A LGEBRA) (27)8数据管理和指针(D ATA M ANAGEMENT AND C URSORS) (28)8.1数据管理(Data Management) (28)8.2指针(Cursors) (29)附录1:地理处理脚本中输入&输出方法指南 (32)附录2:其他 (33)写在前面的话一直想学习ArcGIS中的Python脚本,大四下半学期终于有了时间,可是想找到这么一本好的教材不容易。

茫茫互联网,终于找到了旧金山州立大学Jerry Davis教授的个人主页,对其中《Geoprocessing Scripts With Python》如获至宝,独乐乐不如众乐乐,现在将其教程翻译并结合自己的学习情况给出总结。

希望能够给更多想学习Python的同学一个参考。

另外,在我刚开始接触Python时,是看了台湾辅仁大学一位老师的视频课件,在此致谢。

我想从两个大部分总结:一、Python语言基础;二、ArcGIS&Python。

其中第一部分参考了《Python精要参考(第二版)》、《Python编程金典(读书笔记)》等书籍文献。

对于多数读者来说,可能或多或少有一些编程基础,所以理解起来应该不成问题。

文中多数数据来自Jerry Davis教授的主页,放在“C:\prog”目录下,为了直观,我将运算结果一并编辑,方便参考。

值得一提的是ArcGIS的在线帮助文档,一个实时更新的GIS宝库,很多专业性知识都可以找到答案,点击链接ArcGIS10中文帮助、ArcGIS9.3.1或9.3英文帮助。

获取更过脚本例子来学习:ESRI的地理处理模型和脚本工具库是个不错的选择。

由于我也是初次接触,翻译或者心得难免有纰漏之处,希望同仁们可以多多交流!前言在GIS建模或GIS数据管理中,你可能经常需要处理一系列步骤才可以完成的工作;你可能有一个工作目录下的数据需要重投影、裁剪到研究区域,或者用某种方法组合成期望的结果;我们也经常需要根据不同情形用不同方法处理数据,因此我们需要作出选择,而高质量的决策需要考虑很多低水平的决策,这可以通过脚本程序模型辅助完成。

脚本编程的主要目的是使枯燥的处理数据工作自动化,通过逻辑来指挥处理过程。

我想自动化和逻辑是关键,它们区别于我们多数使用计算机时的交互活动。

我们发E-mail,写文章或者设计地图,都需要和计算机交互,而处理一系列数据,我们需要自动化和利用逻辑来指导自动化。

在地理处理脚本逻辑中,我们需要在允许我们做的事情中作出决定,比如,处理栅格数据不同于矢量数据,或为没投影的数据设置投影,或处理仅在特定时间搜集的数据集。

对于重要的GIS工作来说,脚本以及其他形式的程序是必需的,而非可有可无。

在接下来的联系中,我们会探索Python的使用以及创建脚本来使用ArcGIS里众多的地理处理工具。

所有你能在ArcToolbox或Model中使用的工具都能够用在Python脚本中,这些脚本可以生成脚本工具,像其他地理处理工具一样使用。

一、Python语言基础安装PythonWin,在…\ArcGisDesktop9.3.iso\Desktop\PythonWin目录下可以找到PythonWin的安装程序,默认是不安装的,。

同时会安装win32com以及允许任何脚本在基于Dispatch的地理处理过程中工作。

ArcGIS10中引入了全新的Python Window来增强内嵌的Python体验。

警告:不要尝试更新随ArcGIS安装的Python到一个新的版本!下面介绍Python的一些简单语法和规则。

1数学运算符Python提供了多样化的通用数学运算符——多数编程语言的特征,以及许多通过import的modules提供的符号。

常用的有+,-,*,/,**(幂),%(取模,即除后的余数)。

下面的表格显示了整型(Integer)和浮点型(Float)各种组合运算的结果,记住一条规则,只要参与运算的有浮点型,则结果为浮点型;全为整型时,结果才为整型。

2字符串操作注:使用Python帮助:有超过30种内置方法来处理字符,请到Sequence Types 下的String Methods寻找帮助!字符串是一串字母,比如’San Francisco’,字符串下标从0开始。

学习字符串语法的最好方法是自己动手尝试,下标展示之:3模块的使用(Modules)Python提供了一系列内置的方法(大量依赖于模块)用于通用编程。

Python安装时自带了大量Modules,最常用的有math,sys,random,array以及os.path。

当然还有好多Modules可以下载,比如数字处理(Numeric)——numpy,可在或里搜索。

/moin/NumericAndScientific 页面中列举了一些。

使用Module前,必须import之。

通常我们会将一行import <Module名>放在程序顶部,比如:import arcgisscripting当然,这不必成为你程序的第一行,但必须在使用它里面方法之前。

当要引用多个模块是,中间用逗号分隔,比如:import arcgisscripting,sys,string,os,math我们也可以自己为频繁使用的方法创建Module,下面,我们开始体验内置的Modules。

math和random模块很多常用的数学计算功能都可以通过math找到,比如三角计算或对数计算,如果要使用复杂数字,就使用cmath模块。

和之前一样,通过以下表格来体现模块的使用:4使用def构建函数有点像Module,但更简单,函数是一个自己定义功能,用在之后的代码中,并且提供任何你想要使用的参数。

这个函数从此可像变量那样在程序中使用,结合例子更容易理解。

接下来的代码定义了一个将度转换为弧度的简单函数,同时也定义了一个弧度转换为度的函数,它们和Excel内置的函数类似。

import mathdef radians(angdeg):return angdeg*math.pi/180def degrees(angrad):return angrad*180/math.piprint math.sin(radians(45))print degrees(math.acos(0.5))运行之,得到结果:0.707106781187 60.05流程控制结构:If,While,For任何脚本或编程语言的一个重要特征就是执行一系列不同情形语句的能力。

你想要创建一系列山影栅格来代表夏天、冬天和春秋分。

山影(hillshade)工具需要有太阳高度角和方位角作为输入参数。

接下来是一段相当简单的代码,通过太阳倾角(太阳光线正午垂直照射的纬度)获取太阳角和方位角以及纬度。

输入两个参数:lat(研究区域的纬度,南半球为负)和decl(太阳倾角),由此得到sunangle和azimuth:lat=30decl=20sunangle=90-lat+declazimuth=180if sunangle>90:sunangle=180-sunangleazimuth=0print 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.pathif os.path.exists("d:/testfolder/test.txt"):print "测试文件夹存在"print "txt文件存在"elif os.path.exists("d:/testfolder"):print "测试文件夹存在"print "测试文件夹存在,但txt文件不存在"else:print "两者都不存在"可选探索示例接下来的例子做的事情对GIS非常重要,但是实际上不用任何地理处理代码。

USGS7.5米分辨率DEM(数字高程模型)是文本文件(USGSDEM文件),投影为UTM,UTM北向和东向单位是米,但是高程单位可能是英尺(feet)或米(meters)。

因此在获取垂直或水平距离信息时会有问题,比如坡度可以通过垂直距离/水平距离获得。

如果你不在使用Z值之前设置为0.3048,将会出现错误结果。

但是不幸的是,你可能不知道DEM文本文件的垂直单位是英尺还是米。

相关主题