插件式GIS应用框架的设计与实现

2011-09-27 10:43陈红华李满春李飞雪
地理空间信息 2011年2期
关键词:配置文件插件应用程序

陈红华,李满春,李飞雪

(1.南京林业大学土木工程学院,江苏南京 210037;2.南京大学地理与海洋科学学院,江苏南京 210093)

插件式GIS应用框架的设计与实现

陈红华1,李满春2,李飞雪2

(1.南京林业大学土木工程学院,江苏南京 210037;2.南京大学地理与海洋科学学院,江苏南京 210093)

应用框架已经成为软件开发中一种非常实用的编程规范和设计架构。采用了C#插件式应用开发,并利用ArcGIS Engine提供的一套完备的嵌入式GIS组件库和工具库,完成了插件式GIS应用框架的核心即框架宿主程序及各功能插件的设计与实现,以及插件式GIS应用框架平台的设计与实现;采用了动态插件加载配置的开发技术优势,通过可视化的构件协同建模,快速构建GIS应用,实现了GIS应用集成,开发的平台适用于任何与GIS应用(ESRI平台)有关的应用集成和作为GIS应用开发的基础开发平台。

插件式技术;ArcGISEngine;GIS应用框架

经历30多年的发展,GIS正在形成完整的技术系统并建立其理论体系,形成了多层次和不同尺度的应用格局。跟随计算机等日趋成熟的主流技术,越来越多的软件产品开始采用应用框架思想进行软件结构设计。应用框架已经是一个被广泛使用的术语,它成为软件开发中一种非常实用且常用的编程规范和设计架构。在商业的GIS应用项目开发中,GIS应用框架的使用也是非常普遍的,为了提高工作效率和产品的可靠性、降低项目开发成本,许多GIS二次开发商都会组织其核心程序员开发一个GIS应用框架,将一些通用的核心功能进行封装,这些框架使用的技术和策略可能各不相同,但其目的都是一样的:降低重复编码的工作量,提高编程效率,给项目人员的开发工作提供一个良好的平台和工作流程。拥有一个可扩展的GIS应用框架,意味着应用项目开发人员接到一个新项目任务后不必从头开始搭建一个系统,他们只需要按照一种工作模式对其GIS应用框架进行继承和扩展开发,并尽量利用以前开发的成果,就可以在短时间内构建出一个无论在UI层,还是在逻辑层都一致的功能组件平台,而这些平台的组件还具有天然的可重用性。

1 插件式GIS应用框架开发技术

1.1 插件式开发技术概述

插件技术是在软件的设计和开发过程中,将整个应用程序划分为宿主程序和插件对象两部分,宿主程序能够调用插件对象,插件对象能够在宿主程序上实现自己的逻辑,而两者的交互基于一种公共的通信契约。宿主程序可以独立于插件对象存在,即使没有任何插件对象,宿主程序的运行也不受影响,因此,我们可以在避免改变宿主程序的情况下通过增减插件或修改插件的方式来增加或调整功能。

对于许多专业软件而言,使用插件式框架机制开发应用软件是一种必然的选择。任何一款专业软件,无论项目研发人员在开发之前做过多么详细的用户调查和需求分析,都不可能满足使用该软件的每个行业、每个用户的全部需求。为了延长软件产品的生命周期,在避免修改软件程序主体的情况下,如果能通过一种具有良好扩展性的方式让软件根据用户实际需求实现“生长”,无疑具有极大的诱惑力。以GIS行业为例,由于不同部门管理和使用的GIS数据类型千差万别,业务流程也复杂多变,都必须根据实际情况开发自己专门的GIS软件,这也是GIS二次开发大行其道的主要原因,如果每个新应用项目都必须让开发人员从头构建,无疑是一种智力与经验的浪费,同时浪费的还有宝贵的开发时间,而使用插件式GIS应用框架完全解决这些问题[1]。

1.2 ArcEngine的插件式技术

ArcGIS Engine是ESRI在ArcGIS 9版本才开始推出的新产品,它是一套完备的嵌入式GIS组件库和工具库,使用ArcGISEngine开发的GIS应用程序可以脱离ArcGISDesktop而运行,它是一个用于开发新的GIS应用程序的二次开发功能组件包,它完全支持插件式技术[2]。

