APP下载

一种动态实时的遥感专题应用系统定制框架

2018-11-26姜斌黄祥志杜震洪张丰刘仁义

浙江大学学报(理学版) 2018年6期
关键词:控件图层容器

姜斌,黄祥志,杜震洪*,张丰,刘仁义

(1. 浙江大学 浙江省资源与环境信息系统重点实验室, 浙江 杭州 310028; 2. 浙江大学 地理信息科学研究所, 浙江 杭州 310027; 3. 中国科学院 遥感与数字地球研究所, 北京 100101)

地理信息系统(GIS)软件用来解决地理空间数据的存储、管理、显示、分析等问题,应用广泛[1]. 遥感专题应用系统(下文也称“专题系统”)是一种常见的GIS软件,用于提取遥感影像特定的专题信息,具有对地图与遥感影像进行浏览操作、数据分析、专题信息提取、专题制图等功能. 农业、林业、灾害、气象等领域[2-8]为更好地服务于其行业需求,需从遥感影像中提取相应的专题信息,各领域均有其特定的专题系统. 当前,遥感卫星数据多样,遥感专题应用系统作为连接遥感影像和用户过程中最重要的一环,承担着将数据向知识转化的重任. 数据的爆炸式增长和高分辨率卫星的快速发展使行业对遥感专题应用系统的需求不断增大,快速开发不同领域的专题应用系统具有现实意义.

以往,各行业往往独立开发GIS软件或遥感专题应用系统,使得功能组件的重用度不高,造成较大的人力浪费;同时,基于传统模式,如集成二次开发模式开发的系统,要增加调整功能,需修改代码重新编译. 对于如何快速构建GIS软件,学者和相关公司针对功能重用、快捷开发等进行了一些研究. 李广强等[9]提出了一种基于控件和XML配置技术的可定制的软件开发方案,可对部分功能进行定制,但未完全解决灵活性等问题,当需求变化时仍需要修改代码. 佃袁勇等[2]利用插件方法构建了林带信息管理系统,在一定程度上解决了部分功能的灵活“插拔”问题. 美国ESRI公司推出的Web AppBuilder for ArcGIS,提供“所见即所得”式应用程序,可用于构建2D和3D的web 应用程序,无须编写代码,已得到应用[10]但仅限web应用. 遥感专题应用系统与web应用具有共同的特点,因此,有必要简化开发过程,实现快速构建.

本文就如何快速定制遥感专题应用系统,提高定制的灵活性进行了相关研究. 通过分析遥感专题应用系统,并根据其特点提出了一种基于组件的遥感专题应用系统的动态实时定制框架,开发了一个“所见即所得”的定制平台. 基于此,无须编写任何代码,可快速定制和开发遥感专题应用系统,从而简化不同行业专题应用开发的过程,降低开发的学习成本,实现遥感数据在各行业的快速应用. 灵活定制、“所见即所得”的设计和“零代码”开发是本框架的特点.

1 遥感专题应用系统特点分析

不同行业的遥感专题应用系统,具有较多通用功能,差别往往在专题信息的提取模块.专题系统的功能一般包括GIS通用功能和遥感专题信息提取功能. GIS通用功能一般包括地图浏览操作、数据处理、专题图制图等,专题提取功能模块指提取相关专题信息的功能. 总结文献[2-8]发现,遥感专题应用系统通常具有如图1所示的模块和流程.

图1 遥感专题应用系统的模块与流程图Fig.1 Modules and flowchart of remote sensing thematic system

为减少各行业重复开发造成的资源浪费,有必要设计一套通用的遥感专题应用系统框架. 对专题提取功能,可建立相应的专题算法库或专题模块,按需取用;大部分遥感专题应用系统可以共用GIS通用功能. 本文将遥感专题应用系统中各功能设计成组件形式,通过组件的拼装定制专题系统.

2 定制框架设计

