分享

ArcPy(ArcGIS的Python?API)

 昵称QAb6ICvc 2013-01-23

ArcPy(ArcGIS的Python API)

(2012-11-29 08:13:10)
标签:

校园

分类: 工作篇

ArcGIS Python开发 http://wenku.it168.com/d_000092497.shtml

 

 

ArcPy 基本词汇

本文档介绍了要理解 ArcPy 帮助需要掌握的一些词汇。

Term

Definition

ArcPy

ArcGIS 10 采用了 ArcPy(通常称为 ArcPy 站点包),为用户提供了使用 Python 语言操作所有地理处理工具(包括扩展模块)的机会,并提供了多种有用的函数和类,以用于处理和询问 GIS 数据。站点包是 Python 术语,表示将附加函数添加到 Python 的库。使用 Python 和 ArcPy,可以开发出数量无限的可用于处理地理数据的实用程序。

ArcPy modules

模块为通常包含函数和类的 Python 文件。有一系列模块支持 ArcPy,包括制图模块 (arcpy.mapping)、Spatial Analyst 模块 (arcpy.sa) 和Geostatistical Analyst 模块 (arcpy.ga)。

ArcPy classes

类的作用类似于建筑设计蓝图。蓝图为如何创建事物提供框架,而类则可用来创建对象,即通常所称的实例。ArcPy 类,如 SpatialReference 和 Extent 类,通常用作地理处理工具参数设置的快捷方式,否则的话,这些参数会使用更加复杂的字符串。

ArcPy functions

函数是用于执行某项特定任务并能够纳入更大的程序的已定义功能。

在 ArcPy 中,所有地理处理工具均以函数形式提供,但并非所有函数都是地理处理工具。除工具之外,ArcPy 还提供多种函数来更好地支持 Python 地理处理工作流。函数或方法可用于列出某些数据集、检索数据集的属性、在将表添加到地理数据库之前验证表名称,或执行其他许多有用的脚本任务。

什么是 ArcPy?

ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构建而成的站点包。目的是为以实用高效的方式通过 Python 执行地理数据分析、数据转换、数据管理和地图自动化创建基础。

该包提供了丰富纯正的 Python 体验,具有代码自动完成功能(输入关键字和点即可获得该关键字所支持的属性和方法的弹出列表;从中选择一个属性或方法即可将其插入),并针对每个函数、模块和类提供了参考文档。

在 Python 中使用 ArcPy 的另一个主要原因是,Python 是一种通用的编程语言。Python 是一种支持动态输入的解释型语言,适用于交互式操作以及为称为脚本的一次性程序快速制作原型,同时其具有编写大型应用程序的强大功能。用 ArcPy 编写的 ArcGIS 应用程序的优势在于,可以使用由来自多个不同领域的 GIS 专业人员和程序员组成的众多 Python 小群体开发的附加模块。

通用帮助

Python 提供文档字符串功能。ArcPy 中的函数和类在包文档中使用该方法。读取这些消息以及获取帮助的方法之一是运行 Python 提供的 help 命令。使用参数运行该命令会显示对象的调用签名和文档字符串。

>>> import arcpy >>> help(arcpy)  

获取帮助的另一种方法是使用 ArcPy 提供的代码自动完成功能。每当输入函数名并开始输入参数时,帮助窗口中就会显示帮助信息和函数用法。


 

导入 ArcPy

ArcGIS 10 引入了 ArcPy,这是一个 Python 站点包,它涵盖并进一步加强了 ArcGIS 9.2 中所采用的 arcgisscripting 模块的功能。ArcPy 提供了一种用于开发 Python 脚本的功能丰富的动态环境,同时提供每个函数、模块和类的代码实现和集成文档。

使用以 ArcPy 编写的 ArcGIS 应用程序和脚本的优势在于,可以访问并使用由来自多种不同领域的 GIS 专业人员和程序员开发的大量 Python 模块。使用 Python 中的 ArcPy 的另一个主要原因是,Python 是一种通用的编程语言,易于学习和使用。通过解释和动态输入这种编程语言,用户可以在交互式环境中快速地创建脚本原型并进行测试,同时这种编程语言功能强大,可编写大型应用程序。

