Plugin-Based GIS Application Framework: Research and Implementation
-
摘要: 为了解决传统GIS软件的行业化、专业化和开发成本较高的问题, 使GIS软件面向大众化、低成本化发展, 构建插件式GIS应用框架平台, 能提供一个具有良好的复用性和灵活的可扩展性平台, 同时为项目实施所面对的特定知识应用领域提供很好支持软件框架具有实际意义.在深入研究“平台+插件”模型的本质与实现机制后, 提出了基于插件技术的GIS应用框架的对象模型、消息机制和层次结构.同时将这一理论成果成功应用到了大型GIS平台---MAPGIS7.0的开发与实践中, 实现了全插件式的GIS应用框架, 使平台功能扩展和GIS的应用开发具有了可行性.Abstract: Traditional GIS software faces some hot potato, for example, industrilization, specialization and high cost.In order to popularize GIS software, and reduce its cost, construct a plugin-based GIS application framework, which not only provides a nice reusable and flexible develop environment, but also supports special application fields faced developers when they put in practice some application project. After dissecting the essential and implementation mechanism of platform & plugin model, we present the object model, message mechanism and hierarchy of a plugin-based GIS application framework model, and apply this theory into the development and practice of large-scale GIS platform (MAPGIS7.0), which significantly promotes the extension platform function and GIS application.
-
Key words:
- plugin /
- GIS application framework /
- GIS hierarchy
-
0. 引言
在软件项目开发这样一个充满变化的知识应用领域, 面对应用需求的多元化、软件项目的大型化, 使不同开发团队的开发管理复杂性增加, 从而导致了软件开发成本提高等问题(吴信才, 2006).从软件工程的角度出发, 在设计层面人们希望通过一些软件构架的改进达到以下目的: (1) 提高软件复用性; (2) 增强模块化和封装性; (3) 不同功能模块的无缝集成; (4) 灵活的可扩展性; (5) 面向不同应用层面的领域性和易移植性.
目前GIS应用领域正面临着一个从行业级、专业化应用到大众化应用转变过程.随着GIS大众化应用的不断深入, GIS软件系统必须充分考虑适应各种各样不断衍生的应用需求的难题.基于传统软件构架体系的GIS软件系统虽然具有模块分工明确、平台结构紧凑等优点, 但TB级数量级的GIS数据管理、越来越多元化的数据来源、不断外延的GIS功能等发展趋势对GIS平台提出了新的要求和挑战(吴信才, 2002).因此对于GIS平台来说提供一个具有良好的复用性和灵活的可扩展性, 同时对GIS项目实施所面对的特定知识应用领域具有很好支持的软件框架是一件非常有意义的事情.而采用“平台+插件”的软件构架能在GIS平台建设中充分地体现以上特性, 并且在某些特定的应用环境下, 可以很方便地根据应用的实际情况定制客户所需要的特有的运行环境, 从而在很大程度达到减少用户采购和二次开发成本并适应更广泛的应用环境等目的.
本文是在对第四代国产大型GIS平台MAPGIS7.0的开发与实践过程进行总结的基础上, 提出了基于插件技术的GIS应用框架的实现策略.
1. “平台+插件”模型
“平台+插件”模型的主要思想是将扩展功能以插件的形式通过平台统一地管理起来, 在平台内部提供平台和插件之间以及不同插件之间完备的消息机制(包括系统消息转发、框架内部自定义消息), 对不同扩展功能进行分类并定义标准接口从而把不同的功能插件有机地集成到一起, 有效地协同工作.
1.1 插件类别
目前应用比较普遍的插件有以下3种: (1) 类似于批命令的简单插件, 它一般是文本文件, 这种插件的缺点是功能比较单一、可扩展性极小和自由度非常低; (2) 通过一种特殊的脚本语言来实现的插件(暂时称为脚本插件), 它的缺点是比较难写, 需要软件开发者自己制作一个程序解释内核; (3) 利用已有的程序开发环境来制作插件, 使用这种插件技术的软件在程序主体中建立了多个自定义的接口, 插件能够自由访问程序中的各种资源, 它自由度极大, 可以无限发挥插件开发者的创意, 是狭义范围的插件, 也是真正意义上的插件.“平台+插件”模型中所用的插件就是最后一种插件--利用已有程序开发环境来制作的插件.
1.2 插件本质与实现机制
插件的本质是在不修改程序主体的情况下对软件功能进行加强, 当插件的接口被公开时, 任何人都可以自己制作插件来解决一些操作上的不便或增加一些功能.
一个插件框架包括2个部分: 主程序(mainapp) 和插件(plugin).主程序即是包含插件的程序.插件必须实现若干标准接口, 由主程序在与插件通信时调用(陈方明和陈奇, 2005).插件与主程序之间调用关系如图 1所示.
主程序通过主程序接口提供相应的接口给插件调用; 而为了插件和主程序之间的交互, 插件一般是一个遵循了某些特定规则的DLL; 主程序将所有插件接口在内存中的地址传递给插件, 插件则根据这些地址来调用插件接口完成所需功能, 获取所需资源等(姜昌华, 2002).
1.3 GIS中的插件技术
插件式GIS的基本思想是把GIS的各大功能模块划分为几个插件, 每个插件完成不同的功能.各个GIS插件之间, 以及GIS插件与其他非GIS插件之间, 可以方便地通过可视化的软件开发工具集成起来, 形成最终的GIS应用.插件如同一堆各式各样的积木, 他们分别实现不同的功能(包括GIS和非GIS功能), 根据需要把实现各种功能的“积木”搭建起来, 就构成应用系统.这不仅有利于减轻GIS软件开发者的负担, 而且还增强了GIS软件的可扩展性(宋关福和钟耳顺, 1998).
2. GIS应用框架模型
2.1 对象模型
整个GIS应用框架由应用框架层、应用界面层、框架接口层和插件模块层等4大部分组成(图 2).下文将针对GIS应用开发框架的框架接口层和框架界面层具体介绍其对象模型.
2.1.1 框架接口层
GIS应用框架的框架接口层由应用框架管理接口、应用框架界面管理接口、文档管理接口、地图图层管理接口、窗口管理接口和插件管理器接口等主要对象接口组成(OGC, 1999) (图 3).
IGISAppFrame对象接口用来管理整个应用框架的各个模块, 通过该对象插件可以取得框架中的其他元素或对象接口.调用者不需要创建该对象, 由系统来维护该对象的生存期和场景.该接口封装了应用框架窗口句柄、GIS文档接口(IGISDocument), 并提供了相应的方法来操纵这些对象.
IGISDocument对象接口的主要功能是进行插件和地理数据库之间的数据交流, 该对象接口管理着IMapView (视图显示接口)、IMap (地图数据接口)、IGeometryPackage (地理数据包接口) 等接口.通过此接口, 插件可以取得地图文档、图层和要素类等相关信息.
IMapView对象接口的主要控制视窗的显示, 包括接口的坐标投影, 它提供了包括屏幕显示、屏幕和数据坐标系之间的转换.
IMap对象接口的主要功能是管理地图图层, 通过该接口可以获得加载的图层数据, IMapView提供了显示, 更新等操纵数据的方法.
IExtension接口定义了插件的分类标准、插件的加载/卸载.插件通过支持此分类标准, 系统可以自动对开发的插件进行识别和分类.插件的加载/卸载模块则负责插件的加载或卸载的管理.
2.1.2 框架界面层
由于传统GIS结构的封闭性, 往往使得软件本身变得越来越庞大, 不同系统的交互性差, 系统的开发难度大, 用户很难只选择与自己的应用领域紧密相关的系统功能.而将插件思想引入到GIS平台的开发后, 在应用框架中定义框架界面层接口, 负责窗口、视图、工具条等用户界面的管理、创建和定制能够满足不同用户对软件功能的不同需求, 并实现对软件界面的简单定制(Antonija, 2002).框架界面层接口如图 4所示.框架界面层的接口主要有:
(1) GISUI.由GISUI出发可以创建或获取界面的主要对象;
(2) GISToolSpace为插件、工具提供工具箱的支持;
(3) GISToolBars为插件提供了工具条支持;
(4) 插件的工具箱ToolBox创建起来以后, 便可以在其中创建GISToolPage和GISMenuBar;
(5) GISToolPage, GISMenuBar中可以插入, 删除和修改任何有GISButton派生的任何工具项.
2.2 消息机制
插件技术的应用, 使GIS应用框架模型具备了完备的消息机制, 可以满足平台和插件、插件和插件之间的消息传递需求.其主要的消息机制可以分为3种类型:
(1) 显示视窗的消息转发机制.通过这种消息转发机制可以实现工具插件对视图插件甚至包插件的交互控制, 满足诸如编辑等需对视图直接进行手动交互的需求;
(2) 显示视窗的消息订阅机制.可以满足某些按照没有标准插件接口制作的工具或者某些特殊工具插件需要在非工作状态持续监控视图交互的需求;
(3) 框架内部平台和插件的自定义消息传递机制.插件之间的消息分3种: 全局广播、局部广播和单播, 它们都是把目的端口作为消息的目标.在基于COM的插件技术中, 目的端口是用COM的接口作为区分端口的标识.消息的目的端要接收相应的消息需要实现相应的COM接口.消息的源端同样有定制的能力, 当消息的目的为IUnknown接口时, 消息便成为广播消息, 而针对特定接口的消息即为单播消息.把平台和插件内部自定义的消息独立开来, 一方面可以避免和操作系统的消息机制和自定义消息发生冲突, 另一方面也可以很灵活地实现框架自定义消息广播和点对点自定义消息传递(图 5).
2.3 层次结构
整体上, 框架采用的是MVC (modeling view control) 的3层结构, 并针对各个层进行了比较深入的扩展.控制的概念在各个层都有具体的应用, 在文档中, 文档控制其下的各个Layer, 地图用Layer的概念向下扩展, 使得文档的数据实现了无约束的定制(李延春, 2003).
平台是通过插件接口MPIFrame和界面接口WPIFrame 2个模块将界面管理和插件管理分离开来, 并且在数据的集成管理和显示方面对插件提供了充分的扩展考虑(DISGIS, 1999).
(1) MPIFrame模块统一管理待插入平台的插件, 插入平台的插件被分为3类(表 1).将该平台中的插件分为3类统一管理, 使其满足绝大多数二次开发的需求.
表 1 GIS平台中插件分类Table Supplementary Table Plugin type in GIS platform(2) WPIFrame将界面对象统一封装起来, 通过定义的标准接口, 将开发者在自己模块内部的界面对象如工具条、菜单等统一地集成到同一个应用框架中.在用户视角上可以达到高度统一的目的.
(3) 动态扩展的地图文档管理.针对各种不同类型、不同来源的GIS数据, 甚至非GIS数据用统一的数据管理形式集成到一个系统中, 提供良好的动态扩展和无缝集成特性.
(4) 可扩展的显示视图.充分地利用动态扩展的地图文档的组织形式, 可以达到分层次、可扩展的显示到同一个视图的目的(图 6).
3. 应用实例
图 7为MAPGIS7.0的插件管理界面, 配置对话框中的左边按类别列出了已加载的插件, 而右边为可加载的插件列表.
本GIS平台的框架模型支持用户自定义界面, 用户能自定义窗口、菜单、工具条等界面元素.平台的所有功能模块都表现为插件的形式, 它们遵循公共的接口标准.用户完全可以根据自己的不同需求和使用习惯定制不同的应用环境, 从而使整个系统的操作更专业、更符合用户的习惯.
符合接口标准的插件可以在框架中被注册和定制, 用户开发和自定义的工具也可以作为插件插入系统中, 用户按照插件的形式, 可以扩展各种适合自己的数据插件、功能插件和界面插件, 成为系统的有机组成部分.
本平台中使用的数据都是存储在地理数据库中, 以图层的形式出现的.地理数据库的主要功能是存储和管理地理数据, 它采取了基于文件和基于商业数据库2种存储策略.由于这2种存储策略支持相同的空间数据模型, 因此在文件和数据库之间能够实现无损的平滑的数据迁移, 上层软件不需要因为数据迁移而改变.
功能插件和交互界面插件主要表现为GIS框架下的视图和工具.它包含诸如通用编辑和编辑扩展等, 用户可根据实际的使用需要选择相应的功能插件加载.用户定制自己的插件需要实现框架定义的功能模块插件接口, 该接口提供了方法把用户的菜单, 工具箱, 视窗等方法加载到GIS框架上.插件接口还定义了消息响应方法, 用户实现该消息响应方法就可以来实现自己的功能模块了.
4. 结论
“平台+插件”的软件框架不是对原来的软件构架技术的抛弃, 相反在很大程度上可以看作是对原有框架构建技术的演化和升级, 其中蕴含了许多先进的设计理念.MAPGIS7.0成功地将“平台+插件”模型运用到自己的软件平台上, 对GIS平台功能扩展和GIS的应用开发起到了积极的作用.这种新型开发平台的出现在一定程度上推动了我国GIS软件产业和应用事业的发展.然而要促进GIS真正的发展, 还需要长时间的努力, 把原来过于专业化的开发方式变为让更多的开发人员掌握的开发工具, 使其成为一个比较大众化的应用领域.
-
表 1 GIS平台中插件分类
Table 1. Plugin type in GIS platform
-
Antonija, M., 2002. OO paradigm meets GIS: A new era in spatial data management. [s. l. ], [s. n. ]. Chen, F. M., Chen, Q., 2005. Design and implementation of plugin-based reusable software. Computer Engineer and Design, 26 (1): 172 -173 (in Chinese with English abstract). DISGIS, 1999. "DISGIS white paper-final version", distributed geographical information systems -Models, methods, tools and frameworks. ESPRIT Project, 22 (7): 084. Erich, G., 2001. Design pattern. Translated by Li, Y. J. . China Machine Press, Beijing. 223 -225 (in Chinese). Jiang, C. H., 2002. Plugin technique and its application. Tsin-ghua Tongfang Optical Disc Co., Ltd., 1995 -2005, Beijing. 10 -11, 67 (in Chinese). Li, Y. C., 2003. Software plugin technique: Principle and implementation. Application Technique, (7): 24 -25 (in Chinese with English abstract). OGC, 1999. OpenGIS catalog interface implementation specification (version 1.0). Open GIS Consortium, [s. n. ]. Song, G. F., Zhong, E. S., 1998. Design and development of COM GIS. Journal of Image and Graphics, 3 (4): 23 -26. (in Chinese with English abstract). Wu, X. C., 2006. The new generation of MAPGIS. China International Conference on Digital City Construction Technology, Suzhou (in Chinese). Wu, X. C., 2002. The principle, method and application of geographic information system. Electronics Industry Press, Beijing (in Chinese). 陈方明, 陈奇, 2005. 基于插件思想的可重用软件设计与实现. 计算机工程与设计, 26 (1): 172 -173. doi: 10.3969/j.issn.1000-7024.2005.01.055 Erich, G., 2001. 设计模式. 李英军译. 北京: 机械工业出版社. 223 -225. 姜昌华, 2002. 插件技术及其应用. 北京: Tsinghua TongfangOptical Disc Co., Ltd. 1995 -2005.10 -11, 67. 李延春, 2003. 软件插件技术的原理与实现. 应用技术, (7): 24 -25. https://www.cnki.com.cn/Article/CJFDTOTAL-XTYY200307006.htm 宋关福, 钟耳顺, 1998. 组件式地理信息系统研究与开发. 中国图像图形学报, 3 (4): 23 -26. https://www.cnki.com.cn/Article/CJFDTOTAL-ZGTB804.014.htm 吴信才, 2006. 新一代MAPGIS数字城市技术应用与发展. 苏州: 第二届中国国际数字城市建设技术研讨会. 吴信才, 2002. 地理信息系统原理、方法及应用. 北京: 电子工业出版社. -