基于上述分析,设计了一套基于组件的遥感专题应用系统定制框架. 其思路是采用组件的方式定制遥感专题应用系统,脱离软件开发过程中的硬编码体系,用XML灵活表示遥感专题应用系统所采用的各个组件及其关系. 在本框架中,将遥感专题应用系统中的功能和界面按组件进行封装,专题系统实际上是多个组件的集合,组件和组件间的关系通过XML文档表示. 如图2所示,一个遥感专题应用系统对应一份XML文档,XML文档通过解析形成专题系统. 当需要对专题系统进行增加和删除操作时,可通过配置XML来实现;当需要对某个功能进行升级时,只须更新相应的组件并分发给用户.

图2 定制框架的结构Fig.2 The structure of customization framework

2.1 组件的划分

基本思想是将大型系统的基础功能划分为多个独立的单元,通过接口将组件组装起来,从而实现基础的系统功能[11-12]. 如ArcEngine等二次开发平台,提供了用于开发的GIS功能组件,并结合相应的集成开发环境进行开发[13]. 笔者借鉴上述模式,简化组件的概念和关系,将遥感专题应用系统中的所有内容均视为组件. 其中,一部分组件具有实际GIS功能,比如地图控件、图层列表、放大缩小控件、专题信息提取组件等,称为功能类组件;另一部分组件是为界面布局所设计的,如各个层级的容器等,称为容器类组件. 功能类组件中含不同粒度的GIS功能组件;容器类组件提供各界面的布局框架,支撑用户软件界面的设计. 这两类组件共同构成该框架的组件体系.利用这些组件,不必编写软件代码,通过XML文件便可构建遥感专题应用系统软件.

图3 组件划分示例图Fig.3 The example of component partitioning

图3为一个简单的组件划分示例,以此说明功能类组件和容器类组件的区别. 在此软件中,具有4个功能类组件,分别为上部的“添加图层”“手形工具”和下部的“地图控件”“图层信息控件”. 除此之外,界面其他部分均为容器类组件,用于布局界面框架.容器类组件可以层级嵌套,如上部的2个按钮放在一个文本为“地图操作”的容器中,同时该容器又放在了一个文本为“地图”的上一级容器(Tab页面)中,下部的“图层信息控件”放在一个可隐藏的容器里,用图钉实现该容器的隐藏与显示.

图4为组件接口关系图,用以说明组件需要遵守的接口规范.顶级接口为IGiasComponent,该接口定义了每个组件所具有的属性,包括ParentContainer(即父容器)属性;其下的2个接口分别为IGiasUI和IGiasContainer,其中,IGiasUI表示功能类组件,IGiasContainer表示容器类组件;不同类型功能类组件又可分为不同接口,如表示按钮的IGiasButtonCmd接口、表示非按钮命令的IGiasOtherCmd接口、表示面板的IGiasCtrl接口.

图4 组件接口类关系图Fig.4 The class diagram of component

每个组件均具有相应的属性,组件的属性描述了组件的规则状态. 有些是在公共接口中定义的公共属性,比如组件的名称、位置等,有些则是某些组件独有的.

一般来说,功能类组件并非独立存在的,需要多个组件配合才能实现其功能.某些组件具有输入或输出参数,需要组件间制定相应的关联规则. 基于组件间的关系,设计了如下规则: (1) 绑定,指2个或多个组件间需要绑定才可以建立关系,如放大按钮组件对地图控件的操作需要进行绑定;(2) 输入输出,指组件间具有输入输出的关系,如一个组件需要调用另一个组件的变量,或者一个组件需要将运行结果输出到另一个组件上;(3) 事件开放,指一个组件可以开放某个方法事件并提供给另外的组件进行调用. 如图3所示的示例采用了绑定规则,点击“添加图层”按钮后在“地图控件”中便可添加图层,需要“添加图层”组件去绑定“地图控件”.

组件类库是设计专题系统的基础. 基于前述接口规范,任何人都可针对遥感专题应用系统设计功能组件库. 可以根据接口开发组件类库,也可以在已有的系统上进行拆分、改造和封装,并将组件类库嵌入到该框架中.

2.2 专题系统与XML间的关系

XML指可扩展标记语言,具有自我描述性,用来传输和存储数据. 由于XML文件简单易读,占用空间小,所以本框架采用XML来记录遥感专题应用系统所采用的组件、组件属性和组件间的关系. 在本框架所采用的XML结构中,用元素标签名代表组件,用元素的属性描述组件的属性和组件间的关系,如组件的名字、大小、绑定关系等,组件间元素的层级关系代表遥感专题应用系统中组件间的包含关系.