# Importing arcpy # import arcpy # Set the workspace environment and run Clip_analysis arcpy.env.workspace = "C:/Data/Tongass" arcpy.Clip_analysis("standb4", "clipcov", "standby_clip", "1.25")  

在导入 ArcPy 之后,可以运行随 ArcGIS 安装的标准工具箱中的所有地理处理工具

导入模块

模块为通常包含函数和类的 Python 文件。有一系列模块支持 ArcPy,包括制图模块 (arcpy.mapping)、Spatial Analyst 模块 (arcpy.sa) 和Geostatistical Analyst 模块 (arcpy.ga)。

要导入整个模块,请使用导入模块:

# Import all of arcpy # import arcpy.mapping  

当然,Python 还具有很多其他核心模块和第三方模块。如果还想使用 Python 的核心 ossys 模块,可以使用相似的导入方式:

# Import arcpy, os and sys # import arcpy import os            

在很多情况下,用户可能不想使用整个模块或无需使用整个模块。如果只导入某一模块的一部分,可以使用 from-import 语句。在下例中,将导入 env 类(env 类包含所有地理处理环境)。现在无需以 arcpy.env 的形式访问环境,而可以将其简化为 env

# Import env from arcpy and set the workspace environment # from arcpy import env env.workspace = "c:/data"  

遵循相同的思路,有时用户可能需要注意:如何对模块或模块的一部分进行标识以使脚本更具可读性,以及对于首选项来说默认名称可能过长。在上述任一情况下,均可以使用 from-import-as 的形式。与先前的示例相同,下面的示例中也将导入 env 类,但会指定 ENV 作为 env 类的名称:

# Import env from arcpy as ENV and set the workspace environment # from arcpy import env as ENV ENV.workspace = "c:/data"  

可以使用相同方式导入制图模块:

# Import the mapping module from arcpy as MAP and create a MapDocument # object # from arcpy import mapping as MAP mxd = MAP.MapDocument("C:/maps/basemap.mxd")  

其他版本的导入操作使用 from-import-* 的形式。模块的内容将被直接导入到命名空间中,这表示用户随后可以直接使用所有这些内容,而无需为它们添加前缀。例如:

# Import management from arcpy as * # from arcpy.management import *  

但是,使用此方法存在一些风险。具有相同名称的其他对象、变量、模块等将被覆盖,另外在使用大型模块时,命名空间可能会变得异常拥挤和杂乱。可以此方式考虑该问题:在下例中,管理模块和分析模块都将被导入为 *。这两个模块都具有“裁剪”工具。如果现在尝试使用“裁剪”工具,那么实际使用的会是哪种“裁剪”工具?答案是后者,但是此方法可能导致在阅读脚本时出现不确定或难以阅读的情况。

# Import the management and analysis modules from arcpy as * # from arcpy.management import * from arcpy.analysis import * # Which Clip is it? # Clip("standb4", "clipcov", "standby_clip", "1.25")  

但是在某些情况下,from-import-* 可以简化代码,例如,在使用 ArcGIS Spatial Analyst 扩展模块的 sa 模块的情况下。sa 模块的优势之一在于,可以在一行中嵌套多个类和函数以生成输出栅格对象。

许可许可:

以下两个实例都需要 Spatial Analyst 扩展模块来运行。

# Import arcpy and the sa module as * # import arcpy from arcpy.sa import * arcpy.CheckOutExtension("spatial") # Get input parameters # inRaster1 = arcpy.GetParameterAsText(0) inRaster2 = arcpy.GetParameterAsText(1) inRaster3 = arcpy.GetParameterAsText(2) outRaster = (Raster(inRaster1) + (Raster(inRaster2) - Raster(inRaster3)))  

现在比较下一个代码块,此代码块使用常规 import-from 语句。现在假设再向代码中添加一些类和函数 - 即使只为每个函数和类添加 sa.,代码的体积也将迅速增加,这将破坏可读性并且使代码行变得更加庞大。

# Import arcpy and the sa module # import arcpy from arcpy import sa arcpy.CheckOutExtension("spatial") # Get input parameters # inRaster1 = arcpy.GetParameterAsText(0) inRaster2 = arcpy.GetParameterAsText(1) inRaster3 = arcpy.GetParameterAsText(2) outRaster = (sa.Raster(inRaster1) + (sa.Raster(inRaster2) - sa.Raster(inRaster3)))  

