版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
十一、ArcGISDesktop二次开发Python介绍ArcPy介绍开发实例Python概述Python是由荷兰人吉多范罗苏姆(GuidovanRossum)在上世纪八十年代末构想并于1991年推出的一种面向对象的脚本编程语言。Python编程语言继承了传统编译语言的强大性和通用性,同时也借鉴了脚本和解释语言的易用性。1特点Python具有如下特点:开源的。Python完全开放源码,用户可以从Python网站()上免费得到所有Python相关软件;通过Python开发的产品可以无限制地分发及销售。Python网站()可移植、跨平台。Python是用可移植的ANSIC写成的,使用Python语言编写的程序可以运行在Unix、Linux、MS-Windows和其它有Python解释器的任何平台上(包括移动平台)。支持多种对象类型。Python是面向对象的编程语言,所有的数据都是对象。除数字、字符串等基本对象类型外,Python还支持列表、元组、字典等对象类型。有大量可直接调用的程序模块。Python程序模块分内部模块和外部模块,内部模块是Python软件自带的;外部模块(也称第三方模块)是一些企业和个人开发的,目前还没有集成到Python软件中,但安装后可以调用,如针对某方面应用有很多模块,这些模块通常被组织成一个包(package),如ESRI公司的Arcpy等。目前,除了已有比较完整的内部模块外,还有众多的第三方Python软件包提供的外部模块。Python集成开发环境目前有很多用于Python开发的集成开发环境。IDLE(IntegratedDeveLopmentEnvironment)是Python中自带的一个集成环境。IDLE有两种窗口:Shell窗口,交互运行的窗口,提供命令行用于输入语句,语句输入后直接执行。文本编辑器窗口,用于编辑、调试和运行模块代码,模块运行结果显示在Shell窗口中。文本编辑器窗口Shell窗口ArcGISDesktop也提供了一个可编辑、运行Python脚本文件的窗口。学习资源Python文档在IDLE中,点击F1或Help\PythonDocs,将打开Python文档。文档包括详细的教程(Tutorial)、语言参考(LanguageReference)、标准库(StandardLibrary)、常见问题的解答(PythonFrequentlyAskedQuestions)等。学习教程Python软件的发展历史Python技术交流网站目前有很多Python技术交流网站,如Python中国()、Python爱好者()等,这些网站提供了Python问题回答、案例分享、资料下载、教材教程等资源。Python中国()Python爱好者()Python图书在亚马逊网站()有很多Python方面的图书。适合Python初学者使用适合有一定Python编程经验的读者使用Python数据类型Python使用对象模型来存储数据。Python中任何一个数据都有相应的对象类型,如1234、”abcd”等,可以通过type()查看对象的类型。对象的类型决定了该对象的存储方式、可以进行什么样的操作以及要遵循什么样的规则。2Python支持的数据类型包括:数字型(Number)字符串型(String)列表型(List)元组型(Tuple)字典型(Dictionary)文件型(File)……对象的操作包括:返回对象的属性(属性读取)对对象的属性进行赋值(属性赋值)调用对象的方法(方法调用)把对象作为变量,通过函数进行处理。字符串、列表、元组、文件都是序列型数据(文件是以回车符作为分割)。“abcd”,字符串[a,b,c,d],列表(a,b,c,d),元组对序列型数据,python支持索引、切片等操作进行属性的读写。以字符串为例:索引,通过索引操作符([i])得到某个字符。字符串的索引规则是第一个字符的索引号是0,最后一个字符的索引号是n-1。Python也支持反向索引,最后一个字符是-1,第一个字符是-n。切片,通过切片操作符([i:j])得到索引号i到j-1的子字符串,如s[1:3]表示得到第二和第三两个字符组成的子字符串。>>>s="World">>>s[0]'W'>>>s[-1]'d'>>>s[0:2]'Wo'>>>s[0:-1]'Worl'对象方法调用的操作是:
object.method(args)
args是参数(不管有否参数,方法后面必须加括号)。以字符串对象为例,其支持的方法包括:字符大小写操作(改成大写、小写或互换)查找字符串中某个子串,包括首个子串的位置、数量以及替代等。字符串的分割与连接。去掉字符串左边、右边或两边的空白符(或指定字符)。……String对象方法(1)方法解释lower(),upper()分别返回s的小写(大写),如"Thisisapen".upper()。swapcase()把s中的字符大小写对换。find(sub[,start[,end]])返回子串sub在字符串s中首次出现的位置索引,如果没有就返回-1,start和end是位置索引,用于限定字符串某一段。"Thisisapen".find("is")2count(sub[,start[,end]])返回sub在s中出现的次数,start和end同find函数。"Thisisapen".count("is")2replace(old,new[,count])把s中old子串替换成new子串,count表示最前面的count个子串替换。"Thisisapen".replace("","_")'This_is_a_pen'String对象方法(2)方法解释split(sep[,maxsplit]])在指定的分隔符位置把string分开(缺省分割符为空格),并返回分开的子串的列表。maxsplit是最大分割数,当达到最大分割数时,后面的字符串不再分割,最终列表的元素为maxsplit+1个。"Thisisapen".split()['This','is','a','pen']join(iterable)把可迭代对象(如列表)中的字符串元素连接成一个字符串,字符串对象的元素作为分隔符。"_".join(['This','is','a','pen'])'This_is_a_pen'lstrip(chars)rstrip(chars)strip(chars)分别去掉s左边、右边或两边的空白符(或指定字符)。"Thisisapen".strip()'Thisisapen'更多的方法可查看Python文档(LibraryReference\Built-inTypes\StringMethods)"Thisisapen".split()['This','is','a','pen']调用split函数后,返回列表s="地理信息系统专业的课程包括地理信息系统概论、地理信息系统设计、地理信息系统开发等。"new_s=s.replace("地理信息系统","GIS")printnew_s字符串中的“地理信息系统”用GIS代替在ArcGISDesktop中,可以对属性表中的字段进行字段计算(FieldCalculator),在计算时,可以利用Number、String和Date方面的python方法。如要从原先的省名字段值中提取前两个名字,python的表达式为!NAME![0:6]。在ArcGISDesktop中,Python通过字段名两边加感叹号(!)得到字段值,如!NAME!;对汉字,一个汉字由三个字符(字节)组成。Python语句Python中的程序通过语句来生成和处理对象。Python语句分简单语句和复杂语句,简单语句只有一个逻辑行,而复合语句(也称代码块)则是由多个逻辑行组成。3语句解释表达式语句计算表达式值的语句。赋值语句给对象赋值的语句。print语句打印语句。del语句删除语句,删除对象或对象中的元素。global语句声明全局变量语句。import语句导入模块语句yield语句生成器中产生元素的语句。简单语句(1)语句解释continue语句终止当前循环,进入下一个循环语句。break语句退出循环语句。pass语句不执行任何操作的语句。Exec语句执行Python代码的语句。return语句在函数中返回值的语句。raise语句抛出异常语句。assert语句断言语句,测试一个表达式,如果返回值是false,触发异常。简单语句(2)语句解释if语句条件语句while语句while循环语句for语句for循环语句try语句捕获异常语句with语句对象上下文管理器语句定义函数语句自定义函数语句定义类语句用于自定义类语句复合语句复合语句的首行以一个冒号(:)结束,以下是一个或多个缩进的语句。缩进的空格数没有严格限制,但要保持一致,一般为4个空格。在Python中,代码缩进是一种语法,Python是通过缩进来探测复合语句的边界,代码缩进错误(位置错误)会导致语法错误。这种方式可以保持一致的代码外观,有助于可读性。if条件语句的语法如下:
if<条件表达式>:
<代码块>如果条件表达式为True,执行if语句的代码;否则的话,执行该代码块后面的语句。while语句的基本形式为:
while<条件表达式>:
<代码块>
else:
<代码块>当条件表达式为True时,继续while内的语句;当条件表达式为False时,执行else后面的语句,else语句是可选的。for循环语句通常用于遍历可迭代对象(字符串、列表、元组、字典、文件等)成员,基本形式为:
for<目标>in<对象>:
<代码块>内部模块标准Python库中含有几百个模块,包括:与Python解释器相关的模块(如sys、sysconfig等)。通用操作系统服务模块(如os、io等)。文件和目录访问模块(如os.path、filecmp等)。数字和数学计算模块(如math、random等)。网络协议和支持模块(如urllib、urllib2等)。网络数据处理模块(如email、json等)。4字符串处理模块(如string、re等)。日期和时间模块(如datetime、calendar等)。结构化标签处理模块(如HTMLParser、XML等)。……完整的列表可查看。Python文档中模块列表在启动python软件后,只有__build-ins__(内置)模块导入到内存中,这个模块中的函数可直接使用。如要用到其他模块中的函数,首先要利用import语句将其导入,可以是导入整个模块,也可以是导入模块中的指定函数。函数解释math.sin(x)math.cos(x)math.tan(x)sin、cos和tan函数,x单位为弧度。math.asin(x)math.acos(x)math.atan(x)arcsin、arccos和arctan函数,返回值的单位为弧度。math.hypot(x,y)sqrt(x*x+y*y),返回原点到(x,y)点的距离。math.degrees(x)弧度转为度math.radians(x)度转为弧度math模块中的函数math模块包含了大量数学函数在ArcGISDesktop中,对属性表中的字段进行字段计算(FieldCalculator),如类型为Number,则可利用math模块中提供的函数,如math.log(!GDP2013!)。函数解释urlopen(url[,data])打开一个由URL表示的网络对象,也可以打开本地文件。importurllibwebfile=urllib.urlopen("")s=webfile.read()printswebfile.close()urlretrieve(url[,filename[,reporthook]])把一个URL表示的网络对象拷贝(下载)到本地,网络对象可以是html网页,也可以是网页中链接的图像、文本等。importurlliburl=""urllib.urlretrieve(url,"c:\\data\\tmp\\p1.jpg")urllib模块的主要函数urllib模块用于打开及拷贝url表示的网络对象urlopen函数的运行结果有些网站提供web服务接口,用户可以在url中输入参数,返回不同的数据。如esri公司的arcgisonline提供很多地图服务,用户可以输入一个坐标范围,返回该范围的地图。importurlliburl="\/ESRI_Imagery_World_2D/MapServer/export?bbox=-180,-90,180,90&f=image"urllib.urlretrieve(url,"c:\\data\\tmp\\world.jpg")importurlliburl="\/ESRI_Imagery_World_2D/MapServer/export?bbox=72,17,136,55&f=image"urllib.urlretrieve(url,"c:\\data\\tmp\\china.jpg")importurlliburl="\/ESRI_Imagery_World_2D/MapServer/export?bbox=120,30,122,32&f=image"urllib.urlretrieve(url,"c:\\data\\tmp\\shanghai.jpg")下载全球、全国和上海全市卫星图像Python介绍ArcPy介绍开发实例什么是ArcPyArcPy是一个Python包,是ESRI公司在ArcGIS10.0中推出的。ArcGISDesktop安装后,在安装目录下有一个arcpy文件夹。ArcPy包含有Python函数、类和模块。ArcGIS10.1中有91个函数、37个类、5个模块(每个模块下又包含多个函数和类)。1从本质上来说,ArcPy实际上是对ArcObjects的相关类进行封装,使用户可以利用Python语言调用ArcObjects的相关类。ArcPy提供的功能:能访问所有gp(地处理)工具数据转换和数据管理数据分析自动化制图使用Python和ArcPy,可以开发出大量用于处理地理数据的实用程序。在ArcGIS的帮助文档中,有ArcPy的详细介绍(Geoprocessing\ArcPy),包括ArcPy的函数、类以及数据访问模块、制图模块、空间分析模块、地统计分析模块和时间模块的介绍,在同一个目录下的Python则介绍如何利用Python和ArcPy进行各种地处理。ArcPy帮助文档ArcPy函数ArcPy提供了很多函数,按类型包括:环境设置、获取和设置工具参数、信息和错误处理、工具和工具箱等。这些函数可以在ArcGIS帮助中了解具体的使用(Geoprocessing\ArcPy\ArcPyfunctions)。
2ArcPy函数列表函数的详细介绍数据列表函数数据列表(Listingdata)函数用于返回当前工作空间的数据列表以及数据集中的字段、索引列表等。其中,数据列表可以指定数据类型以及利用通配符参数(wild_card)对列表数据进行限定;字段列表可以指定字段类型。工作空间可以是文件夹,也可以是数据库。函数解释ListFiles(wild_card)返回当前工作空间中的文件列表。ListDatasets(wild_card,feature_type)返回当前工作空间中的数据集列表。ListFeatureClasses(wild_card,feature_type)返回当前工作空间中的要素类列表。ListRasters(wild_card,Raster_type)返回当前工作空间中的栅格数据列表。ListTables(wild_card,Table_type)返回当前工作空间中的表格数据列表。ListWorkspacees(wild_card,Workspace_type)返回当前工作空间中的工作空间列表。ListFields(dataset,{wild_card},{field_type})返回数据集中的字段列表。ListIndexes(dataset,{wild_card})返回数据集中的索引列表。ListVersions(sde_workspace)返回版本列表。数据列表函数ArcGIS支持的字段类型importarcpyfromarcpyimportenvenv.workspace="c:\\data\\USA"fcs=arcpy.ListFeatureClasses()forfcinfcs:printfc显示指定文件夹中的所有要素类importarcpyfds=arcpy.ListFields("c:\\data\\USA\\states.shp","","String")forfdinfds:显示states.shp的所有字符串型字段名ArcPy类ArcPy目前已定义30几个类,包括:envSpatialReferenceCursor和Row几何对象类(包括PointGeometry、Multipoint、Polyline、Polygon以及Geometry)Raster……3Cursor和RowCursor是一个数据访问对象,也可认为是一个枚举对象。有三种类型:search、insert和update,分别用于表格数据的查询、插入和更新。
Row对象表示表格数据中的一个记录,可以通过Cursor对象的迭代得到。Cursor对象方法Cursor类型方法解释Searchnext()返回当前位置的下一个Row对象reset()返回第一个位置的Row对象InsertnewRow()产生一个空的Row对象insertRow(row)在Cursor中插入一个新的row对象next()reset()UpdatedeleteRow(row)删除一个row对象updateRow(row)利用row更新当前对象next()reset()方法解释getValue(field_name)或field_name得到字段值setValue(field_name,object)设置字段值isNull(field_name)字段值是否为NullsetNull(field_name)设置字段值为NullRow对象方法importarcpyfromarcpyimportenvenv.workspace=“C:\\Data\\USA"cur=arcpy.SearchCursor("States.shp")forrowincur:printrow.STATE_NAME,row.POP1990打印每个州的名称和人口几何对象ArcGIS支持点(point)、多点(Multipoint)、线(Polyline)和多边形(Polygon)等几何类型。point几何类型中,一个记录只有一个点;而Multipoint几何类型中,一个记录可以由多个点组成。Polyline和Polygon几何类型中,一个记录可以由多个部分(parts)组成,每个部分都是由点组成。ArcPy中的几何对象类包括PointGeometry、Multipoint、Polyline、Polygon以及Geometry,其中Geometry是其它类的父类。和几何对象相关的类:Point类和Array类。Point不是一个几何对象类,但所有的几何对象都是基于Point对象来构建,同样,所有几何对象的坐标值也是通过Point对象来读取。产生Point对象句法:
Point({X},{Y},{M},{Z},{ID})
缺省情况下,X、Y和ID为0,M和Z为None。Array是一个阵列对象,可以包含任意数量的Point对象及其它对象(如Array对象、spatialreferences对象等),有add、append、remove等方法,用来构建由多点组成的几何对象。句法解释PointGeometry(inputs,{spatialReference},{hasZ},{hasM})产生点几何对象。inputs为产生对象的坐标,数据类型为Point;sspatialReference为空间参照对象;hasZ和hasM是布尔对象,表示是否支持Z值和M值。Multipoint(inputs,{spatialReference},{hasZ},{hasM})产生多点几何对象。inputs数据类型为Point或Array对象;其它参数同PointGeometry。Polyline(inputs,{spatialReference},{hasZ},{hasM})产生线几何对象。参数同上。Polygon(inputs,{spatialReference},{hasZ},{hasM})产生多边形几何对象。参数同上。Geometry(geometry,inputs,{spatialReference},{hasZ},{hasM})Geometry为几何类型(point、polygon、polyline或multipoint),其它参数同上。
创建点、多点、线和多边形几何对象函数利用CopyFeatures工具可以把几何对象或几何对象列表写到要素类中。CopyFeatures_management(in_features,out_feature_class,{config_keyword},{spatial_grid_1},{spatial_grid_2},{spatial_grid_3})importarcpyfromarcpyimportenvenv.workspace="C:\\Data\\tmp"env.overwriteOutput=Truex=30y=35pnt=arcpy.Point(x,y)pointGeometry=arcpy.PointGeometry(pnt)arcpy.CopyFeatures_management(pointGeometry,"point")创建只有一个点的点要素类(可以在ArcGISDesktop的python窗口中运行
)利用迭代方式产生点序列。先确定三个固定点a、b和c,坐标分别为(0,0)、(10,0)和(5,10),然后确定点序列的初始点x0(5,5)。从三个固定点中随机选取一个点,计算该点与x0之间的中点坐标,得到一个新点x1,并以该点计算下一个点x2。通过循环,得到点序列。假定有100000个点,最终这些点组成的图案会是什么样子?importarcpyimportrandomd={"1":[0,0],"2":[10,0],"3":[5,10]}c=[5,5]point=arcpy.Point()array=arcpy.Array()foriinrange(1,101):number=random.choice("123")if(d[number][0]-c[0])>0:x=(d[number][0]-c[0])/2.0+c[0]else:x=(c[0]-d[number][0])/2.0+d[number][0]if(d[number][1]-c[1])>0:y=(d[number][1]-c[1])/2.0+c[1]else:y=(c[1]-d[number][1])/2.0+d[number][1]c=[x,y]point.X=xpoint.Y=yarray.add(point)points=arcpy.Multipoint(array)arcpy.CopyFeatures_management(points,"c:\\data\\p100.shp")Python编程基础ArcPy介绍开发实例基于Python和ArcPy编程的主要目的:批处理构建工作流新工具批处理ArcGIS中大多数工具的数据处理是输入一个数据,然后输出一个数据,不能对多个数据进行相同的处理,也不能对同个数据进行不同处理(不同参数)。
批处理就是实现对多个数据进行相同的处理,以及对同个数据进行不同处理(不同参数)。1实例一:对一个文件夹中的数据(要素类)进行批处理切割(clip)操作,输出数据存放在另一个文件夹中,每个数据的名称为“clip_”加原有数据的文件名。函数参数Clip_analysis(in_features,clip_features,out_feature_class,{cluster_tolerance})in_features:输入要素类clip_features:切割要素类out_feature_class:输出要素类cluster_tolerance:容差Clip工具函数Clip操作示意图importarcpyfromarcpyimportenvenv.workspace="C:\\data\\input"clipFeature="c:\\data\\clipFeature.shp"fcs=arcpy.ListFeatureClasses()forfcinfcs:outFeatureClass="c:\\data\\output\\clip_"+fcarcpy.Clip_analysis(fc,clipFeature,outFeatureClass)批处理切割操作实例二:对一个文件夹中的数据(要素类)进行批处理分割(split)操作,每个输入数据分割后产生的多个数据存放到一个新建的文件夹中,文件夹名为输入数据的文件名(不包括扩展名)。函数参数Split_analysis(in_features,split_features,split_field,out_workspace,{cluster_tolerance})in_features:输入要素类split_features:分割要素类split_field:分割字段out_workspace:输出工作空间cluster_tolerance:容差split工具函数split操作示意图importarcpyfromarcpyimportenvimportosenv.workspace="C:\\data\\input"splitFeature="c:\\data\\shanghai.shp"fcs=arcpy.ListFeatureClasses()forfcinfcs:path="c:\\data\\output\\"+fc.split(".")[0]os.mkdir(path)arcpy.Split_analysis(fc,splitFeature,"NAME",path)批处理分割操作实例三:利用SimplifyLine(Cartography)工具简化我国大陆海岸线。设定不同的容差参数值,得到不同简化程度的海岸线。对每一个输出海岸线,计算顶点数及线长度,并与原始数据的顶点数和线长度进行比较。设置精度阈值,确定符合精度要求、数据压缩比最高的结果。
simplifyLine操作示意函数参数SimplifyLine_cartography(in_features,out_feature_class,algorithm,tolerance,{error_resolving_option},{collapsed_point_option},{error_checking_option})in_features:输入要素类out_feature_class:输出要素类algorithm:简化算法,pointremove和bendsimplify。tolerance:容差error_resolving_option:拓扑错误的处理collapsed_point_option:零长度线是否作为点数据保存。error_checking:拓扑错误的检查simplifyLine工具函数importarcpyfromarcpyimportenvimportarcpy.cartographyasCAenv.workspace="C:\\data"forrinrange(1,6):tolerance=r*1000output="c:\\data\\tmp\\"+str(tolerance)+".shp"CA.SimplifyLine("coastline.shp",output,"POINT_REMOVE",tolerance)cur=arcpy.SearchCursor(output,"")forrowincur:geometry=row.shapeprintgeometry.pointCountprintgeometry.lengthdelcur,row设定5个容差(1km、2km、3km、4km和5km),输出不同简化程度的海岸线,计算点数和长度。importarcpyfromarcpyimportenvimportarcpy.cartographyasCAenv.workspace="C:\\data"cur=arcpy.SearchCursor("coastline.shp","")forrowincur:geometry=row.shapecoastline_Points=geometry.pointCountcoastline_Length=geometry.lengthprintcoastline_Pointsprintcoastline_Length计算原始海岸线的点数和长度Accuracy=1.0i=0whileAccuracy>0.8:i=i+1tolerance=i*1000output=arcpy.CreateUniqueName("c:\\data\\tmp\\tolerance.shp")CA.SimplifyLine("coastline.shp",output,"POINT_REMOVE",tolerance)cur=arcpy.SearchCursor(output,"")forrowincur:geometry=row.shapeAccuracy=geometry.length/coastline_Lengthratio=float(geometry.pointCount)/float(coastline_Points)print"tolerance=",tolerance,"Accuracy:",Accuracy,"ratio:",ratiodelcur,rowprint"besttoleranceis%d"%(tolerance)改变容差(每次增加1km),计算符合精度要求、数据压缩比最大的容差,并输出结果。
构建工作流工作流是由多个处理工具组成,一个工具的输出可以作为另一个工具的输入,这样,原先需要利用多个工具才能实现的工作可以通过一个工作流来实现。工作流运行过程会产生一些临时(中间)文件,一般情况下,需要在程序运行结束时,删除这些临时文件。2实例一:分析道路两侧植被。通过Buffer工具对道路进行缓冲分析。通过Clip工具用道路缓冲范围对植被图进行切割。利用SummaryStatistics工具对切割出的植被进行统计(按植被类型统计面积)。函数参数Statistics_analysis(in_table,out_table,statistics_fields,{case_field})in_table:输入表,可以是要素类。out_table:输出表。statistics_fields:统计字段,参数类型为复合列表,子列表有两个元素,数字型字段和统计类型,可用的统计类型包括SUM、MEAN、MAX、MIN等。case_field:分组字段。Statistics_analysis工具函数
importarcpyfromarcpyimportenvenv.workspace="C:\\data"inputRoad="majorrds.shp"buf="500"vege="vegetype.shp"stat_Field=[["Shape_Area","SUM"],["Shape_Area","MAX"]]case_Field="HOLLAND95"output="c:\\data\\tmp\\stat"scratch_Name1=arcpy.CreateScratchName("xxxx","","Shapefile","C:\\data")arcpy.Buffer_analysis(inputRoad,scratch_Name1,buf)scratch_Name2=arcpy.CreateScratchName("xxxx","","Shapefile","C:\\data")arcpy.Clip_analysis(vege,scratch_Name1,scratch_Name2)arcpy.Statistics_analysis(scratch_Name2,output,stat_Field,case_Field)arcpy.Delete_management(scratch_Name1)arcpy.Delete_management(scratch_Name2)分析道路两侧植被(程序中设置参数)importarcpyinputRoad=arcpy.GetParameterAsText(0)buf=arcpy.GetParameterAsText(1)inputVege=arcpy.GetParameterAsText(2)stat_Field=arcpy.GetParameterAsText(3)stat_Type=arcpy.GetParameterAsText(4)case_Field=arcpy.GetParameterAsText(5)output=arcpy.GetParameterAsText(6)stat_Fields=[[stat_Field,stat_Type]]scratch_Name1=arcpy.CreateScratchName("xxxx","","Shapefile","C:\\data")arcpy.Buffer_analysis(inputRoad,scratch_Name1,buf)scratch_Name2=arcpy.CreateScratchName("xxxx","","Shapefile","C:\\data")arcpy.Clip_analysis(inputVege,scratch_Name1,scratch_Name2)arcpy.Statistics_analysis(scratch_Name2,output,stat_Fields,case_Field)arcpy.Delete_management(scratch_Name1)arcpy.Delete_management(scratch_Name2)分析道路两侧植被(从工具对话框中获得参数)参数设置参数类型inputRoadFeatureLayerbufDoubleinputVegeFeatureLayerstat_FieldField,参数属性中的Obtainedfrom选择inputVege。stat_TypeString,参数属性中的Filter选择ValueList,并设置列表值,如SUM、MEAN、MAX、MIN等。case_FieldField,参数属性中的Obtainedfrom选择inputVegeoutTableTable工具对话框参数设置实例二:分析1000米范围内没有公园分布的区域(考虑河流等不能直接通过的障碍)。SpatialAnalyst工具箱提供了基于栅格的距离计算工具,输出数据的栅格值表示与最近目标的距离,其中,EuclideanDistance计算栅格与目标的欧氏距离;CostDistance计算栅格与目标的费用距离(即考虑经过不同栅格时的费用)。
在利用CostDistance工具时,需要用到cost_raster(费用栅格数据),该数据的栅格值表示通过该栅格的费用,空值表示不能通过(即障碍)。函数参数CostDistance(in_source_data,in_cost_raster,{maximum_distance},{out_backlink_raster})in_source_data:输入数据in_cost_raster:费用栅格,表示栅格是否可通过或通过栅格的费用,空值表示不能通过。CostDistance工具函数步骤(首先要产生cost栅格,把河流覆盖区域设置为空值,其它区域的栅格值设置为1):河流多边形转栅格(PolygonToRaster_conversion),河流覆盖的栅格为非空值,其它栅格为空值。利用IsNull工具把空值转为1,非空值转为0。利用SetNull工具把0(河流覆盖区域)设置为空值。利用CostDistance(in_source_data,in_cost_raster)工具计算每个栅格与公园的距离,in_cost_raster为有空值(河流覆盖)的栅格数据。利用Con工具把距离大于1000的栅格设置为0。函数说明PolygonToRaster_conversion(in_features,value_field,out_raster_dataset,{cell_assignment},{priority_field},{cellsize})in_features:输入要素类value_field:值字段out_raster_dataset:输出栅格数据集IsNull(in_raster)in_raster:输入栅格。该函数返回一个栅格,输入栅格中空值(NoData)栅格为1,其它非空栅格为0.SetNull(in_conditional_raster,in_false_raster_or_constant,{where_clause})in_conditional_raster:输入栅格in_false_raster_or_constant:栅格或常数(用于给不符合表达式的栅格赋值)where_clause:SQL表达式该函数返回一个栅格,输入栅格中符合表达式的栅格为NoData,其它栅格为设定的栅格值或常数值。Con(in_conditional_raster,in_true_raster_or_constant,{in_false_raster_or_constant},{where_clause})in_conditional_raster:输入栅格in_true_raster_or_constant:栅格或常数(用于给符合表达式的栅格赋值)in_false_raster_or_constant:栅格或常数(用于给不符合表达式的栅格赋值)where_clause:SQL表达式相关的空间分析工具函数importarcpyfromarcpyimportenvfromarcpy.saimport*arcpy.CheckOutExtension("Spatial")env.workspace="C:\\data"desc=arcpy.Describe("ClipFeature.shp")env.extent=desc.extentsName=arcpy.CreateScratchName("x","","RasterDataset","C:\\data\\tmp")arcpy.PolygonToRaster_conversion("rive
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《光电子学》课程教学大纲
- 《社会保障学》课程教学大纲
- 2024年低价别墅出卖合同范本
- 2024年出售安建回迁房合同范本
- 2024年承接墙安装工程合同范本
- 光学镜片加工培训
- 统编版五年级语文上册第三次月考综合测试卷(含答案)
- 冠脉支架术及护理
- 做幸福的教师培训
- 2024标准正规借款合同范文
- 国企廉洁从业培训-《严守纪律底线、坚持廉洁从业》
- DB37-T 5020-2023 装配式建筑预制混凝土构件制作与验收标准
- 尿管滑脱不良事件分析
- 课题结题材料初中生心理健康教育设计研究
- 沥青路面用木质素纤维检测原始记录
- 露天煤矿边坡监测报告
- 化脓性脑膜炎英文
- 压疮登记表模板
- 统计分析报告的写作技巧课件
- 2023-2024学年广西壮族自治区南宁市小学语文三年级期末自测试卷附参考答案和详细解析
- 第14课 清朝前中期的鼎盛与危机 同步课件
评论
0/150
提交评论