图5是XML的一个书写案例,亦是图3所示软件的XML存储文件. 为使用方便,在XML文件中,以组件的“命名空间+类名”(命名空间是.NET中使用的代码组织形式)作为元素节点的名称,以组件的属性名称作为XML中元素的属性名称,采用特定的英文单词等标识组件间的关系(如Bind、Output、Event分别表示绑定、输出、事件关系). 用此方式书写的XML具有很好的自我描述性,也为后续的XML解析提供了方便. 在图5中,每个元素标签均代表一个组件,简化起见,命名空间以x表示. 最内层节点为功能类组件,如x.AddLayer表示“添加图层”组件,x.Pan表示“手形工具”组件,x.UCLegend表示“图层信息”组件,x.UCMap表示“地图控件”组件. 其他节点为容器类组件,比如根节点x.System表示整个系统. 每个节点具有自己的属性,如Name为组件名字,全局不可重复.为避免重复,本文采用特定方式计算全局ID标记.“手形工具”和“添加图层”需要绑定“地图控件”后才可使用,因此,在x.AddLayer和x.Pan节点中局使用Bind.Map1指示x.UCMap组件的名字. 图5便是图3中软件示例的XML文件形式.

图5 本框架中的XML文件示例Fig.5 An example of XML file in the proposed framework

该框架可通过读取XML将其解析为遥感专题应用系统. 主要通过反射技术[14-15]实现XML解析. 应用反射技术,可以在程序中动态创建对象、访问对象的各种变量、属性和方法等,从而使程序具有更好的扩展性和灵活性.

本框架将XML文件按层级由内而外、同层级由上而下生成相应组件. 首先,对每一个元素节点进行反射,生成相应的对象,并设置相应的属性,由于Name是全局唯一的,所以由Name生成的组件对象不会重名.当外层组件生成后,将生成的内层组件添加到外层组件(父容器)里. 当全部组件对象创建完成后,设置组件间的关系,包括绑定关系、事件触发等.

采用XML表达的遥感专题应用系统不同于一般GIS开发的硬编码模式. 在硬编码模式中,软件的功能已写入代码,若想增、删或升级,大多需要重新编译、打包软件等. 本框架用XML表达专题系统,只要将组件类库和XML文件分开,在保证接口不变的情况下,组件类库可随时升级;在拥有组件类库的情况下,用户可根据功能需求在XML中按需定制.

3 遥感专题应用系统定制平台

在前述框架体系中,一个XML文件描述一个遥感专题应用系统软件. 通过拷贝给用户相应的XML文件,即可生成一个遥感专题应用系统软件,从而大大降低软件的分发成本. 但是,手工撰写XML文件存在效率低、出错率高等问题. 针对此情况,在此框架基础上搭建了专题系统定制平台,可利用该平台定制遥感专题应用系统,并将其保存为XML文件.

图6为遥感专题应用系统定制平台,可利用组件进行专题系统的可视化定制,并将定制内容保存为XML文件. 也可打开XML文件并解析为专题系统继续编辑. 为便于表达,将图6用黑色矩形划分为4个区域,区域1为基础功能区,区域2为功能组件区,区域3为组件属性设置区,区域4为软件设计区. 区域4默认为空白,图6中的区域4正在进行专题系统设计.

图6 遥感专题应用系统定制平台Fig.6 The platform for designing thematic system software

在该平台上,用户可将区域2的组件拖进软件设计区域,或从区域1通过快捷按钮添加一些容器进入软件设计区域,从而组装出相应的遥感专题应用系统. 在组件布局完成之后,通过区域3进行组件属性和组件间关系的设置. 之后便完成了遥感专题应用系统设计.

当组件被拖动进入设计区时,会通过反射实时创建组件对象,每个对象均具有唯一的名字. 对多个对象之间进行关系设置时,用反射动态获取对象的属性、方法、变量.