路径和导入

使用导入语句时,Python 将在以下位置中(并按以下顺序)查找匹配该名称的模块:

  1. 在 PYTHONPATH 系统环境变量中指定的路径
  2. 一组标准 Python 文件夹(当前文件夹、c:\python2x\libc:\python2x\Lib\site-packages 等)
  3. 在 1 和 2 中找到的任意 .pth 文件中所指定的路径

有关这方面的详细信息,请参阅以下内容:http://docs./install/index.html#modifying-python-s-search-path

如果尚未安装 Python 2.6,则此程序使用 ArcGIS 10.0 产品的安装程序来安装。该安装程序还会将文件 Desktop10.pth(或 Engine10.pthServer10.pth)添加到 python26\Lib\site-packages 中。此文件中包含的两行内容为系统的 ArcGIS 安装程序的 arcpy 和 bin 文件夹的路径。在 Python 2.6 版本中,要成功导入 ArcPy 需要这两个路径。

使用导入语句时,Python 将参照系统的 PYTHONPATH 环境变量来查找模块文件。此变量将设置为一系列目录。

提示提示:

如果导入 ArcPy 的操作导致以下任一种错误,将无法找到所需模块:

  • 导入错误:未找到名称为 arcpy 的模块
  • 导入错误:未找到名称为 arcgisscripting 的模块

要解决此问题,请使用 Windows 资源管理器浏览至 python26\Lib\site-packages 文件夹,然后添加或编辑 Desktop10.pth 文件。此文件应包含以下两行内容(如果与实际不符,请将其更改为您的系统路径):

c:\Program Files\ArcGIS\Desktop10.0\arcpy c:\Program Files\ArcGIS\Desktop10.0\bin  

 

 

ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构建而成的站点包。目的是为以实用高效的方式通过 Python 执行地理数据分析、数据转换、数据管理和地图自动化创建基础。

通过 ArcPy 可访问地理处理工具和其他函数、类和模块,使用它们可快速轻松地创建简单或复杂工作流。

使用以 ArcPy 编写的 ArcGIS 应用程序和脚本的优势在于,可以访问并使用由来自多种不同领域的 GIS 专业人员和程序员开发的大量 Python 模块。使用 Python 中的 ArcPy 的另一个主要原因是,Python 是一种通用的编程语言,易于学习和使用。通过解释和动态输入这种编程语言,用户可以在交互式环境中快速地创建脚本原型并进行测试,同时这种编程语言功能强大,可编写大型应用程序。

通过 ArcPy 可访问地理处理工具以及其他函数、类和模块,从而创建简单或复杂工作流。一般来说,ArcPy 按工具、函数、类和模块进行组织。

从技术角度讲,地理处理工具是可通过 arcpy 访问的函数 - 也就是说,可以像其他任何 Python 函数那样访问这些工具。但是,为了避免引起混淆,总是会在工具函数和非工具函数之间加以区分(如实用程序函数 ListFeatureClasses())。

  • 工具的记录方式与函数不同。每个工具在 ArcGIS Desktop 帮助系统中都有自己的工具参考页面。函数则记录在 ArcPy 文档中。
  • 工具会返回 result 对象;而函数不会。
  • 工具会生成可通过各种函数(如 GetMessages())进行访问的消息。函数不会生成消息。
  • 工具在产品级别(ArcView、ArcEditor 或 ArcInfo)以及通过扩展模块(Network Analyst、Spatial Analyst 等)进行授权。您可以在工具参考页面上查找所需的许可等级。不对函数进行授权 - 它们随 ArcPy 一起安装。
警告警告:
ArcPy 站点包是基于 Python 2.6 构建的,因此要求成功导入此版本。

运行工具

以下示例显示了如何执行缓冲区工具。执行该工具时,消息将默认显示在帮助部分中 Python 窗口 的右侧。

>>> arcpy.Buffer_analysis("c:/data/Portland.gdb/streets", "c:/data/Portland.gdb/steets_buffer", "500 METERS")  

以下是另一个有关运行工具的示例。该示例使用的是数据管理工具箱和转换工具箱中的工具。向输入 streets 要素类添加一个字段并计算该字段,然后将要素类加载到 ArcSDE 企业级地理数据库中。

