2.ArcPy

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第1章ArcPy简介1.1什么是ArcPy?ArcPy是一个以成功的arcgisscripting模块为基础并继承了arcgisscripting功能进而构建而成的站点包。目的是为以实用高效的方式通过Python执行地理数据分析、数据转换、数据管理和地图自动化创建基础。该包提供了丰富纯正的Python体验,具有代码自动完成功能(输入关键字和点即可获得该关键字所支持的属性和方法的弹出列表;从中选择一个属性或方法即可将其插入),并针对每个函数、模块和类提供了参考文档。在Python中使用ArcPy的另一个主要原因是,Python是一种通用的编程语言。Python是一种支持动态输入的解释型语言,适用于交互式操作以及为称为脚本的一次性程序快速制作原型,同时其具有编写大型应用程序的强大功能。用ArcPy编写的ArcGIS应用程序的优势在于,可以使用由来自多个不同领域的GIS专业人员和程序员组成的众多Python小群体开发的附加模块。1.2ArcPy快速浏览利用ArcPy可访问地理处理工具和其他函数、类和模块,使用它们可快速轻松地创建简单或复杂工作流。使用以ArcPy编写的ArcGIS应用程序和脚本的优势在于,可以访问并使用由来自多个不同领域的GIS专业人员和程序员开发的大量Python模块。一般来说,ArcPy按工具、环境、函数、类和模块进行组织。1、运行工具以下示例显示了如何执行缓冲区工具。执行该工具时,消息将默认显示在帮助部分中Python窗口的右侧。例1.1执行缓冲区工具arcpy.Buffer_analysis(c:/data/Portland.gdb/streets,c:/data/Portland.gdb/steets_buffer,500METERS)以下是另一个运行工具的示例。该示例使用的是数据管理工具箱和转换工具箱中的工具。向输入streets要素类添加一个字段并计算该字段,然后将要素类加载到ArcSDE企业级地理数据库中。例1.2执行多个工具arcpy.AddField_management(c:/data/Portland.gdb/streets,LENGTH_MILES,TEXT)arcpy.CalculateField_management(c:/data/Portland.gdb/streets,LENGTH_MILES,!shape.length@miles!,PYTHON_9.3)arcpy.FeatureClassToFeatureClass_conversion(c:/data/Portland.gdb/streets,DatabaseConnections/MySDE.sde/PortlandDataset,streets)2执行地理处理工具时,工具的结果会返回到result对象中。通常,该对象是由工具生成或更新的输出数据集的路径。在其他情况下,它可能会包含其他类型的值,如数值或布尔值。如果工具的输出是多值参数,则这些值可在列表中以列表的形式返回。以下代码示例显示了如何捕获返回值以及这些值的具体内容:返回输出要素类的路径,该结果可用作其他函数的输入;返回要素数目。例1.3从工具获取结果result=arcpy.Buffer_analysis(rivers,riverBuf,50METERS)printresultC:\Portland\Portland_OR.gdb\riverBufarcpy.Clip_analysis(streets,result,streets_50m_of_rivers)result=arcpy.GetCount_management(streets_50m_of_rivers)printresult.getOutput(0)542、使用环境设置可将地理处理环境设置视为影响工具执行结果的附加参数。这些参数与正常的工具参数不同,因为它们是通过工具单独进行设置的,并且供工具在运行时查询和使用。诸如感兴趣区域、输出数据集的坐标系以及新栅格数据集的像元大小等环境设置均可通过工具进行指定和支持。可通过env类来获得属性形式的环境设置。这些属性可用于检索和设置当前环境值。下面是如何使用环境值的示例:例1.4设置工作空间环境arcpy.env.workspace=c:/data/Portland.gdbarcpy.Buffer_analysis(streets,streetBuf,500METERS)arcpy.env.spatialGrid1=arcpy.CalculateDefaultSpatialGridIndex_management(streets).getOutput(0)ifarcpy.env.cellSize!=30:arcpy.env.cellSize=303、使用函数函数是用于执行某项特定任务并能够纳入更大的程序的已定义功能。除工具之外,ArcPy还提供了多种函数,用来更好地支持地理处理工作流。函数可用于列出某些数据集、检索数据集的属性、检查数据是否存在、在将表添加到地理数据库之前验证表名称,或执行其他许多有用的脚本任务。以下示例代码显示的是获得数据的属性:例1.5使用函数importarcpy#printsTrue3printarcpy.Exists(c:/data/Portland.gdb/streets)#printsNAD_1983_StatePlane_Oregon_North_FIPS_3601_Feetsr=arcpy.Describe(c:/data/Portland.gdb/streets).spatialReferenceprintsr.name4、使用类ArcPy类,如SpatialReference和Extent类,通常用作地理处理工具参数设置的快捷方式,否则的话,这些参数会使用更加复杂的字符串。类的作用类似于建筑设计蓝图。蓝图为如何创建事物提供了一个框架,而类则可用来创建对象,即通常所称的实例。例1.6使用类importarcpyspatial_ref=arcpy.SpatialReference(HawaiiAlbersEqualAreaConic)5、使用模块ArcPy包含涉及其他ArcGIS领域的模块。有一系列模块支持ArcPy,包括数据访问模块(arcpy.da)、制图模块(arcpy.mapping)、ArcGISSpatialAnalyst扩展模块(arcpy.sa)和ArcGISNetworkAnalyst扩展模块(arcpy.na)。例如,arcpy.sa模块中的工具将使用SpatialAnalyst工具箱中的工具,但被配置为支持“地图代数”。因此,执行arcpy.sa.Slope与执行SpatialAnalyst工具箱中的坡度工具的作用是相同的。4第2章使用ArcPy准备工作2.1导入ArcPy在导入ArcPy之后,可以运行随ArcGIS安装的标准工具箱中的所有地理处理工具。例2.1导入ArcPy#Importingarcpyimportarcpy模块为通常包含函数和类的Python文件。有一系列模块支持ArcPy,包括制图模块(arcpy.mapping)、SpatialAnalyst模块(arcpy.sa)和GeostatisticalAnalyst模块(arcpy.ga)。要导入整个模块,请使用导入模块:例2.2导入模块#Importonlyarcpy.mappingimportarcpy.mapping在很多情况下,用户可能不想使用整个模块或无需使用整个模块。如果只导入某一模块的一部分,可以使用from-import语句。在下例中,将导入env类(env类包含所有地理处理环境)。现在无需以arcpy.env的形式访问环境,而可以将其简化为env。例2.3导入部分模块#Importenvfromarcpyandsettheworkspaceenvironmentfromarcpyimportenvenv.workspace=c:/data遵循相同的思路,有时用户可能需要注意:如何对模块或模块的一部分进行标识以使脚本更具可读性,以及对于首选项来说默认名称可能过长。在上述任一情况下,均可以使用from-import-as的形式。与先前的示例相同,下面的示例中也将导入env类,但会指定ENV作为env类的名称:例2.4使用别名#ImportenvfromarcpyasENVandsettheworkspaceenvironmentfromarcpyimportenvasENVENV.workspace=c:/data模块的内容将被直接导入到命名空间中,这表示用户随后可以直接使用所有这些内容,而无需为它们添加前缀。使用此方法存在一些风险。具有相同名称的其他对象、变量、模块等将被覆盖,另外在使用大型模块时,命名空间可能会变得异常拥挤和杂乱。此方法可能导致在阅读脚本时出现不确定或难以阅读的情况。5但是在某些情况下,from-import-*可以简化代码,例如,在使用ArcGISSpatialAnalyst扩展模块的sa模块的情况下。sa模块的优势之一在于,可以在一行中嵌套多个类和函数以生成输出栅格对象。例2.5直接导入#Importarcpyandthesamoduleimportarcpyfromarcpyimportsaarcpy.CheckOutExtension(spatial)#GetinputparametersinRaster1=arcpy.GetParameterAsText(0)inRaster2=arcpy.GetParameterAsText(1)inRaster3=arcpy.GetParameterAsText(2)outRaster=(sa.Raster(inRaster1)+(sa.Raster(inRaster2)-sa.Raster(inRaster3)))2.2地理处理环境设置(env)每个工具都含有一组用于执行操作的参数。其中一些参数在所有工具中通用,如容差或输出位置。这些参数可从所有工具在运行期间使用的地理处理环境中获得默认值。执行某一工具时,当前环境设置也可用作全局输入参数值。诸如感兴趣区域、输出数据集的空间参考以及新栅格数据集的栅格像元大小等设置都可以使用地理处理环境指定。1、获取和设置环境设置环境设置以env类的属性的方式公开。这些属性可用于检索或设置当前值。每个环境设置都有一个名称和一个标注。标注显示在ArcGIS中的环境设置对话框上。名称用在脚本或ArcGIS应用程序的命令行中。下面是如何使用环境值的示例:环境可作为环境类中的读/写属性进行访问,方法为arcpy.env.环境名称。还可以利用Python的from-import语句简化代码,而不必为每个环境名称都添加arcpy.env前缀。例2.6设置环境值importarcpyfromarcpyimportenv#Settheworkspaceenvironmentsetting#env.workspace=c:/St_Johns/data.gdb#SettheXYToleranceenvironmentsetting#env.XYTolerance=2.5#Calculatethedefaultspatialgridindex,divideinhalf,then#setthespatialgrid1environmentsetting#result=arcpy.CalculateDefaultGridIndex_management(roads)6env.spatialGrid1=float(result.getOutput(0))/2#Cliptheroadsbytheurbanareafeatureclass#arcpy.Clip_analysis(roads,urban_area,urban_roads)例2.7获取和设置环

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功