共相式地理信息系统():追赶ITGIS

    经过几十年的发展,地理信息系统(Geographic Information Systems, GIS)已经融入信息技术(Information Technology, IT)的主流,并成为IT的重要组成部分。同时,IT的发展也深深影响着GIS的发展。每一次重大的IT进步,都给GIS软件带来革命性的变化,同时也给GIS软件开发带来机遇和挑战。

  操作系统的升级和发展是影响GIS软件发展的重要因素。早期的GIS软件几乎都基于Unix操作系统,随着个人电脑(PC)快速发展和普及,到二十世纪九十年代后期,Windows成为PC主流操作平台,那些成功地把软件转移到Windows操作系统的GIS厂商得以生存下来。

  目前,Windows已经成为占领导地位的客户端操作系统,并在服务器端占领一定份额;大型应用系统服务器采用Unix的比例较大;而Linux操作系统在Web服务器领域占有重要地位;如果考虑PDA和手机等嵌入式计算设备,操作系统更加多样化。GIS厂商为了适应不同的操作系统,开发了不同版本的GIS软件,这些软件大多具有各自独立的技术内核,维护其功能和性能升级给GIS厂商带来巨大的负担,严重制约了GIS技术的发展速度。

  软件开发方法的发展和变化是影响GIS发展的另一重要因素。九十年代中,基于组件的开发(Components Based Development, CBD)成为IT的主流开发方式,这导致了GIS业界翻天覆地的技术革新。Intergraph启动Jupiter计划,研发基于微软COM组件式技术的新一代产品—GeoMedia系列;ESRI也于1999年发布了其投入巨资开发的,基于同类技术的ArcGIS 8。在GIS软件组件化浪潮给当时成熟的GIS软件企业带来挑战的同时,也给中国GIS行业的新进入者造就了难得的机遇。2000年,北京超图地理信息技术有限公司发布了SuperMap Objects 2000,并借助组件化的大潮得到迅速发展,如今其产品线已涵盖大型空间数据库引擎、Internet GIS、组件式GIS、嵌入式GIS和桌面GIS,成为最有影响的亚洲GIS品牌。

  目前,基于COM的组件式GIS软件技术依然是主流。但曾经带来GIS技术变革的COM仍然存在诸多不足,如因“动态库地狱 (DLL Hell)”所导致的组件版本冲突,因对象无法继承而导致的二次开发扩展能力局限等等,这都影响到基于COMGIS技术进一步发展。微软为与Java竞争而推出的.NET技术同时也将逐步取代COM技术,加上Java的技术进步,因此未来的组件技术将逐步转向以.NETJava为主。据地理信息系统论坛(www.gisforum.net) 调查,2006年以后,选择.NETJava语言开发GIS应用系统的单位将超过50%(图1)。

 

 

  除操作系统和开发语言的发展变化以外,IT很多其他方面的进步都对GIS软件产生重要影响。在不断变革和进步的IT面前,GIS开发商总是应接不暇,被迫不断投入重金开发新的GIS软件。尽管如此,GIS软件还是陷入了一个难以自拔的漩涡,GIS软件不断追逐IT但总是远远落后于IT。随着GIS所依赖的技术环境越来越复杂,以及IT的不断进步,为了跟上技术变化,满足不同类型应用环境的需求,研发GIS平台软件的负担越来越重。因为跟不上IT变革,一些早期在国际和国内很有影响的GIS软件和企业被市场无情地淘汰。

  笔者在1999年提出多源空间数据无缝集成(SIMS)技术,解决了GIS软件直接访问多种数据格式的问题,并且由于该技术的开放性,因此还可以扩展支持未来的GIS数据格式,大幅度减少了GIS软件支持多种数据格式的代价。那么,能否探索出一种领先的软件架构,使得GIS软件能够以较小的代价,普遍适应当前和未来信息技术在硬件设备、操作系统、开发语言等方面的发展和进步呢?

 

