基于net平台的插件式gis研究

基于net平台的插件式gis研究

ID:32697288

大小:199.85 KB

页数:6页

时间:2019-02-14

上传者:U-3868
基于net平台的插件式gis研究_第1页
基于net平台的插件式gis研究_第2页
基于net平台的插件式gis研究_第3页
基于net平台的插件式gis研究_第4页
基于net平台的插件式gis研究_第5页
资源描述:

《基于net平台的插件式gis研究》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

基于.NET平台的插件式GIS研究李云锦1,2,3,周芹1,2,3,黄跃峰1,2,3,何亚鑫1,2,3(1中国科学院地理科学与资源研究所,北京100101;2中国科学院研究生院,北京100039;3北京超图地理信息技术公司,北京100101)摘要:插件模式的应用可以提高软件的扩展性、复用性与可裁剪性。现今许多GIS软件都应用了插件模式,但插件实现大多是基于DLL技术的,其扩展性与易用性都不如基于.NET或Java平台的实现。本文将对插件模式及其相关技术进行探讨并提出基于.NET平台的插件实现的解决方案。与传统GIS相比,采用该解决方案开发的GIS系统支持用户的二次扩展,而且在易用性、启动效率等方面也优于前者。此外,该解决方案利用.NET平台特性解决了接口继承的所带来的问题,简化了用户的编程模型。最后,本文结合GIS的发展趋势提出基于.NET平台的插件式GIS架构,依据此架构实现了SuperMap6.0桌面原型系统。关键词:地理信息系统;插件;架构1引言随着GIS的不断发展,其应用领域已逐渐从传统的电子政务过渡到企业应用以及大众化地理信息服务,GIS的应用需求呈现出多样性与不确定性。与日俱增的GIS应用需求对GIS软件的扩展性、复用性及可裁剪性提出了更高的要求。扩展即增加新的功能而不修改已有产品。传统的GIS软件一经发布,如需添加新的功能即必须修改源代码并重新发布产品,成本高、效率低。而今许多应用需求在GIS软件开发时是未知的,有些需求虽然已经明确,但GIS软件厂商只能有选择地满足部分需求。因此,为了满足更多的应用需求,GIS软件迫切需要提供一种便捷的开发方式,即在产品发布之后用户能根据自己的需求开发相应的功能模块,并能集成至已有的产品中。复用通常指代码的重用。面向对象、组件与WebService等技术的应用都是提高软件复用性的方式。组件式GIS在很大程度上提高了GIS软件的复用率,但基于组件的GIS开发,用户仍需要编写大量重复代码,例如每个用户都必须编写地图的显示、编辑功能,而这些功能的实现都已经包括在GIS桌面产品中。此外,复用也可指软件开发相关资源的重用,例如符号库、风格库、界面库、图标等资源。界面的开发在实际的项目开发中占较大的比重,简洁易用的界面会带来更好的客户满意度,GIS开发人员因此需要花费大量时间在界面的设计上,而GIS桌面产品稳定而大众化的界面没有得到重用。裁剪即根据用户需要保留软件中感兴趣的功能。对GIS用户而言,用户常用的功能只是产品功能的一个子集,有些基本不使用的功能对系统资源的占用无疑是种浪费。如果用户能通过简单的配置禁用某些不常使用的功能,不仅能节约系统资源,还能提高程序的启动速度;对GIS软件厂商而言,他们需要根据不同的用户提供不同的版本,这有利于产品的市场推广与销售。在传统GIS开发模式中,软件裁剪需要开发人员修改源代码,并对各个版本实施不同的版本策略,很难做到软件的定制。插件模式提供了一种开放的开发方式,能较好地解决上述问题。目前一些GIS软件也应用了插件模式,如SuperMapDeskpro5.2、ArcMap9.2、MapGIS7.0等,但插件实现都是基于DLL技术或COM技术的,而DLL技术与COM技术自身存在较多问题,例如“DLLHell”问题、平台依赖性以及模块中所定义的类无法被继承等。再者,目前的扩展也仅限于对菜单、工具 栏的扩展,并不支持用户的二次扩展。比较而言,基于.NET与Java平台的插件实现在易用性、安全性、二次扩展能力方面都优于基于DLL或COM的实现方式。本文将首先介绍插件的基本概念及应用现状,并对常用的插件的解决方案进行比较分析,然后详细介绍基于.NET平台的插件实现,在此基础上提出插件式GIS架构,并依据此架构实现SuperMap6.0桌面原型。2插件模式GIS桌面软件通常需要支持不同格式的数据,然而它无法支持所有格式的数据,有些用户特有的数据格式无法用现有的GIS软件读取与显示。那么如何在GIS桌面软件中使用该类数据呢?应用插件模式是解决此类问题的有效途径之一。插件模式通过在运行时动态加载编译时未知的程序模块以扩展现有程序,它常被用于满足以下需求:(1)支持对功能的扩展;(2)将系统模块化以降低系统的复杂度;(3)简化软件部署与更新;(4)获得高的启动速率;(5)减少系统资源的占用。现今许多软件都应用了插件模式。例如InternetExplore、Netscape、Fireforx、Mozilla等浏览器都应用了插件模式,以支持不同格式的数据的显示;绝大多数集成开发环境也应用了插件模式,例如Eclipse、NetBeans、VisualStudio2005等;许多应用软件也应用了插件模式,例如MicrosoftOffice、AdobePhotoshop等。虽然这些软件都应用了插件模式,但具体实现不尽相同。例如Mozilla通过XUL语言声明接口,并利用JavaScript和XPCOM定义UI元素的动态行为;Eclipse则通过“接口继承+XML描述”来实现。尽管这些软件的插件实现方式不同,但其基本原理大致相同。2.1插件的基本原理基本的插件系统包括插件与插件平台。插件是为了对应用程序的功能进行扩展而按一定规范编写的,能集成到已有系统中的程序模块。插件平台即宿主程序,是插件运行的环境,它负责插件的加载管理以及插件间的协同工作等任务。接口规范使得插件与插件平台能保持一致,它规定了为实现特定功能用户所必须遵守的规则,例如插件必须实现的函数及这些函数的名称、参数信息、返回值的类型等信息。插件首先根据一定的规则注册到插件平台中,程序启动时,插件平台按照既定规则查找并加载已注册的插件,此后,插件平台创建与插件相关的界面元素并定义这些元素的行为。最后系统开始运行,由插件平台协调插件间的通信以及插件与插件平台间的通信。2.2插件的实现方式比较常用的插件实现方式有基于DLL技术、基于.NET平台与基于Java平台三种。其中基于DLL技术采用“导出函数+接口调用”的方式,需要用户指定导出函数的相关信息,在形式上不如后二者简洁。在跨平台性方面,基于DLL技术与基于.NET平台的实现都依赖Windows操作系统,而基于Java的实现则具有良好的跨平台性,可以做到“一次编译,到处运行”。但基于.NET平台的实现在跨语言方面优于其他二者。在.NET平台中,用户可以选择CLR(CommonLanguageRuntime,公共语言运行时)所支持的任意一种语言开发插件,例如C#、VB.NET、C++/CLI等。在安全性方面,调用DLL中的函数并不执行类型安全检查,而.NET平台与Java平台都提供了代码验证以保证类型的安全。另一方面,DLL使用了多种错误的报告方式,有些函数通过返回Win32状态代码来报告错误,有些则通过返回HRESULT报告错误,而还有些函数则通过抛出异常报告错误。与之相比,.NET平台与Java平台采用异常形式报告,形式更为统一。由于异常抛出的强制性,也保证了程序中出现的错误不会被忽略。此外,.NET平台还采用了应用程序域中来隔离同一进程中的不同执行模块,某一应用程序域的崩溃不会影响其他 应用程序。在对热插拔(程序运行时无需终止程序便可实现插件的加载、卸载、更新)的支持方面,基于DLL与Java平台的插件都是可以被单独卸载的,但.NET程序集不能单独卸载,只能通过卸载整个应用程序域来实现,因而较难实现热插拔。总之,相比基于DLL技术的实现方式,基于.NET与Java平台的实现易用性更强。三者之间的比较如表1-1所示:表1-1:插件的实现方式的比较实现方式实现技术跨平台性安全性热插拔易用性基于动态链接库导出函数+接口较差一般支持一般基于.NET平台接口继承或委托较差很好不支持好基于Java平台接口继承很好好支持好2.3基于.NET平台的插件实现2.3.1相关技术介绍程序集是托管模块和资源文件的逻辑组合,它是组件复用以及实施安全策略和版本策略的最小单位。.NET平台采用了新的版本机制来隔离应用程序组件,这种隔离策略可以保证一个应用程序总能加载它当初生成和测试时所使用的组件,从而有效地解决了“DLLhell”问题。程序集包含丰富的元数据信息,这些元数据信息是.NET许多高级特性的基础,例如垃圾收集、反射、代码验证、定制特性都是基于元数据实现的。元数据与代码在编译时一同嵌入程序集,因而使用程序集时不再需要头文件与库文件,编译器可以直接从程序集中读取元数据来获得这些信息。反射本质上是分析程序集中的元数据表的过程。通过反射可以获取程序集中定义的类型信息,并在运行时动态创建这些类型的对象。.NET平台通过委托来提供回调函数机制。委托定义了函数的“契约”,与委托相符的函数必须有相同的签名(相同的参数个数、参数类型、参数顺序与返回值)。利用委托调用插件功能,相比接口继承的方式而言,简化了用户的编程模型。.NET中每个类只能拥有某个接口的一个实现,因而针对不同功能的实现必须编写不同的类。而利用委托调用,用户可以在同一个类中编写多个相似的功能函数。2.3.2基于.NET的插件实现解决方案图2-1为插件实现的主要类结构图。MainApplicationObjectManagerMainFormPluginToolStripButtonToolStripMenuItemExtensionToolbarItemMenuItemExtensionPointCommandICommand图2-1:主要类结构图MainApplication(主框架类):应用程序的主框架,它根据配置文件,对应用程序进行初始化操作并加载插件。 MainForm(主窗体类):由MainApplication创建并初始化。ObjectManager(对象管理器类):全局唯一,它负责对象的注册、访问,用于消息通信。Plugin(插件类):负责插件的解析与创建。插件由插件程序集与XML描述文件组成。程序集包含插件功能的实现代码;XML文件用于描述插件的静态信息,例如菜单的显示文字。ExtensionPoint(扩展点类):即能提供给用户扩展的功能。Extension(扩展类):对扩展点的扩展。Command(命令类):命令类指向插件程序集中功能的实现。MenuItem(菜单项类)、ToolbarItem(工具栏按钮类)对.NET平台中既有的控件进行扩展,二者都拥有Command对象,通过代理模式实现了晚绑定(程序启动时并不加载程序集,只在实际执行时加载相应模块)。2.3.3解决方案评价上述解决方案解决了插件系统开发的基本问题,支持用户的扩展,例如菜单、工具栏的扩展。此外,它还支持二次扩展(对插件的扩展),用户在插件中可以定义新的扩展点和接口规范,其他用户依照此规范便可对插件进行扩展。解决方案采用晚绑定机制,提高了程序启动速度,节约了系统资源,这也为目前许多成功的插件平台所采纳,例如Eclipse、SharpDevelop,区别于这二者,该框架采用了委托作为接口定义和调用的规范,解决了一个类只能实现一个功能的问题,简化了用户的编程模型,具有更强的易用性。在.NET2.0中,程序集不能单独卸载,因而插件更新时程序必须卸载整个应用程序域并重新加载插件,这意味着用户很可能需要中断当前的工作,因而该解决方案没能从根本上解决热插拔的技术问题。一种供参考的解决方案是将每个程序集加载至单独的应用程序域,但.NET中跨应用程序域的调用会对性能带来一定的影响。此外,.NET要求所有的能跨应用程序域访问的对象都派生于System.Mar-shalByRefObject或者应用了System.Serializable定制特性的类,对用户限制性太大,可行性不大。3基于.NET平台的插件式GIS架构采用上述解决方案,以共相式GIS为基础,特提出如图3-1所示的GIS桌面软件体系结构。“共相式GIS就是能够支持当前存在的任何计算设备(Anydevice)、任何操作系统(Anyoperationsystem)、任何开发语言(Anyprogramminglanguage)、任何数据库(Anydatabase)和任何数据格式(Anydataformat)的GIS软件”(宋关福、钟耳顺,2005)。IT迅猛发展的今天,操作系统不断革新,开发语言层出不穷,其他各种IT技术也都影响着GIS的发展。共相式GIS提出了以ISOC++作为核心,上层通过各种语言封装以满足不同应用环境的思想。这里通过C++/CLI与JNI技术分别封装为Objects.NET与Objects.Java,在此基础上,依照插件系统规定的接口规范,封装为不同平台下的插件,插件的大致分类如图3-1左所示。其中“Res”插件封装了系统的资源,包括各类符号库、风格库及系统图标等资源。PluginsDeskpro.NETDeskpro.JavaMapLayoutEdit3DPlugins.NETPlugins.JavaNetworkCheckObjects.NETObjects.JavaTabularResGridOtherISOC++Kernel图3-1:基于插件模式的GIS桌面软件架构 4结论插件式GIS与传统GIS相比,具有更好的扩展性、复用性与可裁剪性。在GIS应用多元化的时代,插件式GIS能满足多方用户的需求,同时也能提高GIS桌面软件厂商的生产效率、降低生产成本。本文提出的基于.NET平台的插件实现解决方案,综合考虑了软件的扩展性、安全性、易用性及启动效率等方面因素。此外,该解决方案采用委托作为接口定义规范,解决了利用接口继承实现函数调用时每个功能都必须有与之对应的类的问题,简化了用户的编程模型。以共相式GIS为基础并利用该解决方案,本文提出了插件式GIS架构。该架构能适应不同的应用环境,符合IT发展潮流与趋势。由于.NET平台中,程序集不能被单独卸载,因而如何在.NET平台中实现插件的实时更新还有待于进一步研究。参考文献[1]GammaE,BeckK.ContributingtoEclipse:Principles,Patterens,andPlug-ins[M].AddisonWesley,2003.[2]鲍亮,陈平.基于插件技术的异构数据集成.计算机工程[J],2006,32(20):86.[3]宋关福,钟耳顺.组件式地理信息系统研究与开发.中国图形图像学报[J],1998,3(4):313.[4]宋关福,钟耳顺,曾志明等.哲学中的共相问题与共相式地理信息系统研究.地理信息世界[J].2005,3:9. 附作者联系方式第一作者姓名:李云锦单位:北京超图地理信息技术公司地址:北京市海淀区西三旗建材城西路31号太伟科研楼B坐3层邮编:100096Email:liyj@superMap.com电话:13581540066第二作者姓名:周芹单位:北京超图地理信息技术公司地址:北京市海淀区西三旗建材城西路31号太伟科研楼B坐3层邮编:100096Email:zhouqin@supermap.com电话:13581981224第三作者姓名:黄跃峰单位:北京超图地理信息技术公司地址:北京市海淀区西三旗建材城西路31号太伟科研楼B坐3层邮编:100096Email:huangyf@supermap.com电话:13426292181第四作者姓名:何亚鑫单位:北京超图地理信息技术公司地址:北京市海淀区西三旗建材城西路31号太伟科研楼B坐3层邮编:100096Email:heyx@supermap.com电话:13811415370

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