从软件底层的开发语言角度讲,开源空间信息软件可以被独立的分为以下三种技术体系门类,在每种分类体系内部,开发人员往往是基于不同的项目交叉工作的,所以这种分法仅仅是方便了熟悉某种开发语言的程序员,对于用户和应用人员而言, 意义不大。
“C”派系项目
“C”派系项目包括了UMN MapServer、GRASS、GDAL/OGR、OSSIM、Proj4、GEOS、PostGIS、 QGIS、MapGuide OpenSource,以及OpenEV等。同时,还包括了使用C库的各类脚本语言的程序,包括Python、Perl,以及PHP不同的语言。
“C”派系是三大派系中的老大,最成熟也是拥有开发项目最多的派系。这与C语言本身的发展历史,以及与Unix渊源都是分不开的,因为其语言的强大和优异性能已经吸引了大量活跃的开发社区和开发者个人。
概略了解“C”派系中最有代表性的几个大型项目,其中有些项目已经成为诸多其他项目的通用基础,比如空间数据格式的支持坐标投影转换功能,这点也是与空间信息与通用软件项目的重要区别。
GDAL/OGR类库目前是两个不同的组成模块,GDAL提供了一整套读写不同栅格数据格式的功能的抽象类库,而OGR则是一个读写诸多矢量数据格式功能的抽象类库。
然而因为历史的原因,两大类库是用同样一个生成系统进行维护的,最重要的是GDAL/OGR的作者是同一人,该人目前也是OSGeo的会长 Frank Warmerdam,其在OpenSource Geospatial领域早已大名鼎鼎。许多程序员都是拜读他的代码理解空间信息软件精髓的。
目前GDAL支持达50多种栅格数据格式,几乎覆盖了所有的商业应用软件的格式,OGR已经支持包括著名的ESRI Shapefiles、 ArcSDE,以及MapInfo、Oracle公司在内的诸多商业公司的矢量格式。
数据是软件的血液,空间信息产业更是如此,海量数据在空间信息软件行业体现的最为明显,没有一套高效率的数据转换模型和类库很难完成异构数据的集成和融合,正是有了GDAL/OGR,构建在其之上的各类空间信息软件项目才有了生命力。
Proj4是一套开源的坐标投影转换类库,它可以完成在两套不同制图投影系统之间的转换,同样不同的椭球体或大地基准面之间也可以成功的完成转换。Proj4类库最早是由Gerald Evenden先生作为工具集为美国地质调查局撰写的,目前依然是由Frank Warmerdam先生进行维护和管理,Evenden依然活跃在邮件列表中,尽管他已经不再写代码但仍然提供最新的数学投影模型。
GEOS是“Geometry Engine, Open Source”的含义,其提供了OGC规范中简单几何要素对象操作的C++语言的实现,详细的规范可以在OGC网站上找到(“Simple Features for SQL”),具体的实现方法里面都有所描述。 拓扑模型的计算方法简单但是一般来讲很难得以实现。GEOS/JTS/NTS的算法则对于所有的空间谓词都是非常强壮的,同时在空间操作方面也非常完善。
GRASS、OSSIM、MapGuide OpenSource、PostGIS等项目有专文论述,本文不加以复述。
“Java”派系项目
“Java”派系项目主要是内核或前端平台由Java语言撰写的项目,包括了开发人员熟悉的GeoTools、uDig、GeoServer、 JavaTopologySuite、JUMP,以及DeeGree等。
在“Java”派系的世界中,许多独立的项目一开始都试图完成一整套体系结构的工具集合,例如OpenMap、GeoTools,以及 deegree。
目前,OpenMap项目仍然处于独立研发的状态,没有与其他想法发生融合、交叉。但是deegree和GeoTools项目已经决定逐渐融合到一起,另外最新的uDig桌面平台使用了同样的一套GeoServer和GeoTools底层支持类库和资源。
目前, JAVA世界中的开发人员目前都围绕着JTS拓扑工具集作为几何操作的基础类库,或者是基于其之上的第二个层次的类库 GeoTools。
JTS是目前开源JAVA GIS程序开发人员所有项目的核心几何类库。JTS提供了一整套遵循OGC简单几何对象规范的实现,与前面GEOS类似,所有的函数描述都是可以在“Simple Features for SQL Specification”找到的。
使得JTS不同于其他项目的也正是“空间谓词”与“空间操作”。空间谓词是比较两个空间对象并返回一个布尔变量值作为结果,它表明了存在于两个空间对象之间特殊的关系。
比如典型的空间谓词有Contains(), Intersects(), Touches(), and Crosses()函数等。JTS项目中对该些函数的实现是异常强壮的,即使是奇异几何对象或是临时的坐标系统运算也不能使其运算不正常或计算错误。目前绝大多数的商业软件仍然在最基础的空间谓词上出现问题,这正是JTS项目的重要意义。“空间操作”则主要是对两个几何对象进行计算并且返回一个新的几何实体。
比较典型的操作函数如Difference(), Union(),以及Buffer()等。JTS中的操作算法已经被广泛的经过了测试。“空间谓词”与“空间操作”之所以有着如此重要的意义主要是在于其非常难于编码实现,因为这个原因,JTS类库被各类开源空间信息软件项目广泛应用,使用 JTS,它们可以基于最新的规范的几何实体来完成,同时也拥有了复杂空间方法的实现。
GeoTools是也是遵循OGC规范的GIS工具箱。它拥有一个模块化的体系架构,这保证每个功能部分可以非常容易的加入和删除。 GeoTools目标是支持OGC所有的规范并且各类国际规范和标准。
GeoTools已经在一个统一的框架下开发了一系列的JAVA对象集合,其完全满足了OGC的服务端的各种服务并且提供了OGC兼容的单独应用程序。GeoTools项目由一系列的API接口以及这些接口的实现组成。开发一整套产品或应用程序并不是GeoTools的目的,但是其鼓励其他应用项目使用它以各类工作。
“NET”派系项目
“NET”体系框架目前是微软公司最新的企业级体系,其驾御在NET CLR之上包括了VB.NET、C++和C#等多种语言,众多的程序开发语言都是基于一套虚拟的设备完成工作和运转的,因此无论是用什么语言撰写,只要符合NET CLR规范并基于其运行的程序,我们都归为“NET”派系的项目范畴中。这其中包括了MonoGIS、Appomattox、NetTopologySuite、GeoTools.NET,以及SharpMap等。
PostGIS/PostgreSQL项目的标准原生接口libpq(C/C++)、PGSQL(C#语言撰写)和JDBC(Java语言撰写)可以被各种派系的软件完成各类工作,因其主要的目的是完成软件之间的互操作。
然而,因为PostGIS/PostgreSQL的内核是纯C语言撰写,同时依赖于多个基于C语言开发的GIS类库,所以将其归为“C”派系也就、非常正常可信了。另外,比如MapServer软件可以被Java开发者广泛的使用,这是通过使用JNI桥接技术实现的,目前通过OGC规范的WMS 和WFS协议也可以完成类似的工作。
“NET”派系是年纪最小也是内容最少的一个派系,虽然时间稍短,但我们仍然不容小看其发展前景,随着NET平台在全球的广泛应用,另外还有类似 MONO项目的蓬勃发展,Windows与Linux之间代沟逐渐变小,两者之间的互操作也是几代程序员的梦想,从上图中可以明显的看到NTS仍然作为 JTS在NET世界的替代占据着重要的位置,GeoTools.NET作为GeoTools的替代也非常的重要,基于这两个项目的MonoGIS目前是 Mono平台下的开源完整GIS。已经发布了Internet MapServer,OGC WMS实现和空间格式互操作的工具。另外一个非常年轻的项目 SharpMap也因为网络地图的发布做出了自己的特色。本专题另有专文会对SharpMap和MsSQLSpatial进行描述。
World Wind是美国航空航天局 (NASA)推出的,主要是通过Client/Server的架构,由World Wind在全球尺度下统一管理海量的遥感影像和GIS空间数据,是开源版的Google Earth。
目前World Wind拥有的数据包括 Blue Marble、Land Sat 7、SRTM、NASA SVS、MODIS、 GLOBE、USGS…等。目前,World Wind OGC WMS1.3.1的最新规范,可以获取最新的空间数据模型和模拟演示等,非常适合科研单位的研究人员、高校师生用于教学和研究。2006年,Google 在全球支持开源活动Summer Of Code中,就支持了WorldWind与 Shapefiles格式互操作的学生项目。
勾勒未来
通过对诸多项目的介绍,希望读者清晰了解哪些项目是自己的工程人员可以快速掌握的? 哪些项目是可以解决自己应用工程难题的? 哪些项目是可以替代已有商业软件的?
通过这种对比和思考,相信读者能对国际目前的开源空间信息技术有更加清晰的了解,并可能参与其中。