共相式地理信息系统(二):哲学中“共相问题”的启示

 

    哲学中用“共相”和“殊相”来分别指代普遍性和个别性的概念与事物。比如方形的办公桌、圆形的餐桌或椭圆形的会议桌,其中任何一个都是殊相,而用以概括各种类型桌子的“桌子”这个概念则是共相(Universal)。同样,基于COM的组件式GIS软件是一个殊相,基于.NET的组件式GIS软件或基于JavaWebGIS软件也都分别是殊相,而用以概括各种GIS软件的“GIS软件”则是一个共相。

    共相和殊相是现代哲学中的基本概念,现代哲学家贝特兰•罗素认为,开创对“共相问题”的探讨是希腊哲学家柏拉图对整个哲学界的最重要贡献之一。所以,当代西哲怀特海才说,自柏拉图之后的哲学都是在为柏拉图作脚注,即无论你是赞同或反对柏拉图,最后都是围绕着他所提出的共相问题而展开的。从这个意义上讲,你即便在反对柏拉图时也仍然是一个柏拉图主义者。

 

 

    对共相问题的探讨,确定了西方哲学甚至整个哲学的主要发展方向。哲学中的共相问题对突破当前GIS软件发展的困境也有重要的启示。哲学家们认为,殊相是基于具体的时间而存在的,而共相则是对经验世界中的一切现象以及一切可能成为经验世界现象的最高抽象,可以独立于具体的时间之外永续存在下去。换言之,我们也可以说,众多的殊相被概括为共相之后,其生命得以延长。

    那些作为殊相的GIS软件个体之所以不能长时间存在,主要原因在于,软件被设计为过多地依赖于具体的技术环境,如硬件设备、操作系统、开发语言、数据库和数据格式等,一旦其赖以存在的技术环境发生重大变化,则GIS软件可能因此而淘汰。正因为如此,GIS软件的研发者不断地重复着“夸父逐日”式的追逐。在某一殊相GIS软件上投入越大的研发成本,一旦IT相关技术出现新的发展,则在下一阶段的新产品开发中必须付出更大的代价才能跟上技术的发展,否则就面临被淘汰的危险。

    尽管共相只是概念世界的东西,而并非具体的事物,但不可否认,个体的殊相因为被抽象为普遍的共相之后,得以超越具体的时间而延续。尽管我们知道,不可能有理想的、一成不变的、可以永续存在的“共相GIS”,但若我们对GIS软件进行共相式的概括和抽象,提炼出那些独立于具体的技术环境之外的GIS内核和技术架构,这个技术架构在IT发展变化中可以保持相对稳定,只需要投入较少代价对软件的外围部分进行扩展或调整,即可适应未来IT的变化,将在很大程度上延续GIS软件的生命周期,减少GIS平台开发商因技术变革而带来的大量重复投入。

    对于真实的软件而言,既然真正的“共相GIS”并不存在,我们不妨称这样的GIS为“共相式GIS (Universal GIS)”。就当前技术环境而言,共相式GIS就是能够支持当前存在的任何计算设备(Any device)、任何操作系统(Any operation system)、任何开发语言 (Any programming language)、任何数据库(Any database) 和任何数据格式(Any data format)GIS软件,并可以以很小代价来支持未来的计算设备、操作系统、开发语言、数据库和数据格式的GIS平台软件。

共相式地理信息系统(三):概念与特征 

    “共相”只是一种概念,任何一套或一个具体的GIS软件都是“殊相”,作为具体软件形态的“共相GIS”并不存在。因此,我们不妨称具有统一的GIS内核,支持多种技术环境,并能很快适应未来技术变化的GIS为“共相式GIS (Universal GIS)”。就当前技术环境而言,共相式GIS理论上应能支持当前存在的任何计算机设备(Any device)、任何操作系统(Any operation system)、任何开发语言 (Any programming language)、任何数据库(Any database) 和任何数据格式(Any data format)GIS软件,并可以以很小代价来支持未来的计算设备、操作系统、开发语言、数据库和数据格式的GIS平台软件。
上述的共相式GIS仍然是一个理论上的概念,真正支持所有设备、所有操作系统和所有开发语言等技术环境的GIS软件既不存在,也没有必要。对于一套具体的共相式GIS软件而言,需要支持主流的设备、主流的操作系统和主流的开发语言等,更重要的是应具备一个可以无限扩展以适应技术变化的能力,至于具体实现对哪些技术环境的支持,应视当时的用户需求和实现代价而定。一般而言,一套共相式GIS软件应该具备以下特征:

1) 应具有统一的、具有普遍适应性的技术内核—共相式GIS内核(Universal GIS Core, UGC)
2)
包括多种GIS软件形态;
3)
支持多种计算机设备;
4)
支持多种计算设备;
5)
支持多种操作系统;
6)
支持多种开发语言;
7)
支持多种数据库;
8)
支持多种数据格式。

共相式地理信息系统(四):体系架构

 

    共相式GIS的本质在于通过精心设计的软件架构,把GIS所特有的功能、分析处理算法和所依赖的信息技术进行有效的隔离,使得两者可以各自独立的发展而不会相互牵连制约,不会因为信息技术的发展变化而导致整个软件从头再来。因此,共相式GIS的核心思想,就是要建立一套共相式GIS内核,实现那些相对稳定的、远离易变的技术环境的GIS核心功能。并在UGC基础之上扩展那些与不断发展的技术环境关系紧密的外围功能模块和人机交互界面。一旦相关技术环境发展变化,仅仅需要重新实现或调整外部功能模块即可,这将大幅度降低技术升迁的代价。这种模式也可以简单地概括为“核-壳”分离。

   
