,, ,,,6
(1.新疆农业大学林业研究所,乌鲁木齐 830000;2.滁州学院 计算机与信息工程学院,安徽 滁州 239000;3.滁州学院 地理信息与旅游学院,安徽 滁州 239000;4.新疆卫星应用中心,乌鲁木齐 830000;5.中国科学院遥感与数字地球研究所,北京 100101;6.河南大学 计算机与信息工程学院,河南 开封 475004)
GIS已广泛应用在农、林、水利、交通等各行各业,其基础理论不断被完善,GIS软件的功能也从最初简单的显示、输出,到具备高级的统计分析、空间分析等功能,再到与网络、遥感、VR等各种新技术相结合,功能越来越强大。与此同时,遥感技术也取得了长足的进步,除了作为GIS应用更新数据的重要来源之一,对于遥感数据自身处理分析算法的应用研究也越来越多,能从影像中提取出了更多的信息,广泛应用于资源普查、环境监测等方面。遥感与GIS各有优势且互补性强,两者的结合是发展的必然趋势[1-3]。
遥感与GIS的结合,多体现在数据的使用层面。用遥感数据提取出来的信息,进行GIS分析和应用,是最常见的结合方式。在系统软件方面,遥感与GIS系统的集成方案还不够完善,既有专门处理遥感数据的遥感软件如:ENVI、ERDAS等,也有专业的GIS软件如:ArcGIS、SuperMap等,各软件之间单独存在,且各成体系。即使ArcGIS与ENVI之间的集成,也只是体现在数据互操作、平台之间以及系统一体化集成开发这三个方面。其集成开发的方式,也只是ENVI/IDL与ArcGIS桌面定制,或者是与ArcGIS Engine/ArcGIS Server进行集成。这种传统GIS软件的集成方式,多使用代码将遥感算法固定在系统中。此类方案在后期的系统维护和功能扩展中的弊端便显露出来,修改或增加一个功能算法,需要重新编码,编译生成新程序,出现“牵一发而动全身”的局面,从而导致系统的可维护性不高。利用插件技术成为提高软件的可扩展性和可重用性的重要技术手段之一[4-5],然而插件仍需实现众多接口,编写大量代码。
借鉴其他行业的经验,如朱颖芳,谢建全[6]采用XML来描述界面上组件的信息,通过解析XML来动态的生成界面,实现了界面的重用以及界面与系统的分离。胡贞[7]通过XML实现地理信息系统表示层、应用层、数据层之间的数据交换,并用 ArcGIS Engine 组件和 VB.NET 进行二次开发,完成了某市信息管网地理信息系统建设。卢学鹤等[8]使用插件技术实现了森林资源地理信息系统的开发,降低了系统功能的耦合度。然而在GIS与遥感相结合方面,进行的应用研究较少,如何将遥感算法快速灵活地与GIS系统集成,提高代码重用率,降低维护难度,并将算法的实现代码与系统平台相分离[9],成为了GIS与遥感结合急需解决的问题之一。
结合插件动态加载程序模块的思想与XML技术,本文提出一种面向遥感的GIS专题应用算法模块动态集成框架,在分析遥感算法运行特点和需求的基础上,搭建GIS算法集成框架,将算法界面、算法的实现代码与系统平台分离出来,使用XML描述文件作为遥感算法与系统平台沟通的桥梁,构建GIS专题应用系统,为GIS系统和遥感算法结合提供新的思路与方法。
遥感数据覆盖范围广、获取速度快的特点使之成为了众多行业重要的数据来源,对遥感数据处理和分析研究的算法也不断涌现出来,如各种分类算法、分割算法、反演算法、融合算法等。应用在不同领域,产生了更多更具有针对性的算法,如林业应用中的森林生物量估算算法、森林结构信息提取算法;农业中地表温度反演算法、作物估产模型等。
无论何种算法模型,其基本模式可抽象成:参数→模型→执行(见图1),参数按其类型,可分为值类型与文件类型,值类型一般是模型中对应各种参数因子的值,而文件类型一般是指需要传入模型的文件的物理路径,或输出文件的物理路径等。模型算法既可以通过代码的形式,内置在需要集成的软件中,也可以封装成单独的文件,如可执行文件(EXE)、动态链接库文件(DLL)、IDL编写的PRO或SAV文件等,这类单独的文件,在进行系统建设时可单独调用,降低了系统与具体算法之间的耦合度。故可将算法所需参数,通过XML文件进行描述,在系统调用某一算法时,可将XML文件作为参数传入,由算法内部解析,参与运算。
图1 运行模式图
常用的商业软件,如ArcGIS、MapGIS、SuperMap等,功能强大、内容丰富,但在行业或专业领域应用时,系统不具有针对性,绝大多数功能会被闲置,造成系统资源浪费。在实际应用中,常利用一些GIS软件提供的资源包,进行二次开发、或利用开源GIS软件,将常用功能提取出来,构建具有基本功能、可定制的专题GIS系统平台,然而很多功能会在开发时固定在程序中,后期修改、维护困难。因此,可采用一种新的方式来解决功能添加删除的问题,除常用功能外,其他功能通过配置文件的形式,动态地添加进系统中。减少资源浪费,使系统更具有针对性和可扩展性。系统框架如图2所示。
图2 系统平台框架
框架总体上可分为两部分,一部分为GIS基本功能,包括数据的加载显示、地图图层的管理、基本的空间分析和整饰输出等功能。另一部分是专题应用算法模块,包括模型配置文件、界面控件库、参数交换文件。为实现系统具有动态加载算法的功能,和更具有可扩展性,降低系统维护难度,用户只需要调整设计模型配置文件中的内容即可。系统在初始化时读取配置文件,根据配置文件中的内容,实例化控件并添加至系统中。
模型配置文件是在本系统中,用于对算法等信息进行描述的文件。为使算法能与GIS系统灵活、方便地集成,将需要集成的算法进行结构化的描述,分为四个层次:“系统”、“模型”、“算法”、“参数”。并使用XML对算法进行组织。编写XML文件的过程,也就是为待集成的算法,搭建系统界面的过程[6]。下面对这四个层次进行详细的描述。
1.3.1 系统(System)
System是对将要构建系统总体的描述。有两部分内容,第一部分是系统名称(SysName),通过该节点,设置所构建系统的名称,根据该节点中的内容,系统在启动时,便能读取该节点中的值,并将节点中的内容,作为系统窗体的名称进行显示,实现了动态更改系统名称的功能。第二部分是模型(Model),是一系列算法的集合,所有属于同一模型的算法,将被包含在同一个Model中。一个System节点下,可以放置多个Model平行节点,系统会根据Model节点的不同和数量,实例化多个不同数量的算法集合。
1.3.2 模型(Model)
Model是一系列算法的集合。一个完整系统需要集成的算法,在类型上可能不止一种,我们把相似或为实现同一目标的算法归为一类,称为一个模型(Model)。一个Model中又包含了两部分,第一部分是名称属性(Name),是对这类算法进行总体的描述。第二部分是算法(Algorithm),该节点是对算法进行描述的模块,一个模型中,也可以包含多个算法。
1.3.3 算法(Algorithm)
Algorithm是具体算法的描述模块。该模块包含了以下几类属性:算法名称(Name)、简称(ShortName)、图标(PicPath)、文件执行路径(Process)、描述信息(Description)、参数(Arg),通过这些属性,可将算法的主要信息进行详细的描述。此时算法执行文件,已经被打包成DLL、exe、SAV等可供程序调用的文件形式,通过在算法节点中指定算法执行文件的物理位置,在需要时,可更新位于该位置的算法文件,无需重新更改系统源代码,实现了算法代码与系统代码分离,降低了与系统之间的耦合性。
1.3.4 参数(Arg)
Arg是算法所需参数的描述模块。该模块包括参数名称(Name)、参数标题(Title)、参数描述(Description)、文件类型参数(Process)、值类型参数(Value)等信息。在编写具体算法时,需预先约定好参数的个数、类型、以及顺序等信息,当实例化完成各个参数后,可将这些参数,按照事先约定的参数个数、类型及顺序,将参数传入待执行算法,参与算法运行。
在模型配置文件中存储算法执行文件的物理路径,而算法执行文件以exe、pro、sav、dll等形式独立存在,减少了与GIS系统平台之间的关联性。XML格式的模型配置文件,能够清晰地表达各个层次之间包含与被包含的关系,下面是一段模型配置文件的例子。
传统的开发方式会根据算法需要,为每一个算法功能添加不同的窗口和控件,并进行布局,以及设置各个控件的属性,编程实现对应的功能。然而这种方式,界面重用性差、界面与功能代码耦合性高,后期维护困难[10]。为此可将一些共性的控件进行抽象,并实现相应的代码功能。根据模型配置文件的描述,动态实例化模型配置文件中要求的不同类型和数量的控件,同时根据描述文件中的内容,设置与控件相关的其他属性,以简化工作,提高程序的可扩展性。
根据模型配置文件中定义的各个节点,本文设计了对应的控件,这些控件有:参数控件,包括值类型和文件类型;值类型的参数控件,是针对值类型的参数而设计的控件,如可供运行的阈值、文本等信息;文件类型的参数控件,针对文件类型的参数设计的控件,可以用来选择计算机中存储的文件,或者系统中已经加载的图层等;同时还需要设计参数设置面板,用于放置参数控件的面板;模型运行面板,用于判断参数是否合理,以及设置保存路径;结果查看面板,是算法运行结果的查看面板(见图3)。
图3 参数准备界面
参数交换文件是根据遥感算法的特点而设计的XML格式文件。当算法参数控件实例化完成后,用户可以根据需要,在界面上填入各种所需参数信息,系统会将这些参数序列化为一个XML格式的参数交换文件。在运行算法时,系统会开启新的线程,调用原先在模型配置文件中存储的算法文件,并将XML格式的参数交换文件作为参数传入算法,此时该算法需要在其内部进行解析,获得其运行所需参数,参与运算。由于篇幅关系,现只把主要节点进行描述,参数交换文件的主要描述如下。
文件描述了算法运行中所需的各种参数,主要节点为InputParameters节点和Outputparameters节点。InputParameters中包含了用户在界面中填写输入的各类参数的名称以及值。参数节点的名称及参数的个数,随模型配置文件中名称和个数的变化而变化。Outputparameters节点包含了文件输出路径(OutDir)以及用于判断算法运行状态的进度文件(ProgressFile)、异常文件信息(ExceptionFile)。进度文件和异常文件由具体算法内部控制。算法在运行期间会不断地向进度文件输出进度信息,进度信息的数值为0至100,系统平台会读取其中的值,并进行显示。异常文件则用来判断当前算法的执行进度和运行状态,若算法运行异常,系统会将异常信息保存到该文件中,以便后期查看及维护。
为了验证本文设计的集成框架的高效性和实用性,以新疆高分综合应用示范管理服务平台系统为例进行说明。
系统目的是在具有基本GIS功能的条件下,将项目所需的各种遥感模型算法集成在同一个系统中。由于这些算法并不是同一个单位进行研发,故形式多样。使用传统开发方案,为每一个新算法增加新界面、集成新算法等操作都较为繁琐,耗时耗力。且随着项目进度不同,不能同时进行系统集成工作,为新增加算法而需不断修改源代码,以适应新增内容。按照本文提出的设计方式,搭建GIS系统平台,构建通用算法控件,将算法的各种描述信息写进XML格式的模型配置文件,通过添加、修改XML文件中相应的节点,更改界面显示效果,增加新功能,并通过修改模型配置文件中,算法节点下的执行文件路径,实现对系统中算法的更新。由于篇幅关系,先以一种算法的添加为例进行说明。
新疆高分综合应用示范管理服务平台系统:
为把对高分影像数据进行监督分类的算法进行集成,按照上述方式修改模型配置文件系统名称为“新疆高分综合应用示范管理服务平台”、模型名称为“森林资源”、算法名称为“林果分类模型”以及所需的参数,包括感兴趣区域文件参数、待分类影像参数及其他属性信息,文件内容如下所示。
需要注意的是,在文件中配置的执行算法运行程序、算法图标等信息,使用了相对位置,需要放置在系统启动目录中约定的文件夹下,程序会按照约定内容,解析相对位置,找到文件存放的绝对位置。
根据上节模型配置文件中的内容,程序在启动时,根据模型配置文件中包含的节点信息,实例化相应数量和种类的控件,并添加至系统中,并根据节点中的属性信息,设置控件的属性。在系统中设置好各项参数以后,点击程序中的运行按钮,程序便会调用模型配置文件中,算法节点下所对应的算法执行文件,并将设置好的参数传入,运行算法。效果显示如图4~5所示。
图4 参数面板
新疆高分综合应用示范管理服务平台的主要功能如下图6所示,包括任务设定、数据分析、专题信息提取、信息综合表现与制图、简报成果发布、系统设置。
图5 结果查看
图6 系统主要功能
2.3.1 任务设定
主要是用来确定需要进行操作的数据空间范围,和所需数据的时间范围。
2.3.2 数据分析
集合了常用的空间分析功能,以及地图操作工具,包括缓冲区分析、叠加分析;面积量算、距离量算、角度量算;平移、放大、缩小等操作。
2.3.3 专题信息提取
是程序用于集成各类算法的模块,在本实例中,集成了森林资源分类算法,算法信息通过模型配置文件描述,程序经过解析文件、实例化相应的控件添加至程序中,该算法以影像数据和感兴趣区域为参数,用于遥感影像的数据分类。
2.3.4 信息综合表现与制图
在数据处理完成之后,利用该模块中的功能,可以实现地图等数据的整饰输出。包括添加比例尺、图例、指北针、图名、文本信息等地图要素,以及设置输出地图的分辨率、尺寸大小等。
2.3.5 简报成果发布
该模块提供管理各种文档资料的功能,包括文件的增删改查,复制下载等操作。可为项目各种资料,提供简单易用的管理功能。
为将遥感算法与GIS系统灵活动态集成,本文提出了一种面向遥感算法的GIS系统动态集成框架,为遥感算法与GIS系统的集成,提供新的思路,并在实际中应用,取得了良好的效果,具有以下优点:
1)将遥感算法的实现代码与系统分离,系统只负责调用配置文件中指定位置的算法文件,降低了系统与算法之间的耦合度,提高了系统的可维护性。
2)通过修改模型配置文件中的节点,不需重新编码和编译,便能增加和修改算法,更新系统界面,使得界面设计与系统平台分离,方便了后期功能的增删等操作。