基于Skyline平台的插件式3DGIS应用框架研究
2017-08-01黄梦龙
黄梦龙
(1.福建省基础地理信息中心,福建 福州 350001)
基于Skyline平台的插件式3DGIS应用框架研究
黄梦龙1
(1.福建省基础地理信息中心,福建 福州 350001)
面向项目开发的3DGIS应用系统,由于未采用统一的框架和开发规范,存在开发人员分工协作困难、功能模块难以复用、系统升级维护工作量大等问题。研究了功能模块运行时动态加载、框架程序与插件通信机制、系统运行时资源注入方法等插件式应用框架程序实现的相关技术,设计开发了基于Skyline的插件式3DGIS应用框架;并基于该框架开发了若干3DGIS行业应用系统,验证了该应用框架的可用性。
3DGIS;插件式;依赖注入;应用框架
由于其表达直观、蕴含信息丰富的特点,3DGIS得到了广泛应用。TerraExplorer是Skyline公司研发的3DGIS,支持海量三维数据集成,具有产品线齐全、功能丰富、运行流畅等特点[1]。福建省基础地理信息中心基于Skyline三维平台开发了大量的3DGIS,在林业、气象、水利等行业得到了广泛应用。然而随着应用的推广,三维应用系统在开发和维护过程中存在的问题也逐渐暴露出来。这些系统都是针对特定项目开发的,未采用统一的架构,导致系统的升级维护困难。随着项目的拓展,参与开发人员的增加,需要解决系统功能模块划分和开发人员分工协作的问题。在开发成果复用方面,由于没有采用统一的设计结构,各项目积累的功能模块难以实现二进制级别的复用,影响了开发效率。此外,由于用户需求呈现出多样性与不确定性,在用户需求变化时,现有的开发方法需大量修改程序才能满足用户要求,难以快速应对用户需求的变化。
针对上述问题,本文基于Skyline平台,采用应用框架程序的设计思路,结合插件式GIS技术,设计开发了插件式3DGIS应用框架程序。
1 关键技术
应用框架是一个具有部分功能的应用程序半成品,提供了可在应用程序之间共享的可复用的公共结构;同时也是一个可复用的设计构件,规定了应用的体系结构,阐明了整个设计协作构件之间的依赖关系、责任分配和控制流程,最终表现为一组抽象类以及其实例之间协作的方法[2]。应用框架提供了通用的服务,在此基础上可建立不同应用。插件技术是在程序的设计开发过程中,把应用程序分成框架程序和功能模块两部分,每个功能模块由若干个实现具体业务逻辑功能的类(插件)组成,框架程序与插件能够相互通信,并在框架程序不变的情况下,通过增减或修改插件来调整应用程序的功能[3]。插件式GIS应用框架程序规定了插件的实现方式,为功能模块提供各种基础服务,负责功能模块的动态加载、管理、插件的识别、创建与调用。
插件式GIS应用框架的实现需要解决功能模块运行时动态加载与管理、插件与框架程序的通信、系统运行时资源注入方法等问题,本文针对相关技术进行了研究。
1)基于反射技术的功能模块运行时动态加载技术。系统功能模块运行时动态加载是实现基于框架程序的应用系统功能动态扩展、快速适应用户需求变化的重要机制。当前有多种方式实现模块的动态加载,包括Win32 DLL(动态链接库)的运行时加载和基于COM接口的功能模块动态加载等。本文基于.NET的反射机制实现了系统功能模块运行时动态加载。
反射是系统审查元数据并动态收集其类型信息的能力。反射是.NET中的重要机制,通过反射可在运行时获得.NET中每个类型(类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件等[4]。使用反射获取程序集的元数据信息,即可动态地创建类型的实例,再调用类型的方法或访问其字段和属性。本文总结了3DGIS功能模块实现所需的通用要求,设计了系统功能模块类(插件)的接口和类层次结构,利用这些接口和类,通过反射机制即可识别系统的可用功能模块和插件。
2)基于事件的框架程序与插件通信机制。系统运行时,框架程序必须及时把自身的状态通知插件,以便插件及时做出响应,调整自身状态,如三维地形场景加载后,往往需通知插件是否可执行下一步操作。此外,插件在自身状态发生变化时也需通知框架及其他协作插件。框架程序与插件的通信可采用回调函数和事件的方式进行。本文归纳了插件和框架程序通信的需求,采用事件的通信机制,定义了一套完整的框架程序事件。插件只需订阅相关事件即可实现与框架程序的交互。本文还研究了事件转发机制,在框架程序中提供了事件转发的接口和功能,插件可向其协作的插件发送消息,从而较好地解决了插件与协作插件之间的通信问题。
3)基于配置的系统运行时资源注入方法。在插件式3DGIS应用框架中,由于功能模块是动态扩展的,其运行所需的各种资源(数据库连接、专题数据、运行时配置等)也是变化的,传统的由功能模块主动获取资源的方式变得不可行。本文借鉴Spring等Java开发框架普遍采用的依赖注入模式[5-6],设计了资源配置规范和配置信息获取接口,先由框架程序在启动时读取所有的资源配置信息,再在创建插件时将资源获取接口注入插件中,较好地解决了功能模块运行时所需资源的获取问题。
2 应用框架程序的实现
本文以DotNetBar 9.3为界面开发库,以Visual Studio 2010为集成开发环境,以Skyline TerraExplorer Pro 6.1为3DGIS开发平台,采用流行的Ribbon界面风格,设计了插件式3DGIS应用框架程序。应用框架程序结构及构建过程如图 1所示。
图1 应用框架程序结构及构建过程
应用框架程序的实现包括应用框架程序开发接口库的实现和应用框架基本功能的实现。
2.1 应用框架程序开发接口库的实现
应用框架程序开发接口库,由应用模块开发规范接口、框架程序事件接口、运行时日志输出接口和三维地图操作接口等组成。运用应用模块开发规范接口,可开发扩展功能模块(插件),在模块中实现具体的业务功能,并通过框架程序事件接口、三维地图操作接口实现与框架程序的通信、操作三维地形和访问各种专题数据。
图2 插件接口的UML层次结构
应用模块开发规范接口定义了插件实现需遵循的接口规范,简化的插件接口UML层次结构如图2所示。IPlugin接口用于在反射时识别模块里的类是否为本系统的功能插件,其余派生的接口用于定义具体的插件。根据插件是否与三维地图有交互操作,将插件分为命令(Command)、工具(Tool)、复杂控件(ToolControl)和停靠窗口(DockWindow)。ToolConrol插件是一种特殊类型的插件,可在框架窗体上创建界面较复杂的控件或自定义控件。DockWindow插件用于对自定义控件进行封装,形成在框架主窗体中的停靠窗体。
框架程序事件接口封装了TerraExplorer的三维地球事件,包括属性事件、三维地形、三维对象状态变化通知事件以及框架程序内部状态变化通知事件等。插件通过订阅这些事件实现了与框架程序和三维地形的交互。此外框架程序还提供了自定义事件机制,可实现插件之间自定义事件的转发,提高了插件间的交互与协作能力。
三维地图操作接口封装了三维地形和三维对象相关的各种基本操作,包括三维地球操作、三维工程树操作、对象创建管理等。在创建插件时,将该接口注入到插件对象中。三维地图操作接口可有效减少系统升级带来的维护工作量,在Skyline软件升级时,只需升级框架的三维操作类库和相关接口,而基于框架开发的应用则无需做大的改变。
系统运行日志对诊断系统运行发生的位置,快速修改系统错误有重要作用。本文基于开源日志组件log4net的运行时日志输出接口,提供了系统框架程序和各插件在系统运行时输出系统运行关键信息和运行时异常详细信息的相关方法[7]。基于XML配置的资源配置管理接口提供了应用系统所需资源动态按需加载机制,并在插件创建时注入该接口,使插件可获取运行时所需的各种资源。
2.2 应用框架基本功能的实现
应用框架程序实现了应用程序模块管理、系统界面配置管理、系统资源配置管理等程序管理功能,统一的用户角色管理、权限管理、日志管理等系统管理维护功能,以及三维地图视图操作等GIS基本功能。
3 应用案例
基于本文设计的框架程序,可有效减少重复开发3DGIS各项基本功能的工作量,简化功能模块的开发。应用系统只需利用通信接口与框架程序交互,通过各种配置接口获取各种资源,再根据具体的业务逻辑实现功能模块,最后通过配置组装,完成系统的开发,目前该框架已应用于福建省基础地理信息中心的3DGIS开发中。福建省3DGIS集成了福建省道路、境界、地名等基础地理信息数据,福建各地市的三维模型数据以及行业专题数据,提供了三维地图浏览、三维标注与分析、地名和POI查询、三维路线漫游、城市模型查询、浏览等基本功能,以及国土、森林防火、海关监管、水利、政务信息、电力规划、港口规划、交通辅助规划、城市辅助规划等行业应用功能,共计数十个模块近百个插件。系统具有数据量大、结构复杂、功能丰富的特点。利用本文的应用框架程序,较好地实现了功能模块的分割和集成,大大提高了开发的效率。系统界面如图 3所示。
图3 福建省3DGIS界面
此外,本文研究的应用框架程序还广泛应用于福建省数字城市应用示范建设中。永春县三维决策支持系统是数字永春地理空间框架建设的应用示例,该系统的部分功能模块复用了福建省3DGIS的开发模块,并结合永春县国土资源局的相关需求,设计实现了查询定位、城市漫游、土地利用信息查询展示、城镇规划辅助决策、高速建设辅助决策等功能模块[8],见图 4。
图4 永春县三维决策支持系统界面
基于该应用框架程序还完成了其他行业应用系统的开发,包括南平市土地收储三维展示系统、三明市水土流失遥感调查3DGIS、宁德市水务管线三维查询展示系统等,有效推动了行业应用系统的建设。
4 结 语
基于Skyline的TerraExplorer三维开发平台,本文利用.NET反射技术和事件机制,实现了插件式3DGIS应用框架程序。框架接口的稳定性及其提供对模块的动态管理的特点,使得基于应用框架程序开发的功能模块具有较强的复用性,系统具有较强的可扩展性,并能快速响应需求变化,较好地解决了3DGIS开发存在的问题。
随着应用的深入,用户对系统界面的个性化要求也越来越高。尽管该框架提供了换肤功能,可设置多种风格的界面,但由于采用了Ribbon界面风格,界面的布局和样式较为固定。在后续的工作中,将继续研究基于应用框架程序的系统定制方法,提供更为灵活的界面布局和定制方法,提高用户体验。
[1]潘立,张旭,任东风.基于Skyline的三维GIS构建与研究[J].测绘与空间地理信息,2016,39(8):90-93
[2]宋国兵.基于GIS的应用程序开发框架的设计与实现[D].杭州:浙江大学,2010:7-17
[3]崔修涛,吴健平,张伟锋.插件式GIS的开发[J].华东师范大学学报(自然科学版),2005(4):51-57
[4]宋智军,邱仲潘.Visual C#2010从入门到精通[M].北京:电子工业出版社,2010:223-233
[5]翟剑锟.Spring框架技术分析及应用研究[D].北京:中国科学院大学,2013:9-24
[6]姜林美,李国刚,杜勇前.结合AOP思想和依赖注入技术的轻量级MVC框架[J].华侨大学学报(自然科学版),2016,31(7):92-97
[7]蔡宇,赵正文.基于NHibernate和Log4Net实现用户登录合法性验证[J].信息技术,2008(11):32-34
[8]黄梦龙.基于三维GIS的城市规划辅助决策技术研究[J].测绘与空间地理信息,2015,38(12):165-167
P208
B
1672-4623(2017)07-0053-03
10.3969/j.issn.1672-4623.2017.07.016
黄梦龙,高级工程师,主要从事基础地理信息数据建库和3DGIS应用开发相关工作。
2017-03-14。
项目来源:国家重点研发计划资助项目(2016YFC0502900);福建省测绘地理信息局科技创新资助项目(2015J12)。