基于.NET 2.0的GIS开源项目SharpMap分析手记(十):开源空间信息软件体系与技术概述
粟卫民 http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:2007-6-15
转载自:西陆星 http://www.cngis.org/bbs/showthread.php?p=43668#post43668
所谓自由软件指允许任何人可以自由使用、复制、修改、分发的软件,但它不能保证免费获得的自由。自由软件在分发/获得方面是双模式的,就是说,可以免费共享,也可以商业买卖。
所谓开源软件指软件的源代码(软件程序的原始文件)是对任何人都完全开放的,即任何人在有关许可协议方式的规范下,具有获得、使用、复制、修改和分发源代码的自由,但为了保护初始源代码的完整性,有关许可协议规定:原创者对源代码修改者的后续行为的自由有一定限制。自由软件和开源的软件具有广泛的共同点, 在一般情况下我们统称为“自由开源软件”;考虑到当今它们愈来愈广泛地参与务实的商业活动,我们也可将共简称为“开源软件”。
国际地理空间开源基金会(以下简称为OSGeo)中国中心于去年9月19日在北京成立,这意味着中国已经在开源空间信息软件发展方面, 走在了整个IT主流的前面,参加会议的共创软件联盟副理事长宫敏博士也称该基金会在中国中心设立分中心, 是在IT主流高科技的专业领域的一个成功典范。
开源空间信息软件的发展虽然时间不长,仅仅20年左右的时间,但造就了如GRASS、OSSIM这样功能突出、性能异常优越,不亚于任何一款商业软件的标志性项目,更有如WorldWind、MapGuide等用户体验良好、方便用户使用的前端平台。
截止到2006年8月11日,通过互联网可以寻找到的开源空间信息软件项目已经达到229个,在最新的freegis项目中已经可以寻找到的空间信息软件项目更是达到306个。如此繁多的项目对于初学者甚至对于空间信息领域的专家也很难以做到一览众山小。
从宏观上,分别从开发语言角度和专业应用角度来剖析目前国际最有影响力的若干个空间信息系统软件的特性,分析其内在脉络及联系,通过与部分商业软件架构的对比,希望可以帮助读者从诸多开源空间信息软件中条理出清晰的思路。
从开发语言角度看开源空间信息软件体系
从软件底层的开发语言角度讲,开源空间信息软件可以被独立的分为以下三种技术体系门类,在每种分类体系内部,开发人员往往是基于不同的项目交叉工作的,所以这种分法仅仅是方便了熟悉某种开发语言的程序员,对于用户和应用人员而言, 意义不大。
“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格式互操作的学生项目。
勾勒未来
通过对诸多项目的介绍,希望读者清晰了解哪些项目是自己的工程人员可以快速掌握的? 哪些项目是可以解决自己应用工程难题的? 哪些项目是可以替代已有商业软件的?
通过这种对比和思考,相信读者能对国际目前的开源空间信息技术有更加清晰的了解,并可能参与其中。