ArcGISEngine组件库中的组件在逻辑上可以分成5个部分:BaseServices、DataAccess、Map Presentation、DeveloperComponents和Extensions。BaseServices包含了ArcGISEngine中最核心的ArcObjects组件。DataAccess包含了访问包含矢量或栅格数据的GeoDatabase所有的接口和类组件。Map Presentation包含了GIS应用程序用于数据显示、数据符号化等组件[3]。Developer Components包含了进行快速开发所需要的全部可视化控件,如SymbologyControl、GlobeControl、MapControl、SceneControl、TOCControl、ToolbarControl等。Extensions包含了许多高级功能,如空间分析、网络分析和数据互操作等。

ArcGISEngine9.3与Visual Studio.NET 2005紧密结合,它提供了多个 IDE插件与 Visual Studio.NET 2005紧密结合,它使开发人员基于VisualStudio.NET 2005编写ArcGISEngine程序变得更加容易。

2 插件式GIS应用框架平台的设计与实现

2.1 插件式框架宿主程序的设计

本平台是插件化的易于扩展的系统。系统之所以插件化,主要依靠一些核心对象保证系统与插件间正常通信,本系统设计的类关系如图1所示。

图1 系统设计的框架核心类关系图

框架FrameworkClass、应用程序类ApplicationClass、菜单管理类BarManagerClass中包含了彼此的接口,即通过一个对象实例,可以方便地获取或设置另一个对象实例。这三组核心的接口与类,构成了平台的核心。

2.2 框架插件的设计

插件式框架的另一重要组成部分是插件对象,插件也是应用框架的主角和功能扩展的执行者,对用户而言,这才是他们最关心的部分。插件式平台包含的每一个功能--菜单栏、工具栏、右键菜单、命令行、快捷键,都是以插件的方式被平台管理的。平台本身是只是一个躯壳,而强大的GIS应用的真正提供者是插件。

2.2.1 插件的设计规范

在插件式应用框架中,宿主程序在编译时并不知道它将要处理哪些插件对象,更没有办法静态地将插件类型通过using关键字引入,这些都是只在运行时才能获得的信息,在这种新情况下,我们无法使用静态方法和new关键字来产生一个类型的对象,而是需要使用其他方法在运行时动态加载程序集并获得程序集中的相关类型信息,这就要求我们的插件必须遵守统一的规范,即接口规范、代码规范和配置规范。

接口规范:提供给插件的接口都在组件中Desktop. Framework中,所有插件都必须实现接口ICommand或ITool,通常情况下,插件都派生自ESRI提供的Base-Command和BaseTool,按钮类型的插件必须实现接口IBarButtonItem,编辑框类型的插件必须实现接口IBarEditItem,静态文本类型的插件必须实现接口IBarStaticItem,支持地图右键菜单的插件必须实现接口 IToolContextMenu,支持TOC右键菜单的插件必须实现接口IControlContextMenu,支持快捷键的插件必须实现接口IShortCut。

代码规范:将IHookHelper类型改为IHookHelperEx类型,将HookHelperClass类型改为HookHelperExClass类型,其属性Hook事实上保存的是当前应用程序对象IApplication的引用;设置m_caption字段或覆写Caption属性,可以改变插件显示在界面上的标题;设置 m_ toolTip字段或覆写ToolTip属性,可以改变插件在界面上的提示信息;覆写Enabled属性,根据当前hookHelper对象的状态来设定功能的可用性,直接导致功能相对应的按钮在界面上是否可用。

配置规范:在平台中,插件是基于XML配置文件的。每个桌面主程序都有一个插件配置文件:MapUI.xm l--Map的插件配置文件;LayoutUI.xm l--Layout的插件配置文件;CatalogUI.xm l--Catalog的插件配置文件。这些配置文件都遵循相同的配置规范,如图2所示。

图2 插件配置文件的配置规范

在根节点“界面元素”的子节点中,有“菜单栏”节点和若干“工具栏”节点。“菜单栏”节点配置的是应用程序主菜单上的插件,几个“工具栏”节点配置的是应用程序的各个工具栏上的插件。“菜单栏”和“工具栏”节点下包含“工具”子节点,这些“工具”节点下又包含了其他“工具”子节点,这是一个递归的树形结构。

2.2.2 插件的动态加载和对象生成

在设计完成所有必要的插件接口和插件容器之后,我们利用.NET Framework中Assembly提供的信息实现插件的动态加载,即反射机制。在插件式应用框架启动后,插件引擎将遍历插件文件中的每个程序集,然后使用Assembly类加载每个程序集并分析程序集中包含的类型,只有识别了某个类型的确为合法的插件后,插件引擎才会根据类型信息产生一个实例对象并放置到插件容器中备用。

