钱发斌,延红卫
(云南省林业调查规划院,云南 昆明 650051)
在林业调查规划工作中经常需要对工作形成的矢量图层进行逻辑错误修改,由于矢量图层的小班因子一般较多,修改起来比较缓慢,往往是修改好了某一个因子,因修改另一个因子又导致该因子派生出新的错误。通过研究矢量图层逻辑错误的常规修改方法,结合ArcEngine(全称ArcGIS Engine)二次开发方法和数据库技术,探索出新的矢量数据逻辑错误修改方法,并应用于林业生产领域的各项工作中,以期提高工作效率。
ArcEngine是用于构建定制应用的一个完整的嵌入式的GIS组件库。利用ArcEngine,开发者能将ArcGIS功能集成到一些应用软件。在ArcGIS9系列产品中,ArcGIS Desktop、ArcEngine和ArcGIS Server都是基于核心组件库ArcObjects搭建的。ArcObjects组件库有3000多个对象可供开发人员调用,为开发人员集成了大量的GIS功能,可快速地帮助开发人员进行GIS项目的二次开发。2004年美国ESRI发布了ArcEngine,ArcEngine开发包提供了一系列可以在ArcGISDesktop框架之外使用的GIS组件,ArcEngine包含一个构建定制应用的开发包,其具有简洁、灵活、易用、可移植性强等特点,程序设计者可在自己的计算机上安装ArcEngine开发工具包,工作于自己熟悉的编程语言和开发环境中。ArcEngine通过在开发环境中添加控件、工具、菜单条和对象库,在应用中嵌入GIS功能[1]。
数据库技术是信息系统的一个核心技术,是一种计算机辅助管理数据的方法,可研究如何组织和存储数据,如何高效地获取和处理数据。数据库技术是现代信息科学与技术的重要组成部分,是计算机数据处理与信息管理系统的核心。数据库技术研究解决了计算机信息处理过程中大量数据有效地组织和存储问题,在数据库系统中减少数据存储冗余,实现数据共享,保障数据安全以及高效地检索数据和处理数据[2]。
在实际工作中,大多数人一般使用ArcGIS软件来进行逻辑错误修改,通常的修改过程是在软件中打开要进行逻辑修改的图层,然后调出查询对话框,输入查询语句,查出错误,再通过属性表的计算字段功能完成修改(图1)。
图1 传统的修改方法
ArcGIS提供了模型构建功能,矢量图层逻辑修改的另一种方法是在熟悉模型构建的情况下调用相应的GIS功能,通过整理完备的事务逻辑和处理流,在ArcGIS模型构建器中自定义创建模型,把凡是符合条件的错误让模型完成自动修改。
基于ArcEngine二次开发技术,利用Sql Server数据库技术,通过ArcEngine控件获取图层信息,再将图层属性信息转换为数据表,转换后的数据表放在一个DataTable数据容器中,通过数据传输语句导入数据库,而后通过编写逻辑检查语句来进行批量检查错误和改错。这样做的好处在于,设计的初衷和过程可能繁琐,但最终的处理均是交给计算机来完成,对于人工来说是无感的、十分快捷的,对于操作人员来说不需要掌握其中的内容,只需了解怎样修改数据逻辑即可。
系统的基本工作逻辑是:在软件中打开要进行逻辑错误修改的图层,迅速地获取到图层信息,将图层信息转换为数据表并放入DataTable组件中,并将此DataTable中的内容导入数据库,数据库根据事先通过电子表格导入的业务逻辑检查语句进行批量检查,然后用户根据错误情况进行修改,修改完成后再进行刷新,检查是否还存在未修改完的错误以及是否有新的错误产生,如是,重复以上步骤直至错误修改完成(图2)。
图2 系统的工作原理
修改方法有2种,一种是在软件中开发出编辑、修改、批量计算等功能来进行修改,另外一种是根据个人习惯在ArcGIS中进行修改,因为采用这种在某种意义上打破了ArcGIS自动架构锁的限制(实际锁依然存在,但可以在软件中打开图层进行逻辑检查的同时,又在ArcGIS中对同一图层进行编辑和修改,感觉像不存在锁的限制一样),逻辑检查语句可以根据实际情况编写,如在工作中需要小斑面积要大于0.067 hm2(1亩),树种平均胸径要大于5 cm才能有蓄积等这样的业务逻辑要求,可以统一编写所有语句存放在一个电子表格中导入软件即可,根据需要可随时更改,极其方便和灵活(图3)。
经过实例验证,从理论层面上说,基于ArcEngine二次开发方法结合数据库技术的修改方法对矢量图层的逻辑错误进行修改,不仅避免了传统修改方法改一处需要先查询再改错再查询再改错的反复修改的繁琐,同时,针对批量查询出的错误,有时可以根据错误情况结合人工判断把几种错误统一修改,在很大程度上减少了改此及彼派生出新的错误,如果采用传统的修改方法,有可能对一个字段已修改正确了,而因改了另一个字段又出现了新的错误,这种情况的出现无法避免,其取决于矢量图层字段之间的逻辑关系是否严谨。因此,采用批量查询修改的方式从理论上无疑是快捷高效的,而模型修改方法在解决这一问题上是无能为力的,除非在开始编写模型时就把所有的逻辑错误类型考虑在内。
从执行效率层面来看,模型修改方法的执行效率是最高的,因为其所有的工作均由计算机来完成;传统的修改方法通过编写语句完成一个查询平均约需1.5 min时间,而修改一次错误约30 s时间,则100个逻辑查询语句(假设派生的错误有20个),则总耗时为:(100个+20个)×1.5 min/个+(100个+20个)×0.5 min/个=240 min=4 h。当然,这是理论上的绝对值,实际修改过程中可能耗时要更久;基于ArcEngine结合数据库技术的修改方法省去了逐一输入语句查询过程,也省去了对派生错误的逐一查询过程,较传统的修改方法,100个逻辑查询语句(同样假设派生的错误有20个)从理论上看修改这些错误的总耗时为:(100个+20个)×0.5 min/个=60 min=1 h。由此看来,效率提高了4倍(表1)。
图3 修改方法
通过实际验证,后2种方法的效率之比不止于4倍。因传统的修改方法如果修改的错误数较多,需反复进行同样类似的操作,会使人变得疲惫不堪,中间需要反复休息,而基于ArcEngine结合数据库技术的修改方法本身耗时不多,可一气呵成,这样极大地提高了工作效率。
实践证明,基于ArcEngine二次开发方法结合数据库技术的矢量图层逻辑错误修改方法是可靠和高效的,最重要的是可以重复使用,不限图层、字段类型,任何坐标的任何矢量图层均可放入软件中,只需根据不同业务逻辑导入相应的逻辑检查语句集(语句集还可根据实际随时更改),即可快速检查和修改,一次编程,永久使用,使用简单,灵活方便,可充分提高林业生产和工作效率。