张 恒,刘 群
(四川建筑职业技术学院,四川德阳 618000)
GIS开发中可重用组件资源库的设计
张 恒,刘 群
(四川建筑职业技术学院,四川德阳 618000)
传统的 GIS系统开发多采用结构化的设计思想,对于不同 GIS信息系统的建设,需要重复去设计、开发相关模块,开发效率较低。将组件重用思想应用到GIS开发实践中,总结了组件、组件重用思想及组件开发流程,探讨了GIS开发中可重用接口的设计思路,包括:空间数据库连接和图层加载接口设计,数据查询和维护接口设计,空间分析接口设计。应用实践表明,基于可重用组件的GIS系统开发,可以高效、快速地开发出更稳定的应用系统,显著降低开发成本。
组件式地理信息系统;基于组件开发;重用
随着组件和中间件技术(如 COM、CORBA、JavaBeans)的普及,越来越多的GIS开发者采用面向对象的设计模式(如 UML)、面向对象的编程语言(如C#、VB.NET)和COMGIS组件来开发GIS应用系统。在系统开发中,COMGIS组件仅提供对空间数据进行输入、存储、处理、分析、输出等功能的基类、控件和接口,为了开发出完整实用的应用系统,GIS开发者还应充分分析这些控件间的内在联系,对其进行二次集成和深加工,开发出新的可重用模块。因此,深入分析应用型GIS系统的通用功能,设计并开发可重用组件,这无疑是GIS开发者需要深刻思考的问题。本文以空间分析组件的设计和开发为例,介绍应用型GIS系统开发中可重用组件的设计方法,供GIS开发人员参考。
组件(Component),是一些独立代码的封装体,提供一定的功能。组件具有高度封装、可复用、稳定性好、易维护升级等特点[1,2,4]。COM组件,是按照COM规范编写的,以动态链接库(ActiveX DLL)或对象类别扩充组件(OCX)等形
式发布的可执行二进制代码,它为建立可伸缩的信息系统提供了极大的便利。随着组件化软件开发技术的流行和日趋成熟,GIS软件公司在组件框架的约束下,结合GIS行业的特点和应用,推出了面向行业应用的COMGIS组件,使组件粒度进一步细化和行业化。COMGIS组件的基本思路是:把GIS的各种功能模块划分为不同类型的控件,每个控件完成各自相应的功能。COMGIS存在的目的是向外界(应用框架、其他组件或者最终用户)提供GIS数据显示、分析、处理等功能的专业服务。可见,COMGIS根据组件规范的要求,封装了GIS专业功能,实现了相应的接口,GIS开发人员需要进一步将COMGIS组件、开发语言和数据库集成起来,开发出满足行业需求的应用系统,其实质是将各类异构系统提供的组件重组。
软件重用是指通过可重用组件来组装、集成、构建和更新软件系统[1-2]。组件的重用性依赖于组件的粒度大小、实现功能、通用性、组合方式、准确性、容错性等因素。组件重用的粒度可大可小,小到普通子函数、接口、类库的重用,大到整个软件体系的重用[1,4],这些重用提供了一套解决某类共性问题的思路和参考代码,使开发者无需重复制定方案,只需做适当的修改和完善。组件重用的目标是让开发者充分利用现有的组件组装应用程序,而不需要考虑这些组件是如何开发的。可见,利用可重用组件来开发GIS应用软件,开发者将从繁重、琐碎的底层重复代码编程中得以解脱,不仅极大地减少了软件开发的工作量,而且显著降低了软件开发的成本,提高了软件的质量。
组件开发流程如下:1)组件抽象与设计;2)组件编程实现;3)组件功能测试;4)组件评价与更新。组件的抽象是按照业务逻辑来抽象组件的功能,为了便于表达和理解,可将组件实现的功能抽象为业务逻辑图,并使用逻辑图之间的联系来表达组件之间的关系。组件的设计包括组件接口的抽象、定义、多态性表达、实现代码和接口之间的关联表达。通常,组件由若干功能接口组成,接口是一组相关操作的集合,通常用于实现某项功能或说明某个行为。组件接口的实现需要充分利用现有的各种组件(COMGIS组件和非GIS组件),定制、开发出满足应用需求的功能函数,即按照功能将各类异构组件重组和集成。在应用系统开发时,COM对象通过接口与外界交互,客户程序是利用接口提供的成员函数来获得组件对象提供的服务。因此,接口的设计是组件设计的核心工作,接口的通用性决定了组件的可重用能力。用户在设计组件时,应注意组件设计的粒度不易过大,设计的每一类组件最好能实现某一类相似的应用请求;而组件接口的设计应简单实用,同时具有可扩充性。设计的组件通常封装为类,用户可通过对象声明及实例化类的方式使用,通过多态或继承机制进行功能扩展。组件测试是指通过模拟测试项目或程序,对组件接口的功能、容错性等进行测试,及时发现问题并改正。组件评价与更新是指依据组件的重复利用率、业务逻辑及功能,进一步改进、完善和升级组件。
GIS应用系统的主要特点是对空间数据的处理和分析能力,而常见COMGIS组件工具仅提供了基本的空间数据操作和分析功能,GIS开发者需要充分利用这些基本功能,通过组合和继承的方式进行功能扩充[1,2,4],从而开发出可供不同GIS系统使用的通用接口函数。本文以COMGIS组件工具--SuperMap Objects为例来说明可重用空间分析组件的设计思路。
3.1 空间数据库连接和图层加载接口
数据库连接接口的设计既可针对特定的数据库开发相应的接口,也可将用户对不同类型数据库的操作以多态的形式进行封装。该接口的核心思想如下:编写数据库连接子函数,按照用户输入的信息构建字符串连接参数并连接数据库。如果连接失败,则给出提示信息;如果连接成功,则通过SuperMap Objects提供的工作空间接口打开空间数据源,加载空间数据集并设置图层的显示风格。在系统退出时,通过定制的子函数断开应用系统和数据库的连接,释放系统资源。
相关接口函数的设计如下:1)属性数据库连接接口,通过开发 ConnectDB(字符串连接参数)函数连接各类DBMS;2)空间数据库连接接口,开发OpenDB(数据库服务器名称、数据库名称、数据库别名、用户名、密码)函数,返回值类型为布尔型,表示空间数据库连接是否成功。其中,关键语句如下:采用Super-Workspace.OpenDataSourceEx(数据源文件全路径名、数据源标识名、数据源引擎类型、是否只读、是否事务、是否独占、是否加密、密码字符串)方法来打开空间数据源。用户可通过编写 OpenDB函数的多态性接口,打开存放于各种媒介中(如 SDB文件、各类DBMS)的空间数据源;3)图层加载及显示风格定义接口,通过编写 LoadDataset(图层名称、显示风格参数)函数实现,可通过LoadDataset接口的多态性,加载不同类型的图层(如点、线、面、文本数据集)并设置其风格。关键语句如下:采用 SuperMap.Layers. AddDataset(加载的数据集,是否放置到最顶层)方法加载数据集,通过soLayer对象设置图层的各种专题显示风格;4)断开数据库连接接口,开发CloseAll()函数实现,该函数应关闭数据库,断开用户对空间数据库的连接,释放地图窗口、工作空间等SuperMapObjects组件占用的系统资源。
3.2 数据查询和维护接口
数据查询和维护功能是GIS应用系统中频繁使用的关键功能,查询的目的是按照某些过滤条件查找出用户关心的信息(如空间分布、描述性属性等),并对其进行定位、浏览、维护(修改、删除、更新)、统计分析等操作。在数据查询和维护接口设计中,组件重用思想主要体现在以下的应用中:1)界面和框架的重用,即针对不同的行业应用,定制类似的查询界面和窗体布局,其区别在于不同的应用中后台数据库表单、字段和用户输入的查询信息不同;2)SQL操作子函数的重用,即编写LoadQueryData(SQL语句、数据填充容器)函数,根据用户选择或输入的查询条件,枚举所有的SQL语句,然后调用该函数,将满足SQL条件的记录加载到数据填充容器中。具体应用时可分为两种情况:即对纯属性表单的操作和对空间表单的操作。前者可通过输入规范的SQL语句或存储过程,可以是查询、修改、删除等语句,然后调用该函数执行相应的操作,并返回执行的结果;后者可通过soDatasetVector. Query(查询条件、是否查询空间数据、字段列表、查询选项)查询满足条件的记录集,而在数据更新时,应找到某个空间实体对应的唯一标示号(即"Sm ID"号),然后更新空间表中的属性字段(一般只更新空间表中用户自定义的属性字段,空间表中系统自动生成的字段不能修改)。
此外,用户还需开发事务控制函数来保障数据的完整性、一致性和并发操作控制。即在执行SQL语句之前,需要开启事务,正确执行SQL语句之后,通过提交事务完成对表单的更新;如果在更新的时候出现了任何异常,应给出提示并回退到更新前的状态。
3.3 空间分析接口
在开发实践中,空间分析接口涉及的函数较多,用户可根据SuperMap Objects提供的对象灵活组合,定制功能实用的接口函数,本文以下列典型空间接口函数为例进行说明。
1)缓冲区分析函数:开发AddBufferToMap(数据集类型、类型参数、缓冲区半径)函数,在SuperMap的TrackingLayer(临时层)上添加单个点、线、面实体的缓冲区;2)动态标注函数:开发LabelLayer(图层、标注字段、标注风格)函数,使用户采用某一标注字段和风格对某一图层进行标注;3)地图定位函数:开发LocateMapObject(地图控件、图层名称、定位条件)函数,使用户可根据定位条件快速地定位某个图层上满足条件的空间数据;4)路径分析接口函数,开发FindShortPath(起始节点号、终止节点号)函数,其关键函数为SoNetworkAnalyst对象提供的FindPath、FindPath2等方法。开发 MarkSelectedPoint(x坐标,y坐标)函数,在地图上实时标注用户选择的拓扑节点;5)属性统计函数,开发StatAttribute(记录集、统计字段、排序字段)函数,按照某个字段统计指定记录集中的信息并排序;6)三维分析函数,主要采用Super3D控件提供的方法组合来实现常见的三维分析功能,如三维场景生成、三维图形基本操作、水淹模拟、三维图片输出等功能。
组件重用技术和面向对象技术集成产生的COMGIS正在引导着GIS应用系统开发的方向,推动着GIS软件的系统集成化和应用大众化。GIS开发者根据COMGIS提供的基本空间分析组件,将其灵活组合或继承发展而创建用户自定义的组件库和接口函数,进而提供给不同的GIS系统使用,这无疑是快速开发高效、安全、健壮的GIS应用系统的有效途径。因此,将组件重用思想进一步应用于GIS系统的研发,从开发者的角度研究GIS和非GIS通用接口的实现,从最小粒度研究组件重用,将具有深远的意义和极具潜力的应用前景。
[1] Katharine Whitehead.基于组件开发[M].北京:人民邮电出版社,2003
[2]DON BOX(著),潘爱民(译).COM本质论[M].北京:中国电力出版社,2001
[3] 吴信才,郑贵洲,谢忠,等.地理信息系统的设计与实现[M].北京:电子工业出版社,2002
[4] 张文江,陈秀万,李京,等.基于COM组件技术的GIS空间模型库研究[J].中国图像图形学报,2003,8(1):110-114
[5] Diomidis Spinellis(著),赵学良(译).代码阅读方法与实践[M].北京:清华大学出版社,2004
[6] 张恒.基于COMGIS的工程图文信息管理系统的设计与实现[D].成都:西南交通大学,2007
[7] 李志毅,赵政.软件复用与COM及.NET组件技术[J].微处理机,2006(6):57-60
Design of the Reuse Component Resources in the GIS Development
by Zhang Heng veloped by adopting
The traditional GIS application is mostly destructured design thought,needs repetition o f the design,develops related module,the efficiency of development is lower.So this paper introduced the reusable com ponents to the GIS application development practice,summed up the component,component reuse thought,component development process, discussed the reuse interface design thoughts of GIS development,including: spatial database interoperation and layer loading interface design,data query and maintenance interface design,spatial analysis interface design.Practice shows that the GIS system development based on reusable components can be highly efficient and rapid developed amore stable system,the development costs can be significant reduced.
COMGIS,Com ponent-Based Development(CBD),reuse(Page:36)
P208
B
1672-4623(2011)01-0036-03
2009-06-08
张恒,硕士,讲师,研究方向为地理信息系统开发及应用。