插件分为命令型插件和工具型插件。命令型插件:即开发的插件不存在与地图控件交互,该插件必须实现ESRI.ArcGIS.SystemUI.ICommand接口,或者从BaseCommand类派生;工具型插件:即开发的插件存在与地图控件交互,该插件必须实现 ESRI.ArcGIS. SystemUI.ICommand接口和ESRI.ArcGIS.SystemUI. ITool接口,或者从BaseTool类派生。

本框架可以动态加载的插件包含 2种类型:一种是.net插件;另一种是com组件。因此可以使用多种开发工具开发插件,如C#、VB.NET、vb、vc等。开发的.net插件和com组件形式开发的命令类需要实现ICommand接口,而需要实现和地图控件交互操作的工具则需要同时实现ICommand接口和ITool接口。

2.3 插件式应用框架平台的功能实现

插件式应用框架平台包括基础框架、基础工具和扩展工具3部分,主要功能有数据浏览、数据编辑、数据管理、版本管理、拓扑、查询统计、空间分析、符号化符号编辑、专题图、目录树、捕捉、构造点工具、Element工具、地图工具等。插件式应用框架平台的主界面如图3所示。

3结语

软件框架是为复用而设计的,在以框架为基础的软件开发过程中,应用软件的开发实际上是对软件框架的扩展和实例化[4]。全插件 GIS应用框架的目标是通过全插件体系结构,以及标准化的GIS接口,实现不同平台GIS系统的统一开发模式以及模块级的复用,简化开发过程,提高开发效率[5]。本文介绍的插件式应用框架平台就是在选择ArcGISEngine组件库进行二次开发的基础上,采用插件式GIS应用框架,与具体业务流程没有相关联的,只是一个纯粹的GIS数据显示与功能支撑框架,一个浏览和编辑地理数据的软件平台,它是通过.NET 2.0Framework和ArcGISEngine9.2组件库构建的一个插件式GIS应用框架。平台采用可视化拖放构件进行组装、采用动态插件加载配置的方式来完成GIS应用集成,从而大大简化了应用集成的复杂性,大幅降低了企业GIS应用集成的开发门槛,有效提高了GIS应用系统的易用性和可操作性。尽管这种新型开发平台的出现在一定程度上推动了我国 GIS软件产业和应用事业的发展,然而要促进GIS真正的发展还需要长时间的努力,把原来过于专业化的开发方式变为让更多的开发人员掌握的开发工具,使其成为一个比较大众化的应用领域。

[1] 蒋波涛.插件式GIS应用框架的设计与实现[M].北京:电子工业出版社,2008

[2] 韩鹏,王泉,王鹏,等.地理信息系统开发--ArcEngine方法[M].武汉:武汉大学出版社,2008

[3] 张俊,吴建平.插件技术在ArcGIS Engine开发中的应用[J].测绘与空间地理信息,2009(3):128-130

[4] 王宇,李增智,薛文革,等.一种多框架软件集成策略模型[J].小型微型计算机系统,2004(05):843-846

[5] 董涌江.全插件GIS应用框架的设计与实现[J].北京测绘,2009(1):18-21

Design and Realization of Plug-in GIS Application Framework

by CHEN Honghua

Application framework has been a kind of very practical programming specification and design framework on the development of software.Through comparing the advantages and disadvantages of existing three kinds of plug-in exploitation methods,this article used the plug-in application development based on C#,utilized Arc GIS Engine to provide a set of complete embedded GIS component library and tool library,and completed the design and realization of the core of plug-in GIS frame,various functions and platform.The paper implemented GIS integration by utilizing the development advantages of dynamic plug-in loading configuration and the visualization component coordination modeling to construct GIS application fast.The platform is suitable for any GIS application integration and basic development platform related to GIS application(ESRI).

plug-in,ArcGIS Engine,GIS application framework (Page:26)

P208

B

1672-4623(2011)02-0026-03

2010-08-24

项目来源:国家自然科学基金资助项目(40901184);江西省数字国土重点实验室开放基金资助项目(DLLJ200905)。

陈红华,博士,主要从事GIS原理与应用、数据共享研究等。

猜你喜欢
配置文件插件应用程序
自编插件完善App Inventor与乐高机器人通信
互不干涉混用Chromium Edge
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
基于Zookeeper的配置管理中心设计与实现
忘记ESXi主机root密码怎么办
为View桌面准备父虚拟机
基于jQUerY的自定义插件开发
MapWindowGIS插件机制及应用
基于Revit MEP的插件制作探讨