2020-07-02 面向ArcGIS的Python脚本编程

1、Python简介

        ArcGIS for Desktop 支持使用脚本语言实现任务自动化。Python是ArcGIS首选的脚本语言

        Python不是由Esri公司开发的。它是一个开放源码的编码语言。因此可以通过第三方发布,包括Esri

        Python相对简单。它有一个庞大的用户社区和许多学习资源。此外,Python还提供很多函数库以实现更多的功能

        Python的一个优点就是它既是一门脚本语言,又是一门程序语言。所以既可以用它编写简单的脚本,也可以用它开发高级应用程序。

         Python是一门解释性语言,它不需要编译,而是直接从源代码执行。这使得Python与C++和NET.语言比起来更方便,也具有移植性。

        Python脚本可以像常见的地理处理工具一样,变成一个脚本工具,直接整合到ArcGIS中。

2、ArcGIS的地理处理

        ArcGIS地理处理框架为组织和运行工具提供了强大而灵活的功能。

        ArcGIS有大量的工具,它们组织在ArcToolbox的工具箱和工具集中。这些不同类型的工具包括内置工具、脚本工具、模型工具和自定义工具

        工具需要设置参数才能运行,这些参数包括输入和输出数据,还有其他一些控制工具如何执行的参数。

        环境设置同样能控制工具的运行,并可以在不同的级别进行设置。

        可以用模型和脚本创建自己的工具。一旦创建了自定义工具,它们会和普通工具一样运行。

          ModelBuilder为创建地理处理工作流提供一种可视化程序语言。模型的创建过程看上去像一个流程图。

        Python为创建地理处理工作流提供一种文本编程语言。Python代码可以直接在ArcGIS里的Python窗口运行。Python脚本(.py文件)通常由复杂的代码组成,它能够以不同的方式执行,如直接在操作系统中运行,用Python编辑器运行,或者是从ArcGIS脚本工具中调用。

        运行模型和脚本同运行ArcGIS工具的过程是一样的。模型可以转换为脚本,但是脚本不能转换为模型。把模型转换为脚本是学习编写Python脚本的一个好方法。

3、Python窗口

        Python窗口中,既可以高效、便捷地运行地理处理工具,也可以通过第三方Python模块和库来实现其他功能。对于Python初学者而言,Python窗口是学习Python的最佳方法。

        可以将Python窗口中的代码保存成脚本文件,也可以将现有的脚本文件加载到Python窗口中。

4、Python基础

        Python代码可以直接在交互式Python解释器运行。也可以将代码保存在后缀名为.py的脚本文件中。

        在Python中可以使用表达式和语句。前者用来表示一个或多个值,后者用来表示一种操作。

        变量名应该全部小写,并且可以包含字母、数字以及下划线。使用赋值语句可以为变量赋值。

        Python包含很多标准的内置函数,它们都可以被调用。如果使用的函数不是内置函数,需要先导入相应的模块,再使用.的方式调用改函数

        可以用Python中内置的函数对字符串进行处理,这些函数包括子串查询,字符串连接、字符串分割、字符串过滤、字符串类型转换等。

        列表是一种功能丰富的数据类型。列表中的某个元素可以通过索引值获取,索引值从0开始,例如mylist[0]。python语言中有许多处理列表的内置函数和方法,其中包括列表排序、列表切片、删除元素、添加元素、插入元素等等

        在Python脚本中可以使用循环和分支结构控制工作流。这些结构通过代码的缩进来构成代码块。代码缩进是Python脚本语言中不可或缺的一部分。

        Python语言在多数情况下是区分大小写的。

5、使用Python进行地理处理

        ArcGIS 10引入了ArcPy站点包,该站点包为Python提供了访问地理处理功能的接口。

它是早起ArcGIsscripting模块的升级版,主要由模块、函数和类构成。

        ArcGIS中所有的地理处理工具都是以函数的形式提供。当ArcPy导入到Python脚本中时,就可以使用ArcGIS标准工具箱中的所有地理处理工具。运行工具的语法是:arcpy.()。此外,非工具函数可以用来辅助完成地理处理任务。

        ArcPy中的类是用来创建对象的。常用的类由enc类和SptialReference类。设置类属性代码为:arcpy.. =

        可以使用消息函数查阅工具运行期间产生的消息。消息函数主要包括GetMessages、GetMessages以及GetMaxServerity。消息可以是消息性消息、警告消息以及错误消息。

        在ArcPy中,可以通过相关函数检查、获取以及返回软件及其扩展模块的许可。

