1、V Jan N14812023o o 2 0 2 3 年1 月第48卷第1期林业科技FORESTRY SCIENCE&TECHNOLOGY基于ArcGIS Engine 征占用林地制图排号系统的设计与实现丛喜东1 魏军2 冯亚男1 梁志强3*(1 黑龙江省生态研究所,黑龙江 哈尔滨 1500810;2 自然资源部第三地形测量队,黑龙江 哈尔滨 150025;3 黑龙江省自然资源权益调查监测院,黑龙江 哈尔滨 150080)摘要:建设项目征占用林地的制图工作是一项操作繁杂的过程,其中图斑排号是制图的一个重要的基础步骤。常用的GIS 软件的对排号方法的操作复杂,在斑块较多的情况下,排号的工作量较大
2、,在斑块号增、改、排错、梳理的过程中操作繁杂,且效率低。结合业务工作实际操作,采用 C#+ArcGIS Engine 组件式 GIS 二次开发等技术,研发建设项目征占用林地斑块排号系统,实现了征占用林地斑块高效统一排号的相关功能,有效解决了在斑块排号过程中存在的技术性和规则性问题,提高了排号的效率,增加了该项业务工作流程的科学性与高效性。关键词:征占用林地;图斑排号;ArcGIS Engine;C#中国分类号:S771 文献标识码:A 文章编号:1001-9499(2023)01-0058-05建设项目征占用林地的制图工作是一项操作繁杂的过程,其中地块排号是制图的一个重要的基础步骤。在传统 G
3、IS 在排号的过程中,需要加载编辑图层,对选中的地块进行逐图斑进行添加或修改其属性信息,在地块较多的情况下,效率较低,且无法实现走向一致的斑块的批量排号,也无法实现号码的自动增加,在排号的过程很容易出现错漏,需要对错误的编号进行重新梳理,重新进行排号操作,极大地影响工作效率。本文通过综合分析和梳理建设项目征占用林地的业务流程,研究地块排号功能实现,旨在达到满足快速实现排号的目的,有效提高地块排号的效率。1 关键技术1.1 ArcGIS Engine 技术ArcGIS Engine 是美国 ESRI 公司推出的一套功能完备的嵌入式 GIS 组件库和工具库,用户可以基于 ArcGIS Engine
4、 和业务工作实际开发出满足业务需求的 GIS 软件系统,并可以脱离 ArcGIS 桌面端而独立运行1。ArcGIS Engine支持多种开发语言,如 C#、JAVA 等2。包括控件、工具条和对象库 3 个关键部分,控件是通过嵌入方式成为 GIS 程序的用户界面组成部分;工具条是进行地理信息交互的 GIS 工具集合;对象库是 ArcObject 的几何图形、GIS 数据源和Geodatabase 的集合3。1.2 C#技术本系统使用 C#作为程序设计的语言。C#是微软公司发布的一种面向对象的、运行于.NET Framework 之上的高级程序设计语言。可以快速地编写基于 Microsoft.NE
5、T 平台的应用程序4。.NET 框架(.NET Framework)是由微软开发,致力于敏捷软件开发、快速应用开发、平台无关性和网络透明化的软件开发平台。1.3 空间数据库(GeoDataBase)技术空间数据库(Geodatabase)是一种采用标准关系数据库技术来表现地理信息的数据模型,它支持在标准的数据库管理系统(DBMS)表中存储和管理地理信息。Geodatabase 是地理数据的顶层部分,它是数据集、要素类、对象类和关联类的集合5。在数据库中,通过要素数据集、栅格数据集和 TIN 数据集三种地理数据集来实现,其中要素集是具有相同坐标系统的要素类的集合。对象类、要素类和要素数据集是数据
6、库中的基本组成部分。数据库中创建上述内容,可以向数据库中加载数据,并进一步定义数据库的索引、拓扑关系,创建子类、几何网络、注释类、关系类等。本文采用个人地理数据库(MDB),便于采用ADO.NET 技术实现数据的统计分析。DOI:10.19750/ki.1001-9499.2023.01.012*中央财政林业科技推广示范项目(黑 2022TG24);2020 年度省属科研院所科研业务费支持项目(A 类 CZKYF2020A003)第 1 作者:丛喜东(1980-),男,副研究员,研究方向为林业信息工程技术、林业智能装备、林业物联网技术、森林工程等。通讯作者:梁志强(1980-),男,高级工程师
7、,从事自然资源调查与监测、数据处理、3S 技术应用与研发、信息化建设等工作。收稿日期:2022-09-20第 48卷592 数据库设计及功能设计2.1 数据库设计数 据 库 设 计 采 用 个 人 地 理 空 间 数 据 库(.mdb),可以通过 Microsoft Access 软件进行打开,并通过 SQL 语句进行数据统计分析。关键字段包括 ID_L(数值型)、PX_L(数值型),x_coord(数值型)、y_coord(数值型),分别用于存储要素唯一值,斑块排序号码、要素中心点横坐标、要素中心点纵坐标。2.2 系统功能设计系统功能设计方面,充分考虑到排号功能的完整性和实用性,结合传统 G
8、IS 的功能进行功能设计(图 1)。*中央财政林业科技推广示范项目(黑2022TG24);2020 年度省属科研院所科研业务费支持项目(A 类 CZKYF2020A003)第 1 作者:丛喜东(1980-),男,副研究员,研究方向为林业信息工程技术、林业智能装备、林业物联网技术、森林工程等。*通讯作者:梁志强(1980-),男,高级工程师,从事自然资源调查与监测、数据处理、3S 技术应用与研发、信息化建设等工作。收稿日期:2022-09-20 图 1 软件功能结构图 (1)常规功能。满足地理信息系统的数据视图空间要素的显示操作,实现图层的放大、缩小、移屏、全屏、上一视图、下一视图、选择、取消选
9、择等功能。(2)系统建库。创建个人地理数据库,用于存储矢量数据。(3)矢量入库。将具有空间参考的建设项目征占用林地图斑矢量导入到个人地理数据库中。(4)添加图层。将数据库中的占地图层添加到该系统中。占用林地斑块排号系统 常规功能 图层添加 斑块排号 图层输出 X 升序 Y 降序排号 X 升序 Y 升序排号 X 降序 Y 升序排号 X 降序 Y 降序排号 排号清除 排号修改 排号为零 重新排序 图幅生成 参数设置 创建要素 图层标注 坐标核算 矢量入库 系统建库 图 1 软件功能结构图(1)常规功能。满足地理信息系统的数据视图空间要素的显示操作,实现图层的放大、缩小、移屏、全屏、上一视图、下一视
10、图、选择、取消选择等功能。(2)系统建库。创建个人地理数据库,用于存储矢量数据。(3)矢量入库。将具有空间参考的建设项目征占用林地图斑矢量导入到个人地理数据库中。(4)添加图层。将数据库中的占地图层添加到该系统中。(5)坐标核算。自动计算占地图层的每个要素的中心横坐标 X 和纵坐标 Y。(6)排号操作。通过选择在走向一致的多个要素(或单个),按照所选要素的中心点的横纵坐标的升降序,进行顺延排号,并对错漏的斑块进行号码修改等。1)X 升序 Y 升序,按要素从左向右、从上向下的方向进行排号;2)X 升序 Y 降序,按要素从左向右、从下向上的方向进行排号;3)X 降序 Y 升序,按要素从右向左,从上
11、向下的方向进行排号;4)X 降序 Y 降序,按要素从右向左,从下向上的方向进行排号;5)号码清除。清除选中要素的号码,针对排号不符合要求的图斑,在选择后进行排号清除;6)号码修改。选中需要修改排号的斑块,按目标号进行修改操作。7)号码为零。筛选号码为空或者为零的数据,并实现选中后定位到相应图斑。8)号码重排。按照已排序的斑块顺序,重新将号码从 1 开始累加排号,保证号码按整数 1 进行累加排序。9)图层标注。按相应标注字段进行图层标注显示。10)图幅生成。根据占地制图标准生成图幅。11)图层输出。将数据库中的图层输出矢量。软件系统的功能结构图如下:3 系统功能实现及应用本系统数据库以个人地理数
12、据库(MDB)进行数据存储,采用 C#+ArcGIS Engine 组件二次开发等技术进行系统研发,并实现系统的相应功能模块。图 2 系统主界面3.1 系统功能实现(1)系统建库。创建 Base.MDB 数据库,该数据库为 ArcGIS 的个人地理数据库,其格式为*中央财政林业科技推广示范项目(黑2022TG24);2020 年度省属科研院所科研业务费支持项目(A 类 CZKYF2020A003)第 1 作者:丛喜东(1980-),男,副研究员,研究方向为林业信息工程技术、林业智能装备、林业物联网技术、森林工程等。*通讯作者:梁志强(1980-),男,高级工程师,从事自然资源调查与监测、数据处
13、理、3S 技术应用与研发、信息化建设等工作。收稿日期:2022-09-20 (9)图层输出。将数据库中的图层输出矢量。软件系统的功能结构图如下:3 系统功能实现及应用 本系统数据库以个人地理数据库(MDB)进行数据存储,采用C#+ArcGIS Engine 组件二次开发等技术进行系统研发,并实现系统的相应功能模块。3.1 系统界面 图 2 系统主界面 3.2 系统功能实现 1、系统建库。创建 Base.MDB 数据库,该数据库为 ArcGIS 的个人丛喜东等:基于 ArcGIS Engine 征占用林地制图排号系统的设计与实现第 48卷林业科技60Microsoft Access 的 MDB
14、数据库,可以实现空间数据和非空间数据共同管理,可通过结构化查询语言(SQL)对数据库中各类数据表的查询、分析、统计、管理等问题。(2)要素入库。通过选择入库的矢量文件,自动将该矢量文件导入到 Base.MDB 库中,入库后的名称为“占地面”,便于后续软件功能进行识别使用。(3)图层添加。通过选择个人地理数据库,将该数据库中的图层添加到软件系统中,用于排号操作。(4)坐标核算。在占地面图层添加字段ID_L、PX_L、X_Coord、Y_Coord 四个字段,均为双精度类型,其中 ID_L 用于存储要素 ID 值,PX_L 用于存储图斑排号;对图层中的每个要素进行遍历,计算每个要素的中心点坐标,存
15、储在 X_Coord 和Y_Coord 字段中,用于坐标排序。(5)图层标注,选择对应图层,根据 PX_L字段的值实现标注。(6)要素选择,通过选择按钮,选择图面中的欲排号要素,通过其他常规功能工具缩放或者移动到斑块位置。(7)斑块排号。根据图斑走向选择图斑,并采用相应功能进行排序等操作具体实现方法:1)选择加入到软件系统中的排号图层;2)获取图层被选中要素,并记录被选中要素ID_L 字段的唯一值,放到临时列表(List)中;3)求得被选中要素之外,最大的 PX_L 字段的值,以此为选中要素进行累加 1 的起始值;4)被选中要素根据其走向,选择的对应的“排号”功能,按选中要素的横纵坐标(x_c
16、oord,y_coord)进行排序,根据排序结果,将相应要素的PX_L 字段的值进行累加更新。实现代码如下:public static void PxBySelection(Ax-MapControl axMapControl,string orderBy)IFeatureLayer pFeatureLayer=axMapCon-trol.get_Layer(0)as IFeatureLayer;string layName=pFeatureLayer.Name;IFeatureClass pFeatureClass=pFeature-Layer.FeatureClass as IFeatureClass;IFeatureSelection pFeatureSelection=pFeatureLayer as IFeatureSelection;ISelectionSet pSelectionSet=pFeature-Selection.SelectionSet;int ipx=pFeatureClass.FindField(PX_L);/px_l 字段序号int iL=pFeatur