1、第 46 卷 第 1 期2023 年 1 月测绘与空间地理信息GEOMATICS&SPATIAL INFORMATION TECHNOLOGYVol.46,No.1Jan.,2023收稿日期:2021-05-24作者简介:张笑涵(1989-),男,辽宁沈阳人,工程师,学士,主要从事地图制图及数据分析等方面的应用研究工作。基于 ArcGIS 模型构建器及 Python 对沈阳市造林核查质检程序的应用张笑涵,赵 特(沈阳市勘察测绘研究院有限公司,辽宁 沈阳 110004)摘要:通过对 ArcGIS 中模型构建器(ModelBuilder)的应用及扩展,结合字段计算器中 Python 代码块输入自定
2、义的表达式,对沈阳市造林数据库进行数据分析及质量检查,对其图形拓扑、字段合法性、属性逻辑性等项目进行判断,并将错误信息反馈至独立字段中。该质检程序将模型构建器和 Python 语言的功能合并,利用可视化模块式编程思路及必要的核心代码,即可完成复杂的生产工作。关键词:ArcGIS;模型构建器;Python中图分类号:P208 文献标识码:A 文章编号:1672-5867(2023)01-0159-03Application of Shenyang Afforestation Verification Quality Inspection Program Based on ArcGIS Model
3、Builder and PythonZHANG Xiaohan,ZHAO Te(Shenyang Geotechnical Investigation&Surveying Research Institute,Shenyang 110004,China)Abstract:Through the application and extension of the ModelBuilder in ArcGIS,combined with the input of custom expressions in the Python code block in the field calculator,t
4、he data analysis and quality inspection of the Shenyang afforestation database are carried out,and its graph topology,fields validity,attribute logic and other items are judged,and error information is fed back to a separate field.The quality inspection program merges the functions of the ModelBuild
5、er and the Python language,and uses the visual modular programming ideas and the necessary core codes to complete complex production tasks.Key words:ArcGIS;ModelBuilder;Python0 引 言模型构建器是 ArcGIS 中集成的、可视化的编程工具。它是一个用于创立、编辑和进行相关管理的模型化应用程序。我们也可以将这种模型构建器看作是一个可视化的工作流,进行可视化编程的一种语言。在其实际运行过程中,内部每一个工具的输出参数成为另一
6、个工具输入参数,起始或者过程中的输入参数又可以通过迭代器进行批量操作。因此,模型构建器里可视化与流程化是其最大的优点。我们可以通过梳理在工作中遇到的问题,形成解决思路,用可视化编程的方式将思路“绘制”在模型构建器的模板中,再通过连接符号连接每一个子工具,从而解决较为复杂的实际问题。因为其编译及运行过程十分高效,使得这种批量化的操作以及这种基于ArcGIS 的强大性能会让整个工具集能在短时间内完成相对复杂的任务,使工作事半功倍,提高准确性,降低错误率。本文通过字段计算器(Field Calculator)中的 Python模块结合模型构建器,介绍其在沈阳市“三一五”造林核查数据质量检查项目中的应
7、用,该方法已形成一套自动化的检查程序,为日后的相关项目提供了经验。1 造林核查质检程序的意义为进一步加强沈阳市“三一五”工程造林管理,实现造林成果地块数据矢量化,切实掌握真实准确的造林成果数据,沈阳市勘察测绘研究院有限公司受沈阳市自然资源局委托,于 2020 年 8 月 10 日,全面开展沈阳市 2020年春季造林预核查工作。根据核查总体要求,在市级林业主管部门的领导下,在县、乡林业主管部门、造林公司、监理单位的配合下,对每一块春季造林和雨季补植补造地块进行实地核查,沿地块边界进行实测面积,同时以不同位置和角度拍摄不少于 5 张能够反映造林地块现状成果的现场照片。在外业过程中,对造林地块施工作
8、业率、成活率、抚育、执法和损毁情况进行重点核查,同时调查核实地块权属、造林主体、树种、株行距、苗木种类和规格等基本属性信息,现场填写核查记录表,记录全部核查信息,并形成矢量数据库。数据验收过程中,数据库要求矢量数据客观真实,属性信息翔实准确,原始测量数据、照片和核查表要求分类整理、统一存档,确保数据真实可靠,核查成果有据可循,而其中质检软件是保障数据完整性、逻辑性、一致性等各项指标正常的必要条件,只有把数据各个环节,包括图形拓扑构建、字段类型规范化、长度规范化、测量单位规范化、字段逻辑性检查硬性标准化落实到位,数据才能在日后的规划部署上做出精准服务。2 模型构建器部分的应用ArcGIS 模型构
9、建器在创建和运行一系列工作流的过程中,可以实现对于数据中的字段、要素类集中的各图层进行模块化的操作,对特定工作空间,要素类集、要素类、要素等内容进行遍历操作,其迭代器中的 for 循环、while循环均可以实现批量自动化处理,其要素选择、行选择、字段值、多值、数据集、要素类、文件、栅格、表、工作空间也均可进行迭代处理,从而实现批量生产作业的功能。它们中的参数互相依托,甚至还可以通过创建一个自定义的模型,ArcGIS 的更高级的功能进行扩展,来构建更为复杂的专业化工具。模型构建器也可以集成与 ArcGIS 相关的其他应用程序,从而组合起来,形成一套更为体系化的程序。这些自动化的模型,都可以为各类
10、数据分析提供全方位的服务,并得到准确、直观的分析结果。尤其在土地调查与自然资源数据管理的工作中,其可视化模块化的编程思路,为高效的数据分析提供了很好的技术支撑,更为数据透视化管理和流量分析提供了便利条件。沈阳市造林数据核查所需的 ArcToolbox 中的工具有删除字段、添加字段、计算字段等必要工具,为完成详细的质检流程,需对外业提交的矢量数据进行逐一的专项分析,制定合理完善的逻辑性检查流程,对每个模块进行细致的分类、命名及代码的设计。该项目局部的可视化的模型构建器模块如图 1 所示。图 1 ArcGIS 模型构建器(局部)Fig.1 ArcGIS ModelBuilder(partial)3
11、 Python 代码块中的应用在构建模型构建器的过程中,需要大量运用字段计算器的功能,而单纯地运用常规化的键盘输入方式计算所需要的值,并不是编辑表中值的唯一方式。在某些情况下,为了设置特定的字段值,可能要对单条记录甚至是表中的所有记录执行数学计算,也可以对所有记录或选中了的记录执行简单计算和高级计算。此外,还可以在属性表中的字段上计算面积、长度、周长和其他几何属性。如需要更高难度、更复杂的计算方式,那就可以通过 Python 或 VBScript 来执行。Python 是 ArcGIS 建议使用的脚本语言。在实际生产过程中,如需要访问地理处理功能(包括要素几何),也需要使用 Python 语言
12、。采用 Python 作为 ArcGIS 的脚本语言,为执行计算可以使整个流程变得十分便利。另外,在具备一定的 VBA 或 VBScript 的经验并且习惯了脚本语法的情况下,使用 VBScript 也能极大地提高生产效率,要注意的是,在实际处理过程中,所保存的 ArcGIS 先前版本的.cal 文件可以直接使用或者只需进行少量修改。如果拥有使用 ArcObjects 的过去版本的 VBA 代码,则需要修改计算。在本次造林核查质检软件的构建中,各个环节的字段计算器模块的开头处可以选择 VB 或者 Python,中部左是字段选择,右边则是函数选择,函数下是计算方式选择。空白框则是公式编辑处。常见
13、的字段编辑,例如四则运算,可以使用一些预设好的函数计算,本文不做赘述。核心代码如下:/核查因子/24、是否损毁为“否”,树种、林种、株行距、胸径、地径、苗木规格不能为空(苗木规格填干或苗,地径可空;苗木规格填根,胸径可空)L=def zheng(a,b,c,d,e,f,g):if a=u否 and(b=None or b=)or(c=None or c=)or(d=None or d=)or(not(f=u根 or f=u苗)and(e=None or e=)or(f=None or f=)or(not(f=u 干)and(g=None or g=):return 错误 24/25、损毁面积(
14、亩)不能为空且小于等于图形面积(空值填 0)L=def zheng(a,b):if a=None or a=or ab:return 错误 25/26、损毁面积等于实测面积,施工作业率必须等于0L=def zheng(a,b,c):if(b-a)0.1 and(not(c=0):return 错误 26/27、是否占基本农田只能填“是”或“否”且不能为空L=061 测绘与空间地理信息 2023 年def zheng(a):if a=u是 or a=u否:return Noneelse:return 错误 27 这里需要简单说明的是,系统预设的函数有时候并不能满足我们的需求,例如:当你需要对这个
15、字段的数据进行分段,预设函数就无法满足了。这个自定义的函数可以很简单,也可以很复杂,前提是需要使用 Python 2.7的语法进行编辑。其实字段编辑器的功能是强大的,一定程度上甚至可以替代 Excel,直接统计、分析、处理需要的数据和资料,但许多人并不是很了解 VB、Python,导致无法使用其中的强大功能,但随着编译熟练程度的提升,语言的不断学习和更多案例的接触,Python 语言的便捷会体现得越来越充分。4 程序与数据的结合及部署程序整合后,要对其与数据库进行关联,实际应用过程中可以有 2 种方式,不同的方式都有各自不同的效果和优点。方法一是定义绝对路径,即设置为数据源存于 C 盘或 D
16、盘的根目录(实际生产中此方法最为常用)。这样用户使用时,可将整个程序包按使用说明置于相应盘符下,直接运行程序时,软件会自动读取绝对路径下的数据库,遍历其中的要素类及要素,得到的分析结果也会存于绝对路径下的数据库中,方便读取、查询。此方法可将一些程序变为一键式或者导航式的界面,用户体验简单,可操作性性强。方法二是将输入的要素及过程中的参数在模型构建器中设置为“模型参数”,此方法可将程序各项参数激活,灵活性更高,用户可以根据自己的计算机容量、数据存放路径等个人实际条件,自主选择相应的数据来源,使用起来更加人性化。但菜单界面中下拉式菜单、文本框和文件选择按钮较多,可能会使界面略微复杂化。5 结束语利用 ArcGIS 的模型构建器(Model Builder)可以方便、高效地实现数据的自动化处理,结合强大的 Python 语言代码块,可以对各类数据进行数据分析、统计及批量化处理。能在短时间内为各个项目提供可视、实时、准确的分析结果,同时,操作人员只需简单的编程基础,就能利用 Python 语言获得与专业研发软件同等功效。这不仅能为测绘一线生产提高效率,也能在提升数据质量上提供解决方案。参考文献