6、访问空间数据

        Exists函数可以用来确定某个数据集是否存在。Describe函数可以用来描述数据集的属性。这些函数经常用于确认脚本中的输入数据是否符合要求。

        处理列表的函数可以用来实现批处理。列表创建成功后,就可以编写脚本来遍历并处理列表中的每一个元素。例如,ListFeatureClasses函数可以将某个工作空间内的要素类创建成一个要素类列表,然后使用for循环遍历列表中所有的要素,并对每一个要素进行相同的操作。列表是一种常见的Python数据类型。列表函数可以出来不同类型的元素,包括工作空间、字段、数据集、元素类、文件、栅格、属性表等。

        在Python中,元组和字典是两种很重要的数据结构。元组是一组元素序列,它类似于列表,但是元祖中的元素是不可变的。字典是由多对关键字及其对应的值组成。字典的功能类似于查找表

7、处理空间数据

        ArcPy中的数据访问模块arcpy.da支持编辑操作和游标操作。

        游标可以用来遍历属性表中的行,for循环或with语句可以实现迭代操作。

        搜索游标可以用来检索行,更新游标可用于根据位置更新和删除行,而插入游标可用于向表或要素类中插入行

        在Python中使用搜索游标可以执行SQL查询语句,使用AddFieldDelimiters函数可以确保语法的正确。

        可以使用VilidateTableName函数和ValidateFieldName函数分别验证表名和字段名。这些函数可以把无效字符转化为下划线(_)。CreateUniqueName函数通过在输入名称后追加数字的方式在指定工作空间中创建唯一名称。

        使用ArcPy的解析函数可以把表名和字段名分割成几个组成部分。

        Python可以对文本文件中的内容进行操作。open函数可以创建一个文件对象,该对象支持一系列文件读写的方法,例如read、readline、readlines、write和writelines。最常见的一种文件操作是以相同的处理方式遍历文件中的内容,例如字符串查找和替换。

8、处理几何图形

        几何对象有多个属性,包括长度和面积。通过相关几何短语可以非常方便获取几何属性。

        几何对象中的折点存储在点对象的数组中(多部分要素时,一个数组中会包含多个点对象数组)。

        使用插入和更新游标,可以创建或者更新现有要素。脚本可以通过创建点对象、设置点对象属性,并将其放入数组中来定义要素。这些数据随后既可用于创建几何要素。

        如果几何对象的坐标系和要素类坐标系不同,则可以通过在游标上设置空间参考的方式来访问这个几何对象。

        可以用几何对象代替要素类作为地理处理工具的输入和输出,这样会使脚本更便捷

9、使用栅格数据 

        ListRasters函数用来列出工作空间内的栅格数据。Describe函数用来描述栅格数据集和栅格波段。Describe函数返回的对象的属性是动态的,它取决于数据的类型。

        arcpy.sa模块已经将“地图代数”整合到Python环境中。arcpy.sa模块除了可以提供访问Spatail Analyst工具的接口,还提供了一系列用于运行地图代数的运算符。这些运算符提高了脚本处理栅格数据的效率。

        arcpy.sa模块中包含了许多类,这些类主要用于定义栅格工具的参数

        转换函数可以将栅格数据输入到NumPy数组中,从而可以使用Python其他类库(例如SciPy)中的函数处理这些数据

10、制图脚本

        arcpy.mapping模块可以实现制图自动化。改模块中有十分丰富的用于制图的类和函数,这些类和函数可以处理地图文档,数据库,图层和页面布局。

        arcpy.mapping模块的各种功能对应着在ArcGIS下进行制图的各种流程。其中一些流程并不是arcpy.mapping模块可以自动化完成某些重复性的操作,例如更新各种图层中的数据源或者是替换各种地图文档中的文本。

        打开地图文档既可以通过直接引用存储在磁盘中的.mxd文件来实现,也可以通过调用ArcMap中已经打开的当前地图文档来实现。地图文档的属性可以被访问、修改和保存。arcpy.mapping模块不能创建新的地图文档。

          地图文档中的数据库可以通过ListdataFrames函数访问,数据框的属性可以被访问、修改和保存

            数据框中的图层可以通过Layer或者ListLayers函数访问,图层的属性可以被访问、修改和保存

            地图文档中断开的数据源可以通过ListBrokenDataSources函数进行识别。有多种方法用于修复断开的地图文档、图层以及属性表。这些方法可以寻找并且替换工作空间、工作空间路径和数据源。

            页面布局的每一个元素都可以被访问和修改。

            地图可以输出为各种格式,例如PDF、JPEG和TIFF格式。地图同样可以通过本地打印机打印出来或打印成PDF文件。当Data Driven Pages可用时,通过脚本可以新建PDF格式的地图册        