从图6中可以看出,被拖动进入设计区域的组件可以实时运行. 如区域4中通过点击“添加图层”按钮在“地图控件”组件上添加了一幅中国地图. 本设计平台对拖动进入的组件,可实时生成相应的对象,具有动态实时的效果,可以“所见即所得”地查看每个功能组件的形态和组件间配合的运行效果. 不同于一般IDE开发软件的过程,需要编译之后才能运行,如采用ArcEngine加Visual Studio的二次开发,在加入组件后,需要编译运行程序才可以查看运行效果.

设计完成后,用户可以将设计区域的内容保存为XML文件. 通过遍历各个层级的组件,将组件的全名、属性、绑定关系等按照前述章节规则进行保存. 保存后的XML文件,可通过解析成为相应的遥感专题应用系统.

4 应用实例

在本框架中,GIS和遥感的组件设计可独立开发,也可根据所用开发语言,选择国内外相关的GIS开源代码进行封装;解析XML文档所采用的反射技术,在当前Java或C#等常见的面向对象的语言中,具有较高的生成效率. 所以,本文所提出的框架具有可行性. 同时,基于此框架的遥感专题系统已应用于相关部门.

基于开源GIS库DotSpatial设计了GIS组件库,封装了近100个GIS功能类组件,涵盖地图浏览、制图工具、地图分析等多种功能;基于已有系统,拆分和封装了涵盖农业、林业、灾害等领域的遥感信息提取组件,通过统一的界面对专题提取算法进行调用;基于DevComponent DotNetBar设计了一系列容器类组件,包括系统、子系统、各类可隐藏容器等.

基于前述组件类库,用定制平台设计了数个遥感专题应用系统,均已应用于相关部门. 图7为采用该框架定制的一个“城镇化资源环境效应研究示范子系统”,利用该系统,可对城镇的陆表变化、内部功能区、热环境等进行专题信息提取. 该系统包括任务设定模块、数据分析模块、专题信息提取模块、信息表现与综合制图、简报成果发布等功能模块,可以流程化地实现遥感数据的选取、加载、分析、提取、制图、成果发布等一系列过程.

图7 城镇化资源环境效应研究示范子系统Fig.7 The interface of the urbanization resource and environmental effect system

需特别指出的是,在GIS软件中,处理大量或大幅影像时,效率通常是制约适用性和实用性的重要指标. 在本示例所实现的定制化专题软件中,采用Gdal库读取影像,构建相应的金字塔,进行影像加载,具有较高的效率;对于影像的空间分析处理等,DotSpatial已能基本满足要求.

由于所用组件均通过XML配置,不同行业均易配置相应的专题提取组件,也可通过调整GIS通用功能组件,实现不同行业专题系统的定制. 实践证明,基于已有的功能组件,设计如“GIS通用功能(数据选取/数据处理/专题图制作/简报制作等)”加“专题信息提取模块”类型的遥感专题应用系统,非常方便快捷.

5 结论与展望

提出了一种基于XML的遥感专题应用系统定制框架. 在该框架下,将专题系统所需的功能封装为组件形式,用XML来描述遥感专题应用系统,将XML解析为遥感专题应用系统软件. 同时,为方便软件设计,提供了基于此框架的遥感专题应用系统定制平台,可以快速、方便、动态、实时地设计专题系统.

本框架为遥感专题应用系统的设计提供了便利,较以往的集成二次开发更简洁、更方便. 基于此框架,用户不必写任何代码就可定制相应的软件. 将组件开发任务交给专业人员,轻松实现遥感专题应用系统的定制. 同时,由于用XML文件表达软件,在用户具有相应组件库的前提下,开发者通过分发XML文件便可为用户提供遥感专题应用系统软件. 本框架具有较好的动态扩展性,可方便地设计新的组件类库,也可将其扩展到其他软件开发领域.

本框架也存在一些不足,如对于重用性较低的组件需要定制开发;对复杂组件考虑得还不够全面和细致. 未来将更好地完善此框架,使相关软件的开发更便利.

猜你喜欢

控件图层容器
容器倒置后压力压强如何变
为《飞舞的空竹龙》加动感
基于.net的用户定义验证控件的应用分析
难以置信的事情
关于.net控件数组的探讨
解密照片合成利器图层混合模式
取米
用Photoshop图层技术制作精美邮票
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
随心所欲制作逼真阴影效果