
地理信息系统应用:第八讲 ArcGIS地理处理框架.ppt
104页第八讲 ArcGIS地理处理框架(Geoprocessing Framework),一、什么是geoprocessing framework,GeoProcessing Framework(GP)是一系列工具的组合,并在框架内实现对工具的管理工具通过交互式的图形界面完成工具运行所需参数的输入、输出自动化数据管理: 投影和剪切,建模分析: 公园选址,二、为何使用GP,创建工具、模型以及脚本等使工作流程化为所有GIS用户提供数据分析、管理和转换的工具为使用和创建工具提供灵活的框架为和其他的系统与模型简单集成提供了一个框架,三 GP Framework的组成,1.工具(ArcToolBox)用来执行GIS数据处理的最基本的功能单元ArcToolbox是工具箱的集合,工具箱用来组织和共享工具方便使用的对话框是主要工具界面适用于特殊的空间处理,功能数量取决于产品和扩展模块的许可ArcView许可(159个工具) 简单数据分析ArcEditor许可(184个工具) 高级数据分析ArcInfo许可(273个工具) 企业级的GIS 完全访问叠加分析功能 完全自动化复杂工作流扩展 网络分析, 空间分析, 3d等。
2. 模型(ModelBuilder)可视化的编程环境,通过对现有工具的组合完成新模型或软件的制作,模型和模型编辑器模型是工作流的可视化表达一系列工具的组合,一个工具的输出可以直接作为另一个工具的输入模型即工具自动化工作流-制作可重用的工作流让你从繁琐的任务执行模式中解脱出来例如,在ArcGIS里你无需通过菜单、按钮以及编程对象来完成一个简单的裁减或者缓冲,只需通过一个简单快捷的工作流模型即可完成3. 命令行(Python窗口)以命令行的方式执行GP Framework中的所有工具,4. 脚本,两种基本的语言: 系统& 脚本系统语言:C+, .Net, Java;从底层创建最基础的应用程序;脚本语言:Python, VBScript, Java script, Perl;便于整合各种应用,高级的功能封装,隐藏了复杂的细节;便于学习和使用只需要了解基本编程即可上手;脚本类似于模型,可以创建新的工具,地理处理小结,地理处理指的是用来生成派生数据集的工具和处理过程;数据工具新的数据;地理处理框架特点:地理处理成为ArcGIS体系结构的核心多种使用方式(对话框,命令行,模型编辑器,脚本,GP对象);可视化工作流建模;地理处理使地理分析和建模可视化,流程化,网络化,使地理处理知识过程可共享;可扩展开发,便于与其它应用集成。
四、如何使用GP Framework,使用现有GP Tool或根据现有工具构建的Model根据业务逻辑自定义GP ToolModelBuilder用脚本开发(ArcPy)用系统语言开发(C+,C#等),五、Geoprocessing与ArcObjects,核心的GP Tool以及GP Framework都是用AO构建的AO主要用于对ArcGIS现有功能进行扩展GP Framework则侧重于任务的自劢化完成AO与GP互为补充,六、modelbuilder,优点:简单快速可视化集中参数控制可以转成脚本,缺点:系统工具灵活性,(一)特点,1.模型编辑器,(二)基本概念,2 模型元素,3. 模型过程,4.模型参数,5. 模型状态,Application-level: 缺省设置,应用到所有工具. Tool-level: 应用到单个工具,覆盖application-level设置. Model-level:应到到模型,覆盖tool-level和application-level. Model process-level:应用到模型过程,保存到模型,覆盖model-level.,6. 模型环境设置,7.模型验证,数据变量验证,值变量验证,8. 在ModeLbuilder内运行模型,9. 不完整派生数据的处理,数据转换工具脚本工具Split工具Create Table工具,处理:(1).手工输入值,(2).运行子过程,(三)创建模型工具,1.创建变量,(1)输入变量,(2)输出变量,当添加个一个工具(Tool)到模型中时,自动创建一个连接到它的输出变量。
3)改变数量数据类型,(4).暴露工具参数作为变量,2.创建模型参数,cannot run within ModelBuilder, BUT tool dialog box.,改变参数类型,参数过滤,七、Python,(一)Python简介由Guido van Rossum创建的脚本语言,其最大特点是简单而又独特的语法脚本语言解释性语言面向对象、面向过程高级动态编程语言胶水语言,优点简单易学免费、开源可移植,跨平台解释性面向对象可扩展性可嵌入性丰富的类库资源规范的代码,缺点强制缩进单行语句命令行输出运行速度架构选择太多,应用范围系统编程图形处理(PIL、Tkinter)数学处理(NumPy)文本处理(SGML,XML分析模块)数据库编程(Gadfly模块)网络编程(Sockets编程)Web编程多媒体应用(PyOpenGL,PyGame),Python开发环境,官网:www.python.org开发环境:VIM,Emacs等文本编辑器;PythonWin,自带IDLEwing,PyDev,Boa Constructor,(二)Python语法1.脚本基本结构,不使用花括号表示语句块,而是使用缩进If abif a=1: print aelse:print b处于同一级别的代码缩进,其缩进量要一致!,字符“#”为注释符,只作用于所在行如果进行大段注释,使用3个单引号或3个双引号该段代码判断a,b的大小并根据不同的情况输出if ab: #判断a,b大小print a #输出aelse:print b #输出b“”判断代码结束“”,一般一条语句占用一行,但也可以使用分号“;”将两条语句写在一行如果缩进语句只有一行,也可以写在冒号“:”之后如果语句较长,需分成几行写时,可以使用“”或者用一对圆括号,if ab:print aelse:print bPrint a;print b,c=a*2 +b *3c=(a*b-1+3/2),单引号和双引号都可以用来包围字符串,单引号中字符串可以包含双引号,反过来也一样,不需要使用转义字符,a = “whats your name?”b = I say:”what is your name?”,三个单引号或三个双引号所包围的字符串不仅可以作为注释,还可以作为格式化的字符。
a = 此处是格式化的字符此处的缩进将输出在这里也可以使用或者”“”当然还有三个双引号“”,2.基本数据类型,2.1 数字,2.2 运算符,2.3 字符串,由 、” ”、 、” “”包围的字符、数字、控制符如果要在字符中包含控制字符,或者要表示特殊含义的符号,需要使用转义字符,常见转义字符,如果想要指示某些不需要如转义符那样的特别处理的字符串,那么需要指定一个自然字符串自然字符串通过给字符串加上前缀r或R来指定例如:r Newlines are indicated by n常见字符串操作,字符串相当于一个不可变序列的列表,可以使用“”来访问指定位置上的字符,下标从0开始Python允许以负数表示下标,负数表示从字符串尾部开始计算,此时最后一个字符的序号是-1,Str= abcdefgStr2Str-2str(1:4 #取从字符串中第2个字符直到第5个字符, #但不包括第5个字符str1:1Str:-2,3 基本语句,3.1 if语句基本形式:if :elif :else:,3.2 for语句基本形式:for in :if :break #终止循环if:continue#跳过其他语句继续循环else:#可选,如果循环未被break终止则执行,3.3 while语句,一般形式:while :if:breakif:continueelse:#可选,当while循环条件变为False的时候执行,4 函数,4.1函数的声明一般形式:def (参数列表):return 其中参数和返回值不是必需的。
def ListSum(L):result = 0for I in L:result = result + Ireturn result,4.2 函数中的参数Python中函数的参数有多种形式4.2.1 参数默认值一般形式:def (参数=默认值):,def cube (x=5):return x*3Cube(2)8,如果一个函数具有多个参数默认值,在调用函数传递参数时,如果忽略前面的参数,需要注意函数的定义def cube(x=1,y=2,z=3):return x*y*zcube(, ,5) #error,修改函数的定义:def cube(x=None,y=None,z=None):if x=None:x=1if y=None:y=2if z=None:z=3return x*y*z,调用:cube(None,None,5),4.2.2 参数传递Python中参数值的传递是按照声明函数时参数的顺序进行传递的,同时还提供了一种按照参数名传递值的方式,此时不必按照函数声明时的参数顺序进行赋值调用函数时可以同时按照两种方式传递参数,但按顺序传递的参数要位于按参数名传递的参数之前,且不能有重复的情况!,def fun(x,y,z): return x+y-zfun(1,2,3)0fun(z=1,x=2,y=3)4,fun(1,z=3,y=2)6fun(z=3,y=2,1) #errorfun(5,z=6,x=7) #error,4.2.3 可变长参数Python中函数可以具有任意个参数,而不必将所有参数定义。
使用可变长参数的函数将其所有参数保存在一个元组里声明一个可变长参数的函数只需以“*”开头定义一个参数即可def mylistappend(*list): l = for i in listl.extend(i) return l,a=1,2,3b=4,5,6c=7,8.9mylistappend(a,b)1,2,3,4,5,6,4.2.4 参数引用Python中可以在参数中使用可变对象,如列表等,来达到改变参数值的目的,def changeValue(x):x0=x0*2a =2changValue(a)a4,4.3 作用域在Python中,不同的函数可以具有相同的参数名在函数里已经声明的变量名还可以在函数以外继续使用,而在脚本运行过程中,其值并不相互影响,def fun1(x):a=1a.append(x)print aa = 2,3,4fun1(2)1,2a2,3,4,如果要在函数中使用函数外的变量,可以在变量名前使用global关键字def fun(x):global areturn a+xa =5fun(3)8a=2fun(3)5,4.4 lambda表达式,Lambda表达式是Python中比较特殊的声明函数的方式。
使用它可以声明一个匿名函数使用lambda声明的函数返回一个值,在调用函数的使用直接使用lambda表达式的返回值一般形式:lambda 参数列表:表达式,fun = lambda x:x*x-x #定义函数,返回地址fun(3)6fun at 0 x0111b970 #fun指向函数地址,与def声明的函数不同,使用lambda声明的函数,在函数中仅包含单一的参数表达式,而不能包含其他的语句在lambda中也可以调用其他的函数def show():print lambda f = lambda : show() f()lambdadef shown(n):print lambda*nfn = lambda x:shown(x)fn(2)lambdalambda,fun = lambda x : print x #不能在lambda中使用print语句fun = lambda x: if x=0 : x =-x #不能在 。
