基于Python 的地理国情监测成果质量检查软件设计与实现
2023-02-05林养钦
林养钦
(广东省地质局第七地质大队,广东惠州 516300)
0 引言
作为一项对国情国力进行准确调查、把握国土资源利用情况的基础性监测工作,全国基础性地理国情监测项目对于促进产业发展与科技创新、实现地理信息转型发展具有重要意义。地理国情监测项目的监测周期为1 年,整个项目的数据生产时间主要集中在7 月到11 月,时间节点为每年的6 月底[1]。该项目主要包括4 大部分,分别为正射影像处理、监测数据生产、监测成果的检查与验收以及监测成果入库。项目中的主要工作在于数据生产,仅有一个月左右时间进行项目质检,因此,增强项目成果质量检查更新错误的针对性、加快检查进度、提高检查正确率对于项目的高效、高质量完成具有重要意义。
基础性地理国情监测数据生产主要使用ArcGIS 软件,数据生产及质量检查过程中必然会涉及多种重复性工作,因此,研究基于ArcGIS 平台的地理国情监测数据批量化处理辅助工具对于提高数据生产质量及效率、节约项目成本具有重要作用。作为一种高级程序设计语言,Python 语言凭借其扩展性强、简洁明了等多种优点成为备受青睐的程序语言。基于Python 语言的ArcGIS 脚本可以大大提高地理国情监测数据处理效率,实现数据处理高效自动化。
作为基于ArcGIS 功能构建的站点包,ArcPy 为用户提供了地理数据处理工具的接口,该站点包封装了强大的类及相关函数,通过Python 语言调用该站点包的类与相关函数实现地理数据的自动化处理,包括数据分析、数据转换以及数据管理等[2-3]。目前基于ArcPy 的脚本工具与地理国情监测数据的结合多用于数据提取批处理、数据裁切等,对于空间参考信息、拓扑关系、属性结构信息等方面的检查功能较少。基于此,本文通过最新ArcPy 站点包结合地理国情监测数据进行代码编写,实现地理国情监测数据成果数据检查效率的提升。
1 Python语言和ArcPy技术
作为ArcGIS 地理信息系统平台所用脚本语言,Python 语言的主要特点包括[4-5]:
1)Python 语言的开源与免费功能可以为ArcGIS 软件的进一步开发提供便捷;
2)Python 语言具有的面向对象编程特征,符合ArcGIS 的编程要求;
3)ArcGIS 所支持的各类操作系统均可使用Python 语言进行改动;
4)Python 语言适合各专业人员学习,专业要求性低,通过系统学习就可用于解决本行业实际问题;
5)作为一种解释性语言,Python 语言具有较高的移植性,成为ArcGIS 脚本语言后,其功能得到了进一步地升级与增强。
ArcPy 是ArcGIS 中的一个站点包,其封装了ArcGIS 大部分的功能,Python 可以通过该站点包实现ArcGIS 地理处理功能的访问,包括地理数据分析、数据管理以及自动化创建地图等功能[6]。ArcPy包括4 大模块,如图1 所示。1)ArcPy.da 模块,用于提供数据访问函数等;2)ArcPy.na 模块,用于提供网络分析函数等;3)ArcPy.sa 模块,用于提供地理空间分析函数等;4)ArcPy.mapping 模块,用于提供制图等相关函数。
图1 ArcPy 四大模块
2 地理国情监测成果主要检查内容
地理国情监测主要包括3 种数据成果,分别为地理国情监测生产元数据成果、地表覆盖分类数据、地理国情要素数据成果[7]。这3 种数据成果的检查内容均包括数据完整性、表征质量、要素类型、空间参考系统、拓扑关系、属性结构等[8]。为了最大限度减少人工工作量,同时保证数据检查的正确性,可以使用ArcGIS 结合Python 语言实现如要素类型、空间参考系、拓扑关系、属性结构这几类检查内容的检查。使用Python 语言完成检查后,辅以必要的人工检查发现数据内在错误,提高问题的检查效率以及发现率。
2.1 要素类型和空间参考系检查
通过ArcPy.da 函数可以获取多种文件的路径、数据类型等属性,同时能够获取数据的要素类型以及空间参考系等,实现对要素类型以及空间参考系的检查。
2.2 要素拓扑检查
要素拓扑关系检查主要包括闭合、连续、连接、重复等关系检查,也就是对线线、线面、面面之间的联系加以检查[9]。地理国情监测数据中对于要素共线误差的要求是小于0.5 m,对于要素面重叠、面裂隙误差的要求同样是小于0.5 m[10]。
对于水系要素而言,拓扑关系错误主要集中在2 个方面,1)数条河道流入同一河流时,上下游结构线没有在同一点相交;2)没有打断结构线连通位置。对于道路要素而言,拓扑关系错误主要集中在4 个方面:1)没有共线处理市政道路与普通道路的重复路段;2)错误打断市政道路与普通公路的重复采集位置;3)错误打断立体交接位置;4)没有打断路面交接连通位置。在地理单元方面,拓扑关系错误主要表现在面的缝隙与交叉。同时在进行接边时,作业人员往往只关注水系、道路要素接边,对于地理单元的接边检查较容易忽略。
针对地理国情监测数据制定特有的拓扑检查数据集,监测数据要素拓扑关系检查包括7 个步骤:1)数据集创建;2)数据导入;3)拓扑创建;4)要素类添加;5)拓扑规则添加;6)拓扑验证;7)导出检查结果。
上述代码实现要素拓扑检查的主要思路为首先创建拓扑规则,然后根据对添加的监测数据进行压盖、重叠、闭合、打断等检查。
2.3 要素属性检查
在进行内业数据编绘时进行属性的修改与赋值,通常在进行属性赋值时由于人为或者软件漏洞会造成属性赋值错误,并且该类错误的范围较大、普遍性较高。一般的要素属性错误主要有枚举赋值错误、图斑类型错误以及对象属性与实际情况偏差。
2.3.1 枚举赋值错误
地理国情监测数据中的部分枚举字段可通过软件或人工赋值,如地理国情监测中“变化类型”字段通常会随着年度监测发生变化,根据不同的变化类型对该字段进行赋值,如“0”表示“伸缩”、“1”表示“新生”、“2”表示“纠错”。在生产过程中,由于理解偏差、软件没有经过测试就使用会造成“要素唯一标识码”“变化类型”等枚举值错误。
2.3.2 图斑类型错误
如果地理国情监测数据出现大面积图斑更新错误,就会造成数据成果不合格,重新进行数据查改以及上交会造成项目成本增加。图斑的大面积错误主要由以下3 个原因导致:1)没有按照外业调查成果进行内业图斑分类代码更新;2)两期影像对比不明显,没有通过外业调查的方式对内业不能明确图斑分类的情况进行核实;3)错误进行的图斑合并或切割造成的变化图斑的错误更新[11]。
3 质量检查应用实例
利用Python 语言以及地理国情监测数据之间的相互关系对数据更新错误进行检查与核实,通过对错误信息进行定位实现错误信息自动提取,形成错误定位文件。本文以地理国情监测数据中道路中心线与地表覆盖数据中建筑物面之间的错误拓扑关系为例进行说明。
3.1 设计思路
本案例是实现线要素与面要素相切、相交区域的提取,实现流程如图2 所示。
图2 线要素与面要素相切、相交区域提取
具体实现步骤为:
1)确定脚本执行的工作空间,在此空间内可进行读取、查询以及处理数据等工作;
2)线要素数据合并,将线状桥梁要素、线状河流要素以及线状道路数据等进行合并,并丢弃不必要属性字段,使用的是ArcGIS 自带合并要素功能;
3)通过按位置要素选取工具将与线要素相切、相交的地表覆盖图斑确定为一个临时面要素层;
4)通过按要素属性选择工具将临时面状要素图层中分类为非房屋的要素图层丢弃,保留房屋类面状要素选择集;
5)使用“Intersect”工具对合并后的线状要素与房屋类面状要素进行相交处理,将错误区域线状要素以预定格式进行储存与输出。
3.2 关键步骤与函数
ArcGIS 工具箱中的大多数功能均可通过ArcPy相应的功能函数实现,利用Python 语言对ArcPy 相应功能函数进行调用以及组合,可以满足大部分地理国情监测成果质量的自动检查[12-13]。上文设计思路的主要实现步骤如下:
1)通过调用ArcPy 站点包实现工作间的设置,在此空间内可实现数据的查询、增减等操作,如增加线状道路要素数据。实现代码为:
import arcpy
from arcpy import imp
imp.workspace="D:/ceshiData"
UV_LRRL="JIAN_256100.gdb/ceshiData/
UV_LRRL"
……
UV_LCRA="JIAN_256314.gdb/ceshiData/
UV_LCRA"
2)选择ArcPy 站点包中的FieldMappings 类及其方法对线状要素所需属性表进行组织并删除合并后线状要素不需要的属性。实现代码为:
fieldMappings_output=arcpy.FiledMappings()
fieldMappings_output.addTabke(UV_LRRL)
……
fieldMappings_output.addTabke(UV_HYDL)
#删除无用的属性字段
If field.name not in["CC","GB","NAME"]:
fieldMappings_output.removeFieldMap(fieldMappings_output.fileFieldMapIndex(field.name))
3)对线状要素进行检查,在合并函数中加入fieldMappings_output 作为字段参数对线状要素进行合并处理。
4)通过属性选择、空间选择操作选择与线状要素相切、相交的房屋面要素并得到线面相交的线要素数据。实现代码为:
Arcpy.MakeFeatureLayer_management
(UV_LCRA,”LCA_lyr”)
Arcpy.Intersect_analysis
(["LCA_lyr","lineTemp_lyr"],"lineTemp_lyrl","ALL",".001 Meters","INPUT")
Arcpy.MakeFeatureLayer_management
("lineTemp.shp","lineTemp_lyr")
5)整理输出结果,添加错误说明字段,将无用属性字段删除。实现代码为:
For field in filedList:
fieldList=Arcpy.ListFields("lineTemp_lyrl.shp","*","*")
If(fied.name!="FID")and(field.name!="CC"):
Arcpy.AddField_management(fc,"错误类型","TEXT", "", ""50, "", "NON_REQUIRED","NULLABLE","")
6)填写错误说明字段内容。实现代码为[13]:
arrpy.CalculatedField_manegement("错误类型","lineTemp_lyrl","PYTHON_9.3",expression)
Expression="str(!CC!)+str(!CC_1!)"
通过上述步骤以及代码即可实现地理国情矢量数据的空间定位与错误说明,辅以人工浏览与检查,形成检查成果并交给作业人员修改与完善,可提高数据的检查效率、大大降低人工工作量。
4 结语
地理国情监测项目具有周期长、时间紧、任务重的特征,因此研究对地理国情监测项目成果数据质量进行有效控制、保障年度国情监测项目按期按质完成具有重要意义。本文详细介绍了地理国情监测数据检查的主要内容,包括空间参考系检查、拓扑关系检查、属性结构检查等。同时对Python 语言以及ArcPy 站点包进行了介绍,为了最大限度提高作业效率、保障成果质量,通过利用Python 语言结合ArcPy 站点包编写地理国情监测数据成果质量检查工具,实现错误位置的快速定位。通过实际应用设计并实现了拓扑关系错误定位。本文编写代码并不完善,仅仅实现了设计功能,同时应加入解锁数据、许可检查、异常处理等功能,进一步完善与丰富程序。根据地理国情监测数据的特征,利用Python 语言辅助相关质检工作是一种高效科学的处理办法,同时可将本文开发思路进一步应用于基础测绘与国土调查等项目数据处理中,提高Python语言的应用价值。