广西南宁林业勘测设计院,广西 南宁 530001
小班编号一直都是林地征占领域研究的热点问题之一。传统的小班编号方式遵循从北向南、从西向东的原则或者从上到下、从左到右的原则进行编号,其人工参与度高,存在较强的主观性,工作效率低下,且容易发生错误[1]。而且针对线型小班,采用传统的编号规则并不能满足实际需要[2]。因此,如何提高小班自动编号的效率和准确度,是当前亟待解决的问题。
王晓龙等[3]提出了一种基于模型构建器的图斑编号方法,能够实现宗地批量自动化编号,并具有可移植性和自定义性。宋鹏阳等[4]通过编写Python脚本,自动识别小班,并通过计算小班质心坐标,实现了对小班的自动排序编号。答星等[5]基于空间聚集原理,利用Python语言和ArcPy站点包,进行ArcGIS二次开发,解决了离散型图斑在利用坐标位置进行自动编号时容易出现的混乱无序的问题。曹明兰等[6]基于ArcGIS Model Builder在不破坏原图层结构属性的情况下实现了小班自动排序编号的功能,较好地解决了南北狭长、面积参差不齐的小班编号在视觉上的跳跃问题以及岛洞型小班的编号重复问题等。宋鹏阳[7]通过调用Arcpy自动识别林地小班,并基于林班赋值小班号实现小班自动编号功能。李天塍等[8]深入探讨了MapGIS小班自动编号方法,并将其应用于损毁土地的外业调查工作中。李斌[9]巧妙利用ArcGIS10.0的开发优势与Excel2007的便捷操作,较好地实现了林业小班自动化编号。郭小波等[10]通过C#及ArcEngine组件库开发了以图幅为单位图斑自动编号的程序。郑宇志等[11]提出了简化MBR编号法、改进锥形编号法以及递归分解编号法三种编号方法。杨全等[12]提出按带状法进行小班编号,真正意义上实现了从上到下、从左到右的小班编号。
文章针对小班编号的问题,提出了三种常用的自动编号方法,并基于.Net平台,结合VS2012开发框架,采用ArcGIS Add-In对ArcGIS进行了二次开发,设计了小班自动编号工具可视化界面。最后,结合具体的实验数据进行了验证,并针对程序运行的结果,与人工小班编号方式进行对比分析,探讨该工具的准确性和高效性。
ArcGIS Add-In技术作为一种新推出的开发技术,具有容易创建、便于共享、易于安装、方便卸载、技术安全等特性,使用该技术可以极大程度上降低开发人员的学习成本。相较于Python Add-In技术,面向.NET及Java高级编程语言的开发方式可支持更多可扩展元素。C#作为一门专为.NET Framework设计的面向对象的高级编程语言,其语言简洁、兼容性强、与Web紧密结合,更受开发者的青睐。利用.NET平台配合ArcGIS的SDK开发包,可实现细粒度的控制ArcGIS,完成各类复杂的二次开发操作[13]。
由于传统的小班自动编号工具极大部分是根据具体的编号规则进行二次开发,要么程序可视化界面不够灵活,要么程序自动化程度不够高,不能根据用户的实际需要选择定制,存在一定局限性。基于此,文章提出的小班自动编号工具在保证编号准确性的前提下,根据待排序图层要素的对应字段与线性图层要素的对应字段分别进行排序,并根据分类字段进行归一化处理,通过查询计算每个小班图斑点距离线要素起点的距离,然后按照该要素至线要素起点距离进行排序即可。根据具体实践,实现了往返法、顺序法、Z形法三种编号方式,在最大程度上实现了编号的自动化与多功能化。程序界面如图1所示。
图1 程序设计界面图
(1)往返法。首先确定河流、道路等线要素的起点和终点,选择线要素的右边为起始边,计算小班几何中心到线要素起点的距离,根据距离的远近依次进行编号,直至线要素的终点,然后以终点为起点,首末置换,同理根据距离的远近依次进行编号。
(2)顺序法。确定线要素的起点和终点,选择线要素的右边为起始边,计算小班几何中心到线要素起点的距离,根据距离的远近依次进行编号,直至线要素的终点;然后从线要素的起点出发,以线要素的左边为起始边,同理,根据距离远近依次进行编号。
(3)Z形法。确定线要素的起点和终点,不分线要素起始边,直接计算小班几何中心到线要素起点的距离,根据距离的远近依次进行编号,直至线要素的终点。
根据线型小班自动编号工具的设计原理,在.NET3.5的平台上,结合VS2012开发框架,基于ArcGIS10.2的版本进行Add-In的线型小班自动编号工具开发。该工具可根据用户的具体需求,通过可视化界面的图层选择、对应字段、分类字段、排序类型、编号字段等参数选项卡来进行具体的设置和选择,以制定符合实际用户要求的编号规则,最终实现线型小班自动编号的过程。其具体的实现流程如图2所示。
图2 线型小班自动编号工具实现流程图
实验选取了广西某地区林地变更整合项目的部分数据,数据投影坐标系采用3度分带,中央经线108°,地理坐标系为GCS_China_Geodetic_Coordinate_System_2000。数据存储在个人地理数据库中,数据库格式为GDB格式,内含一个面图层AS和一个线图层XTC。其中,面图层AS共计图斑34个,包含OBJECTID、SHAPE、编号、线属性、BH、FL、面积、长度这8个字段,图斑面积合计30935.8m2,最小图斑面积为358.7m2,最大图斑面积为2258.9m2;线图层XTC共计2个要素,包含OBJECTID、SHAPE、线属性、SHAPE_Length这4个字段,要素1长度为7295.1m,要素2长度为2853.9m。具体实验数据概况如图3所示。
图3 实验数据概况图
(1)程序参数设置。在Arcmap中启动插件程序,弹出线型小班自动编号程序可视化界面。根据用户的实际项目需求,在待排序图层选项参数下,图层选项卡中,选择面图层AS,这里程序将处理面图层中所有的小班;对应字段选择面图层AS中的线属性字段,该字段的字段值为程序排序的参考初始值;分类字段选择面图层AS中的FL字段,该字段的字段值与线图层XTC中的要素值相对应;选择排序类型选项卡有顺序法、往返法和Z形法三种,可根据实际需要进行选择;编号字段选择面图层AS中的BH字段,该字段值用来存储程序自动编号后的值。在线性图层参数选项下,选择线性图层XTC,对应字段选择线性图层XTC中的线属性字段。点击“确定”按钮,执行线型小班自动编号操作。
(2)程序运行结果。选择往返法进行线型小班自动编号,设置好其他程序参数后,运行程序。根据程序运行结果,该实验共处理了34个小班。程序运行成功后,会弹出处理完成的对话窗,并将排序结果自动保存在面图层AS中的BH字段中。关闭对话窗,检查程序执行后小班的编号情况,确认执行是否成功。往返法线型小班自动编号结果如图4所示。
图4 往返法线型小班自动编号示意图
选择顺序法进行线型小班自动编号,其他程序参数保持不变,运行程序。程序处理完34个小班后,会弹出处理完成的对话框,并将排序结果自动保存在面图层AS中的BH字段中。顺序法线型小班自动编号结果如图5所示。
图5 顺序法线型小班自动编号示意图
选择Z形法进行线型小班自动编号,其他程序参数保持不变,运行程序。待程序处理完毕,检查自动编号成功后,关闭程序。Z形法线型小班自动编号结果如图6所示。
图6 Z形法线型小班自动编号示意图
结合图4、图5和图6的结果可知,基于该线型小班自动编号工具可以准确地完成该项目的小班编号工作。为验证其科学可靠性和高效准确性,采用人工方式进行编号,并与程序运行的结果进行对比。以往返法编号的方式为方案一,以顺序法编号的方式为方案二,以Z形法编号的方式为方案三,对三种方案完成这34个小班编号工作所耗费的时间、编号准确度等指标进行分析,得到三种编号方法的结果对比分析如表1所示。
表1 编号结果对比分析表
由表1可知,采用往返法进行线型小班编号时,工具耗时2s,人工耗时58s;采用顺序法进行线型小班编号时,工具耗时2s,人工耗时66s;采用Z形法进行线型小班编号时,工具耗时3s,人工耗时128s。而且这三种编号方法的编号准确度均为100。由此可知,采用文章提出的方法进行线型小班自动编号,可以高效准确地完成线型小班编号工作,极大地节约了劳动成本,提高了生产效率。
文章基于.NET平台和VS2012开发框架,设计并实现了基于ArcGIS Add-In的线型小班自动编号工具,并结合实践数据进行分析验证。实验结果表明,采用文章提出的线型小班自动编号工具,极大地节约了劳动成本,保证了编号的准确性,大幅度提高了生产效率。而且针对项目的实际需要,程序设计了往返法、顺序法、Z形法三种编号方法,用户可以根据自己的需求选择合适的编号方法完成线型小班的自动编号。但文章的实验主要针对项目的部分数据而进行,且样本数据只有34个小班,如果要推广至相关行业的实际生产应用中,还需进行更多的实验,来验证该工具的可靠性和实用性。