11、程序调试与错误处理

            地理处理脚本中经常会出现错误。虽然语法错误容易被发现,但是脚本中可能会存在其他让脚本无法正确运行的错误。含有错误处理语句的脚本更健壮。

            有各种各样的调试方法,相对简单的办法包括仔细分析错误消息,在脚本中添加Print语句,选择性的注释掉部分代码,如果这些方法都不足以辨认和修复错误,可以使用调试器。调试器允许一步步执行每一行代码,并监视变量的状态。添加断点可以用来检查具有大量代码的代码块。

        任何调试方法都可以辨认出发送错误的位置,但是不能正确的指出为什么发生错误,所以需要熟知一些常见的错误,包含Python代码错误和ArcGIS地理处理错误。

        基本错误处理过程包含检查数据是否存在,确定输入数据的类型是否正确,检查软件和扩展模块的许可,验证表名和字段名。通常情况下,需要结合if语句来实现上述错误处理步骤。

        预测出每一种类型的错误几乎是不可能的,而且编写这些错误检查代码也十分繁琐。脚本在运行时只要一次出错,就会出现异常。这些异常可以用try-except来捕捉,该语句可以识别出错误的类型。可以根据错误的类型自定义错误的处理程序。此外,还有一些语句,例如else和finally,它们可以添加到try-except语句中以确保可以高效地捕捉到异常。

        错误信息有助于确认错误的性质,并且有助于修改脚本代码。错误信息包括一般Python信息和来自于ArcPy ExecuteError类的错误信息。

12、创建Python类和函数

      自定义函数可以使用def语句来定义。def语句后面的代码块定义了函数具体的功能。自定义函数可以包含参数,这些参数可以是必选参数,也可以是可选参数。

        自定义函数可以从本地脚本或者从其他脚本调用。当从其他脚本调用函数的时候,需要将包含自定义函数的脚本作为一个模块导入。因此,一个自定义模块就是一个.py文件,该文件中至少包含一个函数。

        可以使用if __name__ == “__main__” :语句来分辨自定义函数时从自身脚本运行还是从其他脚本中导入为模块。

    不可以通过模块的路径导入模块。模块(脚本)文件的位置应该与使用该模块的脚本文件的文件夹一样,或者是PYTHONPATH环境变量中定义过的。如果需要,可以在程序包中使用.pth文件永久地添加路径或者是在脚本中使用sys.path.append添加临时路径。

    自定义类可以方便地将函数和变量组合在一起。类可以从脚本自身或者从其他脚本中调用。

    随着自定义函数和类的个数越来越多,就需要考虑将他们打包,类似于ArcPy站点包。

13、创建自定义工具

    尽管Python脚本可以作为独立脚本而脱离ArcGIS运行,但是将脚本作为脚本工具却有很多优势。脚本工具可以将脚本文件整合到地理处理框架中。例如,脚本工具可以和其他系统工具一样在ModelBuilder中使用。

    在任意的自定义工具箱中都可以新建脚本工具。脚本工具需要关联一个脚本文件,当工具运行时,就会调用该脚本文件。

    脚本工具需要有参数。设置参数的过程包括设置参数属性、编写接收参数值的代码等。脚本工具对话框的外观根据脚本工具的参数而定。

    脚本工具的每一个参数都有一个种数据类型,例如要素类、类、表、值、字段等。参数的属性可以控制参数的输入值。它可以确保输入的参数值符合要求。

    所有的脚本工具都需要有输出,这样它们就能在ModelBuilder中使用。为了实现这一目标,有时候只能使用派生参数,这种类型的参数不会出现在工具对话框中。

    可以通过ToolValidator类进一步定制工具行为

    可以使用各种消息函数在进度对话框和Results窗口中输出运行信息。进度对话框的外观可以通过相关函数进行更改。  

    为了提高运行效率,建议在进程中运行脚本工具

14、共享脚本工具  

    构建地理处理框架的目的之一是为了共享工具。自定义工具箱可以添加到ArcToolBox中,并整合到地理处理工作流中,工具箱中可以添加任意数量的工具,包括模型工具和脚本工具。因此,脚本工具可以通过一个包含脚本文件(.py)以及其他相关资源的工具箱文件(.tbx进行共享)

    为了确保自定义工具可以正常运行,工具运行所必需的资源应该存放在一个具有标准结构的文件夹目录下。该目录包括脚本文件夹、数据文件夹以及文档文件夹

    只有在不移动或不重名文件夹的时候才能使用绝对路径。为了共享工具,需要采用相对路径。相对路径是相对于当前文件夹的、对脚本文件来说就是工具箱所在的文件夹。相对路径不能跨越多个驱动器。

    地理处理包也可以用于共享脚本工具。地理处理包是一个后缀名为.gpk的压缩文件。它包含了执行地理处理工作流所需要的所有的文件,包括自定义工具、输入数据集,以及其他一些支持文件。

    共享工具的文档有多种编写方式,包括在ArcCatalog中编辑描述页面,使用样式表,以及引用经过编译的帮助文件。

你可能感兴趣的:(2020-07-02 面向ArcGIS的Python脚本编程)