基于UGC,可以封装各种GIS软件产品,包括组件式GISInternet GIS、桌面GIS(2)。其中组件式GISInternet GIS既可以使用.NET技术封装,也可以使用Java技术开发。即使以后出现新的组件技术或高级开发语言,也可以基本不修改UGC,而通过重新封装人机交互接口的方式提供新的组件式GIS或其它GIS软件平台。由于这些软件产品具有同一个内核,因此内核功能升级后,基于其上的各种软件产品都得到同步升级,大幅度减少了软件维护的代价。

 

 

    UGC除了要求保持相对稳定以外,还需满足三个条件:首先,UGC必须支持多种操作系统;其次,UGC必须能被多种程序开发语言调用,以封装各种语言版本的GIS软件产品;最后,UGC必须有很高的运行效率,以满足复杂空间分析运算和大数据量处理的性能要求。

    Java
是一种在跨平台方面有很强优势的开发语言,实际上已经有一些企业基于Java编写了GIS软件,但Java在性能方面天生的不足影响了基于Java内核的GIS软件的进一步发展,因为,与一般的信息管理系统不同,GIS应用系统不仅处理数据量大,而且分析算法复杂,对性能要求很高。此外,基于Java的组件在被包括.NET在内的其它开发语言调用方面也存在不足,因此Java不适合作为UGC的开发语言。

   
有的厂商试图基于COM组件来构造适应当前技术变化的GIS软件平台,他们在现有的使用COM编写的组件式GIS平台上,用Java封装了Java组件的开发接口,用.NET封装了.NET组件的开发接口,这样来实现对包括Java.NET在内的多种二次开发语言的支持。但.NET语言和Java语言调用COM接口在开发平台的性能方面存在一定的风险。如前文所述,COM技术本身存在诸多缺陷,而微软也将停止对COM的进一步发展,把内核建立在这样一种技术基础上存在更大的风险。而该方案的跨平台策略则更令人担忧。为了实现基于COM内核的跨平台能力,采用第三方为其提供的建立在Java虚拟机上的中间层,把COM组件调入Java虚拟机运行,而Java虚拟机可以支持多种操作系统,这样就实现了COM内核的跨平台能力。可以想象一下,如果使用这样的平台在Linux上用Java语言开发一个应用系统,那么调用的顺序将是这样的:Java二次开发语言GISJava组件基于COMGIS内核第三方中间层Java虚拟机操作系统,如果要让这样的一个GIS平台的性能令人满意,GIS厂商还需要付出很多努力。

   
综合考虑多种因素,C语言或C++语言无疑是目前最佳的选择。几乎所有的操作系统都支持C/C++,如果说Java程序的特点是“编写一次,到处运行(Write once, run anywhere)”,用C/C++编写的程序则具有 “编写一次,到处编译 (Write once, compile anywhere)”的特点。C/C++不仅具有支持多种操作系统的特点,而且成熟、标准,还可以被其它多种开发语言调用,更重要的是C/C++程序的效率远高于Java

   
在共相式GIS软件中,为了支持多种数据格式,仍然需要采用多源空间数据无缝集成技术的思路,在UGC中不直接实现访问数据文件或数据库的功能,只建立访问数据的接口标准和技术框架,在面向对象的高级开发语言中,这个接口标准和框架具体体现为一组定义了大量虚函数的基类(Base Class),称为虚拟空间数据引擎(Virtual Data Engine, VDE)。具体处理数据访问功能的代码在UGC外围实现,可以从基类派生出一组类,实现基类中定义的各种函数接口,成为一个数据引擎(Data Engine, DE)。每增加一种数据格式,可以按照上述方法实现一个新的数据引擎,那么GIS软件的核心代码无需改变,就实现了一种新的数据格式的支持。

 

 

 

    在不同的操作系统中,图形可视化的技术也有非常大的差别,实现对多种操作系统的支持,必须解决在不同操作系统上的可视化问题。这个问题的解决思路类似于多源空间数据无缝集成。首先,在UGC中建立一个虚拟可视化引擎 (Virtual Visualization Engine, VVE),然后基于不同操作系统开发具体的可视化引擎 (Visualization Engine, VE)。如在Windows操作系统上基于GDI技术,开发面向Windows的可视化引擎。以此类推,可以基于X11技术,开发面向UnixLinux的可视化引擎 。