>>> import arcpy >>> 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", "Database Connections/MySDE.sde/PortlandDataset", "streets")   
了解有关在 Python 中使用工具的详细信息

获取工具的结果

执行地理处理工具时,工具的结果会返回到 result 对象中。通常,该对象是由工具生成或更新的输出数据集的路径。在其他情况下,它可能会包含其他类型的值,如数值或布尔值。如果工具的输出是多值参数,则这些值可在列表中以列表的形式返回。

以下代码示例显示了如何捕获返回值以及这些值的具体内容:

返回输出要素类的路径。该结果可用作其他函数的输入。

>>> result = arcpy.Buffer_analysis("rivers", "riverBuf", "50 METERS") >>> print result C:\Portland\Portland_OR.gdb\riverBuf >>> arcpy.Clip_analysis("streets", result, "streets_50m_of_rivers")  

返回要素数目。

>>> result = arcpy.GetCount_management("streets_50m_of_rivers") >>> print result.getOutput(0) 54   

返回要素类的默认空间格网索引列表。

>>> result = arcpy.CalculateDefaultGridIndex_management("streets_50m_of_rivers") >>> for i in range(0, result.outputCount): ... print result.getOutput(i) ... 560 200 0   

使用环境设置

可将地理处理环境设置视为影响工具执行结果的附加参数。这些参数与正常的工具参数不同,因为它们是通过工具单独进行设置的,并且供工具在运行时查询和使用。诸如感兴趣区域输出数据集的坐标系以及新栅格数据集的像元大小等环境设置均可通过工具进行指定和支持。

可通过 env 类来获得属性形式的环境设置。这些属性可用于检索和设置当前环境值。下面是如何使用环境值的示例:

设置工作空间环境。

>>> arcpy.env.workspace = "c:/data/Portland.gdb" >>> arcpy.Buffer_analysis("streets", "streetBuf", "500 METERS")  

将空间格网索引设置为工具的返回值。

>>> arcpy.env.spatialGrid1 = arcpy.CalculateDefaultSpatialGridIndex_management("streets").getOutput(0)  

获取当前栅格像元大小设置并确保其为标准输出的指定大小。

if arcpy.env.cellSize != 30: arcpy.env.cellSize = 30  
了解有关在 Python 中使用环境设置的详细信息

使用函数

函数是用于执行某项特定任务并能够纳入更大的程序的已定义功能。除工具之外,ArcPy 还提供了多种函数,用来更好地支持地理处理工作流。函数可用于列出某些数据集、检索数据集的属性、检查数据是否存在、在将表添加到地理数据库之前验证表名称,或执行其他许多有用的脚本任务。

以下示例代码显示的是获得数据的属性并检出扩展模块:

import arcpy # prints Trueprint arcpy.Exists("c:/data/Portland.gdb/streets") # prints NAD_1983_StatePlane_Oregon_North_FIPS_3601_Feetsr = arcpy.Describe("c:/data/Portland.gdb/streets").spatialReference print sr.name # prints Availableprint arcpy.CheckExtension("spatial") arcpy.CheckOutExtension("spatial")   
了解有关在 Python 中使用函数的详细信息

使用类

ArcPy 类(如 SpatialReference Extent 类)通常用作完整地理处理工具参数设置的快捷方式,否则,这些参数会使用更加复杂的字符串。类的作用类似于建筑设计蓝图。蓝图为如何创建事物提供框架,而类则可用来创建对象,即通常所称的实例。

import arcpy prjFile = "c:/projections/North America Equidistant Conic.prj" spatialRef = arcpy.SpatialReference(prjFile)   
了解有关在 Python 中使用类的详细信息

使用模块

ArcPy 包含涉及其他 ArcGIS 领域的模块。有一系列模块支持 ArcPy,包括制图模块 (arcpy.mapping)、Spatial Analyst 模块 (arcpy.sa) 和 Geostatistical Analyst 模块 (arcpy.ga)。

例如,arcpy.sa 模块中的工具使用 Spatial Analyst 工具箱中的工具,但被配置为支持“地图代数”。因此,执行 arcpy.sa.Slope 与执行 Spatial Analyst 工具箱中的坡度工具的作用是相同的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多