1/69Python脚本使用详解目录写在前面的话...................................................................................2前言...................................................................................................2一、PYTHON语言基础..................................................................31数学运算符.................................................................................32字符串操作.................................................................................43模块的使用(MODULES)..........................................................54使用DEF构建函数......................................................................65流程控制结构:IF,WHILE,FOR...............................................66简单输入和输出.........................................................................9二、ARCGIS&PYTHON...............................................................101如何创建地理处理对象(GEOPROCESSOROBJECT)................102获取地理处理帮助...................................................................102.1举例:如何使用GeoprocessorProgrammingModel中的Lists............................................................................................113使用地理处理工具——TOOLBOXES和ALIASES........................114在建模中使用脚本(SCRIPTSINMODELBUILDER)...................125在PYTHONWIN里调试地理处理脚本.....................................185.1调试选择和消息................................................................195.2PythonWin的调试工具......................................................202/695.3地理处理工具举例..............................................................216使用描述(DESCRIBE)和存在(EXISTS)获取数据信息........216.1描述.....................................................................................226.2存在(Exists)....................................................................236.3在循环中使用描述和存在..................................................237在PYTHON脚本中使用地图代数(MAPALGEBRA)...............268数据管理和指针(DATAMANAGEMENTANDCURSORS).........278.1数据管理(DataManagement).....................................278.2指针(Cursors).................................................................28附录1:地理处理脚本中输入&输出方法指南..........................31附录2:其他.................................................................................32写在前面的话一直想学习ArcGIS中的Python脚本,大四下半学期终于有了时间,可是想找到这么一本好的教材不容易。茫茫互联网,终于找到了旧金山州立大学JerryDavis教授的个人主页,对其中《GeoprocessingScriptsWithPython》如获至宝,独乐乐不如众乐乐,现在将其教程翻译并结合自己的学习情况给出总结。希望能够给更多想学习Python的同学一个参考。另外,在我刚开始接触Python时,是看了台湾辅仁大学一位老师的视频课件,在此致谢。3/69我想从两个大部分总结:一、Python语言基础;二、ArcGIS&Python。其中第一部分参考了《Python精要参考(第二版)》、《Python编程金典(读书笔记)》等书籍文献。对于多数读者来说,可能或多或少有一些编程基础,所以理解起来应该不成问题。文中多数数据来自JerryDavis教授的主页,放在“C:\prog”目录下,为了直观,我将运算结果一并编辑,方便参考。值得一提的是ArcGIS的在线帮助文档,一个实时更新的GIS宝库,很多专业性知识都可以找到答案,点击链接ArcGIS10中文帮助、ArcGIS9.3.1或9.3英文帮助。获取更过脚本例子来学习:ESRI的地理处理模型和脚本工具库是个不错的选择。由于我也是初次接触,翻译或者心得难免有纰漏之处,希望同仁们可以多多交流!前言在GIS建模或GIS数据管理中,你可能经常需要处理一系列步骤才可以完成的工作;你可能有一个工作目录下的数据需要重投影、裁剪到研究区域,或者用某种方法组合成期望的结果;我们也经常需要根据不同情形用不同方法处理数据,因此我们需要作出选择,而高质量的决策需要考虑很多低水平的决策,这可以通过脚本程序模型辅助完成。脚本编程的主要目的是使枯燥的处理数据工作自动化,通过4/69逻辑来指挥处理过程。我想自动化和逻辑是关键,它们区别于我们多数使用计算机时的交互活动。我们发E-mail,写文章或者设计地图,都需要和计算机交互,而处理一系列数据,我们需要自动化和利用逻辑来指导自动化。在地理处理脚本逻辑中,我们需要在允许我们做的事情中作出决定,比如,处理栅格数据不同于矢量数据,或为没投影的数据设置投影,或处理仅在特定时间搜集的数据集。对于重要的GIS工作来说,脚本以及其他形式的程序是必需的,而非可有可无。在接下来的联系中,我们会探索Python的使用以及创建脚本来使用ArcGIS里众多的地理处理工具。所有你能在ArcToolbox或Model中使用的工具都能够用在Python脚本中,这些脚本可以生成脚本工具,像其他地理处理工具一样使用。5/69一、Python语言基础安装PythonWin,在…\ArcGisDesktop9.3.iso\Desktop\PythonWin目录下可以找到PythonWin的安装程序,默认是不安装的,。同时会安装win32com以及允许任何脚本在基于Dispatch的地理处理过程中工作。ArcGIS10中引入了全新的PythonWindow来增强内嵌的Python体验。警告:不要尝试更新随ArcGIS安装的Python到一个新的版本!下面介绍Python的一些简单语法和规则。1数学运算符Python提供了多样化的通用数学运算符——多数编程语言的特征,以及许多通过import的modules提供的符号。常用的有+,-,*,/,**(幂),%(取模,即除后的余数)。下面的表格显示了整型(Integer)和浮点型(Float)各种组合运算的结果,记住一条规则,只要参与运算的有浮点6/69型,则结果为浮点型;全为整型时,结果才为整型。输入表达式结果Notes2+35整型结果2.+35.02.是浮点型,结果浮点型2-3-12*36整型结果2.*36.0浮点型5/22整型5./22.55%21取模Az=270Newaz=az+180Printnewaz%36090取模的用途之一——方位角加180后逆转方向5**22525**0.55.0没有sqrt()功能,除非添加math模块7/692字符串操作注:使用Python帮助:有超过30种内置方法来处理字符,请到SequenceTypes下的StringMethods寻找帮助!字符串是一串字母,比如’SanFrancisco’,字符串下标从0开始。学习字符串语法的昀好方法是自己动手尝试,下标展示之:输入结果Notesprint'zhulj'.capitalize()Zhuljs.capitalize()即将capitalize()方法用于ss='zhulj'prints.capitalize()prints[0]zStrings可以像一个字母列表一样处理,第一个字母下标为0,某个字符段可以用1:3来格式化:从第1个的开头到第3个的开头,不包括下标为3的字母;s[-1]表示倒过来第一个,相当于s[len(s)-1]s1=s[1]prints1hprints[-2:]ljprints[2:3]uprints[2:4]ulprints[2:],s[:5]uljzhuljs2=s.upper()ZHULJ我们可以将字符串方法的结果赋8/69prints2给新的变量s3=s+s2prints3zhuljZHULJ字符串组合用“+”prints*3zhuljzhuljzhulj字符串重复用“*”,后为重复次数selstr='elev1000'printselstrelev1000字符串可以使用单引号或双引号,跨行时用双引号。othersel=”’elev’1000”printothersel‘elev’1000prints.isupper()False一些方法返回值为布尔型(True或False),一些返回索引值(下标值)prints2.isupper()Truep='d:/work/lu.shp'printp.find(‘.’)10printp.find(‘/’)2plist=p.split('/')printplist['d:','work','lu.shp']你可以用split()方法解析出不同的字符串片段,并创建一个列表(List),我们可以使用其中不同的9/69元素printplist[0]d:printplist[1]workp2='d:\\work\\soil.shp'printp2d:\work\soil.shp反斜线“\”和某些字母一起有特殊用法,如\n为换行,“\”为转义字符,如“\\”则表示“\”print'Jerry\'sKids'Jerry'sKidsprint'Jerry\'s\nKids'Jerry'sKidsp3=r'd:\work\soil.shp'printp3d:\work\soil.shp字符串前加“r”则强制“\”代表其本身,而非转义字符,这对于