基于.NET 平台的插件式 GIS 研究

李云锦,周芹,黄跃峰,何亚鑫

(1 中国科学院地理科学与资源研究所,北京 100101;2 中国科学院研究生院,北京 100039; 3 北京超图地理信息技术公司,北京 100101 )

论文来源:中国地理信息系统协会第四次会员代表大会暨第十一届年会论文集

摘要:插件模式的应用可以提高软件的扩展性、复用性与可裁剪性。现今许多 GIS 软件都应用了插件模式,但插件实现大多是基于 DLL 技术的,其扩展性与易用性都不如基于.NET或 Java 平台的实现。本文将对插件模式及其相关技术进行探讨并提出基于.NET 平台的插件实现的解决方案。与传统…

关键词: 地理信息系统;插件;架构

1 引言

随着 GIS 的不断发展,其应用领域已逐渐从传统的电子政务过渡到企业应用以及大众化地理信息服务,GIS 的应用需求呈现出多样性与不确定性。与日俱增的 GIS 应用需求对 GIS软件的扩展性、复用性及可裁剪性提出了更高的要求。

扩展即增加新的功能而不修改已有产品。传统的 GIS 软件一经发布,如需添加新的功能即必须修改源代码并重新发布产品,成本高、效率低。而今许多应用需求在 GIS 软件开发时是未知的,有些需求虽然已经明确,但 GIS 软件厂商只能有选择地满足部分需求。因此,为了满足更多的应用需求,GIS 软件迫切需要提供一种便捷的开发方式,即在产品发布之后用户能根据自己的需求开发相应的功能模块,并能集成至已有的产品中。

复用通常指代码的重用。面向对象、组件与 WebService 等技术的应用都是提高软件复用性的方式。组件式 GIS 在很大程度上提高了 GIS 软件的复用率,但基于组件的 GIS 开发,用户仍需要编写大量重复代码,例如每个用户都必须编写地图的显示、编辑功能,而这些功能的实现都已经包括在 GIS 桌面产品中。此外,复用也可指软件开发相关资源的重用,例如符号库、风格库、界面库、图标等资源。界面的开发在实际的项目开发中占较大的比重,简洁易用的界面会带来更好的客户满意度,GIS 开发人员因此需要花费大量时间在界面的设计上,而 GIS 桌面产品稳定而大众化的界面没有得到重用。

裁剪即根据用户需要保留软件中感兴趣的功能。对 GIS 用户而言,用户常用的功能只是产品功能的一个子集,有些基本不使用的功能对系统资源的占用无疑是种浪费。如果用户能通过简单的配置禁用某些不常使用的功能,不仅能节约系统资源,还能提高程序的启动速度;对 GIS 软件厂商而言,他们需要根据不同的用户提供不同的版本,这有利于产品的市场推广与销售。在传统 GIS 开发模式中,软件裁剪需要开发人员修改源代码,并对各个版本实施不同的版本策略,很难做到软件的定制。

插件模式提供了一种开放的开发方式,能较好地解决上述问题。目前一些 GIS 软件也应用了插件模式,如 SuperMap Deskpro5.2、ArcMap9.2、MapGIS7.0 等,但插件实现都是基于DLL 技术或 COM 技术的,而 DLL 技术与 COM 技术自身存在较多问题,例如“DLL Hell”问题、平台依赖性以及模块中所定义的类无法被继承等。再者,目前的扩展也仅限于对菜单、工具栏的扩展,并不支持用户的二次扩展。比较而言,基于.NET 与 Java 平台的插件实现在易用性、安全性、二次扩展能力方面都优于基于 DLL 或 COM 的实现方式。本文将首先介绍插件的基本概念及应用现状,并对常用的插件的解决方案进行比较分析,然后详细介绍基于.NET 平台的插件实现,在此基础上提出插件式 GIS 架构,并依据此架构实现 SuperMap6.0 桌面原型。

2 插件模式

GIS 桌面软件通常需要支持不同格式的数据,然而它无法支持所有格式的数据,有些用户特有的数据格式无法用现有的 GIS 软件读取与显示。那么如何在 GIS 桌面软件中使用该类数据呢?应用插件模式是解决此类问题的有效途径之一。

插件模式通过在运行时动态加载编译时未知的程序模块以扩展现有程序,它常被用于满足以下需求:(1)支持对功能的扩展;(2)将系统模块化以降低系统的复杂度;(3)简化软件部署与更新;(4)获得高的启动速率;(5)减少系统资源的占用。

现今许多软件都应用了插件模式。例如 Internet Explore、Netscape、Fireforx、Mozilla等浏览器都应用了插件模式,以支持不同格式的数据的显示;绝大多数集成开发环境也应用了插件模式,例如 Eclipse、NetBeans、Visual Studio 2005 等;许多应用软件也应用了插件模式,例如 Microsoft Office、Adobe Photoshop 等。虽然这些软件都应用了插件模式,但具体实现不尽相同。例如 Mozilla 通过 XUL 语言声明接口,并利用 JavaScript 和 XPCOM 定义 UI 元素的动态行为;Eclipse 则通过“接口继承+XML 描述”来实现。尽管这些软件的插件实现方式不同,但其基本原理大致相同。

更多内容请查看pdf