矿山遥感监测成果数据报表自动生成方法
2020-04-08刁明光赵元元赵丹宁王彦佐
刁明光, 赵元元, 赵丹宁, 刘 芳, 王彦佐
(1.中国地质大学(北京)信息工程学院,北京 100083;2.中国自然资源航空物探遥感中心,北京 100083)
遥感地质调查技术涉及区域地质遥感调查、基础地质环境遥感调查、地质灾害遥感调查、矿产资源遥感调查、矿山开发状况遥感监测和矿山环境遥感动态监测等诸多领域[1]。长期以来,国土资源部门在矿山地质环境监测过程中,广泛采用遥感技术[2],获得了大量矿山遥感监测数据,并依据相关技术标准,对这些数据进行整理编制,将最终提交的成果数据按照规范进行入库。
由于报表是对相关数据统计汇总的重要手段,因此管理部门多以报表的形式使用矿山遥感监测成果数据。在提交入库成果数据时,相关技术人员通常采用人工方式编制报表,在整理分析报表的基础上,对报告中指标数据变化、数据间关系等诸多方面进行逐一核查。在编制报表过程中,技术人员常用ArcMap等GIS(geographic information system)工具对矿山遥感监测成果数据进行数据解译等处理工作,然后把从矢量图层中获取的属性数据录入到Excel中,进行手动计算和格式调整,进而对矿山遥感监测成果数据进行分析、整理及存档。在上述报表编制过程中,主要存在以下问题。
(1)图层属性数据关联性强,导致报表数据计算量大,规则复杂。矿山遥感监测成果数据种类多,涉及的计算过程烦琐,工作重复性强,数据整理成本高。数据处理过程中,矢量图层间的交叉导致不同报表间的属性数据产生相应的关联关系,手动填充报表的工作方式效率低,且极易出错。
(2)入库成果数据需求变化频繁,导致报表类型多样,重复率高。依据矿山遥感监测工作流程,参照成果数据入库技术要求[3],制定模板,完成报表制作。由于成果数据入库技术要求变更频繁,从而导致了报表模板需求不断变化,引起报表类型的根本性变化,工作重复率高。
(3)统计计算依赖于第三方软件导致报表维护困难,独立性差。技术人员采用手动编制报表的方式,将要提交入库的成果数据手动填充至报表模板中,这种工作模式要求技术人员在本地预先安装Excel软件,报表统计所依赖的第三方软件的升级、更新都会对报表数据的准确性和可维护性造成影响。
为此,分析矿山遥感监测成果数据报表源数据特点,规范报表生成工作流程,研究并验证具有自动化、可视化、高效便捷特点的矿山遥感监测成果数据报表生成方法具有重要意义。
1 报表源数据的完整性约束及生成流程
矿产资源遥感监测成果数据报表源数据,是基于矿山遥感监测成果数据中矢量图层中与空间数据相对应的属性数据。在生成报表过程中,相关部门参照《地质信息元数据标准》(DD 2006—05)[4],根据数据质量信息、元数据信息、空间参照信息等约束,对成果数据入库技术要求进行规范,然后根据入库技术要求将涉及的矢量图层中对应的属性数据[5]进行统计并填充到对应的报表中,报表源数据完整性对报表的精确性和可靠性有着重要的影响。
1.1 报表源数据的完整性约束
实施数据完整性约束,可以避免形成不符合入库技术要求的数据,防止出现因错误的输入或输出而导致的无效操作和错误信息。矿山遥感监测报表源数据来源于通过矢量图层获取的属性数据,是描述空间对象特征的数据,这些属性数据类型众多、组织结构复杂、存在着属性完整性约束;同时,这些属性数据来自于不同的矢量图层,存在着参照完整性约束。这两类完整性约束是提高报表统计的精确性和可靠性并保证报表质量的重要手段。
1.1.1 属性完整性约束
报表源数据类型的多样性决定了其规范描述的复杂性。属性完整性是指表中属性字段的完整性。例如,数据类型、格式、值域范围、是否允许空值等,属性完整性约束保证在数据表中相应列输入数据的有效性。
在编制入库成果数据时,报表数据间存在着关联性、唯一性、非空性、格式固定性等特殊的技术要求,从而使其数据规范描述变得复杂[6]。针对数据字段的精度、约束与条件、值域三方面,该规范明确定义了报表源数据属性字段的约束集合。其中,数据精度规范主要包括度量单位、数据精度、数据格式等;字段约束与条件规范主要包括必选、可选、条件必选3种方式;字段值域规范主要包括属性字段的取值范围。
如表1所示,入库技术要求针对报表源数据No1~No5的精度、约束与条件、值域等三方面进行了明确规范。这些描述方法的要求不尽相同,相互制约,使各字段符合属性完整性约束。结合XSD(XML schema definition)典型机制,图1以No 1为例,详细描述基于的属性约束描述方法[7]。该约束保证了报表生成过程的完整性,提高了报表统计的精确性。
表1 属性完整性约束示例
图1 No 1精度属性完整性描述方法
1.1.2 参照完整性约束
在报表生成过程中,涉及的矢量图层种类多、数据量大,且各矢量图层间具有一定的属性关联。参照完整性约束的目的是保证多张报表间属性数据的一致性,确保图层间的关联逻辑符合规范。
按照最新成果数据入库技术要求,矿山遥感监测成果数据类型分为矢量类型、影像类型、野外验证、元数据文件、统计报表文件、文档类型6种。其中,矢量类型数据为生成统计报表文件的报表源数据提供了重要基础。如图2所示,报表源数据是基于矢量类型数据中的属性数据。其中,报表中大部分数据通过直接读取矢量图层对应的属性数据获得,少部分数据是获取源数据后经基本运算所得。
由图2可知,生成报表需要的属性数据分别从对应的矢量图层中获取,每张报表统计的数据量由一个或多个矢量图层的属性数据组成,统计数据时工作量大,数据间的关联关系较为复杂。
图2 参照完整性约束示意图
以恢复治理报表为例,该报表统计的属性数据需要从开发占地图层、恢复治理图层和塌陷区图层中获取。通过参照完整性约束,保证了表间数据关系的一致性,提高了报表统计的可靠性。
1.2 报表生成的工作流程
按照入库技术要求,矿山遥感监测成果数据报表的生成包括获取矢量图层、读取相关图层属性数据、计算属性数据、生成报表四部分,具体工作流程如图3所示。矢量图层获取是结合自动导入和手动添加工程项目的方式进行的,通过对矢量图层的属性表中的属性数据的读取,进而对相关源数据进行参数运算,然后将计算结果及其他不需参数计算的报表源数据按照指定的报表模板依次填写到对应的报表中,完成多张报表的自动生成工作。
图3 报表生成工作流程
2 报表映射模型的建立
在报表编制过程中,建立报表映射模型可以有效地解决重复性操作问题,报表映射模型中报表模板的确立依赖于入库技术要求。因此,在建立报表映射模型时,需从入库技术要求中提取相关信息,制定模板,搭建映射关系。
报表映射模型采用面向对象的设计思想,实现从报表模板到映射类的直接转换,如图4所示,该模型主要由模板类型、映射规则和映射类定义三部分构成,其中不同Excel报表模板通过一定映射规则直接转换成对应的Report_KFZD_LYZK(矿山占地-利用状况报表模板)、Report_HFZL(恢复治理报表模板)等映射类。矿山遥感监测成果数据报表模板类型的多样性决定了映射类的复杂性,针对每张工作表,映射类的属性和方法需要单独设计。通过结构类型转化和数据类型规范等映射规则,使模板类型与映射类保持紧密的关联性和高度的一致性,从而完成整个工作簿的自动生成。
图4 报表映射模型
3 报表数据读写组件的确立
依据工作要求,报表多以第三方软件Excel格式呈现,第三方软件的升级会降低报表生成的效率和兼容性。因此,在系统设计时应尽量降低与第三方软件的耦合度。
目前,NET平台下对Excel文件进行操作的常用方案包括OLEDB(object linking and embedding database)数据源、COM(component object model)组件和NPOI(net poor obfuscation implementation)组件库[8-11]。其中,OLEDB数据源方式在读取数据的过程中缺乏灵活性,对内存的消耗比较高;COM组件方式要求用户本地安装Office组件,系统环境依赖性较强;NPOI组件库采用文件流方式对Excel文件进行读写操作,方式灵活,读写速度快,节省服务器资源,对第三方软件的依赖性低。
结合矿山遥感监测成果数据报表源数据特点、数据呈现方式和报表生成工作流程,参照成果数据入库技术要求,采用NPOI组件技术实现对数据的读写操作有如下优势。
(1)数据读写速度快、稳定性好。采用面向接口的设计架构,根据该框架提供的接口,编写读取模板路径、打开操作文件、数据填充计算等相关操作的功能函数,减小手动计算过程中的误差,提高报表生成过程中数据的准确性。
(2)报表模板格式多、适应性好。组件库中包含了大部分Excel的格式特性,可以对数据格式、公式等进行操作。提交数据类型的不断变化,导致入库技术要求的频繁变更,进而影响报表模板的稳定性,采用该框架可以适应模板样式的不断迭代,降低工作重复率。
(3)第三方软件耦合度低、独立性好。为减少用户在矿山遥感监测成果数据报表生成工作过程中对第三方软件的依赖,自动生成的报表应满足版本兼容性和独立性。NPOI框架支持多种文件格式,如xls、xlxs、docx等。因此,NPOI既可以实现对Excel不同版本的兼容和相关独立性,又增强了报表生成方法的可扩展性,减小了无第三方软件或第三方软件升级、更新带来的影响。
结合矿山遥感监测成果数据入库技术要求,以及报表源数据的完整性约束,采用基于NPOI组件库设计矿山遥感监测成果数据报表自动生成方法,保证数据的准确性、增强模板的可扩展性、提高报表制作过程中系统的独立性。
4 报表自动生成方法的设计与实现
矿山遥感监测成果数据报表自动生成方法采用三层体系结构[12],基于AE(ArcGIS engine)的插件技术[13],结合NPOI组件技术进行设计,并根据数据特点建立报表映射模型,通过映射模型完成数据间的交流传递,实现按照入库技术要求、依据既定模板、自动生成报表的功能。该方法避免传统方式操作报表的问题,又提高数据导出操作的灵活性和通用性。
4.1 报表自动生成方法的技术架构
报表自动生成方法采用基于AE的插件技术,调用特定接口读取矢量图层,并获取图层中的属性数据。将数据按省、市、县分别存到其对应的散列表(HashTable)中进行数据存储,通过对NPOI组件调用,实现对Excel文件的读写操作,按照报表映射模型,将存储在HashTable中的属性数据写入报表模板中从而实现生成报表,如图5所示。
图5 报表自动生成的整体架构
报表自动生成方法的整体框架由AE接口、NPOI组件接口、可视化组件及报表模型组件四部分构成。AE插件接口用来获取来自矢量图层的报表源数据;可视化组件利用树控件的节点展示报表生成信息,随时显示报表生成进度,并将错误信息及时反馈;NPOI接口用来灵活实现与报表间的数据交流;报表模型组件作为数据存储的中间件,其中模型与不同的报表模板对应,根据不同的报表模型定义不同的属性,方便地实现数据之间的传递。
4.2 报表自动生成方法的功能设计
在报表模板结构的基础上,在项目中添加NPOI应用,根据其提供的接口,编写相关操作的功能函数。按照层次,报表模板包括的核心元素由上至下有:工作簿、工作表、行、单元格。与此相对应,NPOI通过Excel文件对象(HSSFWorkbook)、Excel表格对象(ISheet)、Excel行对象(IRow)、Excel单元格对象(ICell)这4个类分别来定义上述报表的核心要素,从而完成Excel文件的创建过程。通过对文件流(FileStream)等类的操作,将从矢量图层获取的属性数据以HashTable的形式存入内存,通过对HashTable进行操作,将数据写入报表中。具体的操作数据流程如图6 所示。
基于事件驱动的异步机制。如果在报表生成操作完成前操作用户界面,会在单线程上执行耗时操作,导致用户界面停止响应。通过调用基于事件驱动的后台线程组件(BackgroundWork),可以实现程序的异步操作。当主线程调用异步运行线程方法(RunWorkerAsny)时,则会触发运行线程方法(DoWork),新建一个后台线程,把耗时的操作放到后台线程中执行,从而实现多线程操作。同时,为了显示后台操作的执行进度,通过调用控制报表进度条方法(ReportProgress)传递操作进度值,以实现与报表生成界面之间的交互操作。操作完成后,触发后台线程完成事件(RunWorkerCompleted),将后台操作的完成结果反馈给用户。基于事件驱动的异步机制的操作原理如图7所示。
图6 基于NPOI的数据读取流程
图7 基于事件驱动的异步机制
采用基于事件驱动的异步机制,避免因报表生成时间过长而导致的资源浪费,实时查看报表生成进度,报表生成过程中的基本信息得以实时反馈。
4.3 报表自动生成方法的实现
报表自动生成方法主要实现三大功能:报表生成、查看报表、导出日志。报表生成是主要功能,负责多张报表的自动生成;查看报表是报表生成成功后,按照指定目录打开已经生成的Excel文件进行查看;导出日志将程序执行的日志信息以文本形式输出,便于追踪记录在报表生成过程中存在的问题。
4.3.1 报表生成
报表生成功能的使用过程如图8所示。在矿山遥感监测成果编制系统[14]中,打开50万的工程文件,手动导入本底5万的矢量图层,结合当前50万项目中的矢量图层,获取生成报表中的属性数据,按照报表模板自动填充计算,生成多张报表。软件根据用户实际导入的矢量图层,在工作目录下准备相应属性数据,依据报表自动生成方法自动生成相应报表。报表生成过程中,在生成界面提示用户生成成功的报表以及失败的报表。生成成功的报表,如图8中的矿山占地-矿种、废弃矿山、恢复治理、复绿工程、地质灾害数量、年恢复治理占地、采空沉陷、滑坡、崩塌、泥石流、污染、尾矿等12张报表,可直接进行查看;生成失败的报表,如图8中的矿山占地-利用状况报表,可点击折叠符号,浏览详细的错误信息。
图8 报表生成
4.3.2 查看报表
查看报表功能实现了报表批量生成成功后,在生成界面提示生成成功,同时指出明确的生成路径。用户可以到指定路径的文件夹下查看,在该文件夹中会出现按照省份进行划分的Excel文件,每个文件中包含13张规定命名的工作表。由报表生成功能自动生成的恢复治理报表如图9所示。
图9 查看报表
4.3.3 导出日志
导出日志功能是将软件运行时的事件以文本形式记录导出,同时显示程序运行状态,并以此为依据对程序执行过程中存在的问题进行追踪。导出结果如图10所示。
图10 导出日志
5 结论
在对矿山遥感监测报表源数据特点和报表生成工作流程详细分析的基础上,设计并实现了矿山遥感监测成果数据报表自动生成方法。
(1)将ArcGIS和Office两大通用技术进行有机结合,实现了数据的有效交换。采用基于AE的插件式开发技术,对报表源数据进行了完整性约束,减少了重复性操作,保证了数据准确性和报表间的关联性,解决了报表计算数据量大的问题。
(2)采用对象关系(object/relationship,O/R)映射技术,实现了矢量数据的面向对象操作。建立了报表映射模型,适应多类型、多变化的报表需求,降低了因报表模板变更而增加的工作成本,解决了报表需求类型多样的问题。
(3)采用独立于第三方的NPOI组件库技术,实现了报表自动生成功能,大大地提高了软件的独立性。运用NPOI组件式技术降低了各模块间的耦合度,减低了对第三方软件的依赖性,解决了报表统计依赖性强的问题。
实践证明,利用NPOI技术实现的报表自动生成方法具有简易、高效、易于升级维护等特点。该方法解决了在报表生成工作中遇到的实际问题,提高了报表编制的工作效率,为解决生产实践中数据批量生成问题提供了新的设计思路和技术支持。