开源网络地理信息系统的技术体系与研究进展
2022-08-09木啸林牛坤龙蔡世荣杨现坤王晋年
木啸林,牛坤龙,蔡世荣,杨现坤,王晋年,2
1.广州大学 地理科学与遥感学院,广州 510006
2.广州大学 遥感大数据智能应用创新中心,广州 510006
空间数据是地理学研究的重要组成部分,基于网络的空间数据共享、可视化和分析可以极大促进空间数据的应用。地理信息系统(geographic information system,GIS)软件为这些专业需求提供了有效的解决方案。商业GIS软件可以提供大多数的GIS功能,且自家软件功能模块间兼容和互操作性比较强。但是,其昂贵的采购成本使得很多公益性或研究性的研发项目无法使用。免费开源软件(free and open source software,FOSS)可以满足这些项目的研发需求,是近年来比较流行的解决方式。
FOSS是指软件创作者遵循开源协议,将源代码部分或全部公开,允许用户使用、研究、更改,不受许可证限制的免费软件[1-3]。自开源软件运动以来,FOSS发展迅速,目前已有80%的软件使用了开源方式进行开发[2]。开源网络地理信息系统是其发展的主要方向之一。20世纪90年代开源思想在GIS领域萌芽,国内外诸多科研院所开始进行GIS软件开源尝试。2006年,国际开源地理空间基金委(open source geospatial foundation,OSGeo)成立,与此同时,国内也开始了对FOSS软件的应用研究,比如,孙剑在2006年对FOSS软件的体系架构进行了梳理[4],冯宇等基于MapServer中间件开发了佛山干线公路网用地控制规划系统[5]。2014年OSGeo中国分中心成立,极大促进了我国FOSS的发展。基金会也从最初的几个项目逐渐发展至涵盖前端地理信息渲染平台、中间件及各类企业级地理空间计算平台等数十个门类的开源地理空间项目[6]。当前,可从OSGeo中国分中心网站上检索到的GIS软件有242个。30多年来,FOSS GIS取得长足发展,现已形成完整的产品线。
相较于传统的商业GIS软件,FOSS GIS软件免费开源,无需授权即可使用;FOSS软件兼容性强,支持绝大多数的操作系统;扩展性强,允许用户创建和管理自己的插件;更新及时,一般每个季度会发布一个小版本且对于软件问题反馈及时高效。但FOSS项目由于经费和人力资源限制,一般只能实现某一项功能[7],因此,使用FOSS进行GIS开发需要开发者综合多个FOSS项目。大量的FOSS项目可能会使开发者难以取舍,所以对这些项目的基本功能及特点进行梳理十分必要。
当前,国产开源WebGIS软件应用较少,尚未得到广泛推广,且各软件自成体系,应用潜力还未得到有效挖掘。为全面了解FOSS的基本特点和功能,本文较为系统地梳理了当前文献中常用的开源网络地理信息系统软件,详细介绍了开源WebGIS的技术体系、功能特征和应用领域,并在此基础上归纳当前开源GIS的研究进展与发展趋势,以期为中国地理信息系统软件发展规划和技术应用提供技术参考和经验借鉴。
1 开源WebGIS软件综述
目前在全球范围内科研和行业应用领域都已开始大量使用开源WebGIS软件对空间数据进行获取、修改、存储、分析和可视化。本文主要关注应用在地理学和遥感科学等领域的开源WebGIS软件。这些软件大多基于开放地理空间信息联盟(open geospatial consortium,OGC)标准开发。OGC是制定FOSS软件数据和服务标准的非盈利组织,其制定的标准包括,地理标记语言(geographic markup language,GML)、网络处理服务(Web processing service,WPS)、网络地图服务(Web map service,WMS)、网络要素服务(Web feature service,WFS)、网络地理场数据服务(Web coverage service,WCS)等,GIS厂商依照标准开发可实现对不同空间数据的互操作。
一套常规的WebGIS架构主要由三部分组成,数据库、GIS服务器和Web服务器(图1)。其中,数据库用于存储地理信息数据,如矢量数据、栅格数据等。GIS服务器用于向前端提供WMS、WFS、WCS等服务。Web服务器则用于调取GIS服务器所提供的OGC标准服务,并在前端进行渲染展示。
图1 常规开源WebGIS软件体系架构Fig.1 Open source WebGIS software framework
根据不同软件的技术特点和核心功能,本文将开源WebGIS软件分为四大类分别阐述:用于存储数据的空间数据库软件、用于数据共享的空间数据发布软件、用于空间数据制图的可视化软件及用于地理处理和算法操作的空间分析软件。
1.1 空间数据库软件
空间数据库将地理数据存储在一个文件系统中,该系统可以存储数百万的大型空间数据集,并可以高效查询、分析和更新这些数据[8]。许多空间数据库是对现有结构化查询语言(structured query language,SQL)数据库的扩展,实现了OGC的简单要素标准(simple feature standard,SFS),用于定义空间对象的表达方式。当前支持空间查询语言的开源数据库主要有PostGIS、SpatiaLite和MySQL Spatial等(表1)。
表1 常用开源空间数据库特点及应用示例Table 1 Summary of spatial database features and examples in literature
1.1.1 PostGIS
PostGIS是对象关系数据库PostgreSQL的空间数据库扩展,在开源空间数据库中提供了最广泛的OGC-SFS支持[8]。它实现了对地理对象的支持,并融合数据库系统与空间数据管理,使用户可以在数据库内核中实现空间分析等操作[28]。PostGIS集成了R-tree空间索引技术,以加快空间数据查询速度;并结合GDAL类库来支持各种栅格格式读取与分析。此外,PostGIS还提供一个大型空间数据库函数库(2.1版中约有400个操作函数),用于实现矢量和栅格数据的基本分析、矢量数据和栅格数据之间的相互转换及投影转换等功能。
1.1.2 SpatiaLite
SpatiaLite是SQLite数据库的空间扩展[8],简单、易用,只有几百KB大小。它通过使用GEOS的几何库,PROJ.4、LIBICONV等类库来实现OGC-SFS、坐标转换、多种编程语言支持等功能;通过集成R-tree空间索引机制来高效查询和分析矢量空间数据;通过创建抽象数据类型Geometry字段来存储和管理矢量数据[21,29]。相较于PostGIS,SpatiaLite更像传统的关系型数据库,当前仅支持矢量数据,并且更适合单机操作,在处理并发访问或者基于网络访问操作时能力比较有限[30]。
1.1.3 MySQL Spatial
MySQL Spatial是MySQL数据库的空间扩展,实现了OGC-SFS标准。它支持GEOMETRY(空间要素类型基类)、POINT(点)、CURVE(曲线)、SURFACE(面)等几种空间几何数据,不支持栅格数据[31]。同PostGIS和SpatiaLite一样,MySQL Spatial也提供了数据库操作函数库。5.7版中约有90个函数,但其函数均假设在二维平面上进行空间操作,并不考虑空间坐标参考系统。
1.2 空间数据发布软件
开发者可以通过空间数据服务器将空间数据向用户发布,促进数据交流与共享。这时,空间数据服务器的作用是以友好的格式和方式传递空间数据,方便客户端解读和显示空间数据。当前主流的开源地理空间数据发布软件有MapServer、GeoServer、deegree和Geomajas(表2)。
表2 常用空间数据发布软件特点及应用示例Table 2 Summary of geospatial data server software features and examples in literature
1.2.1 MapServer
MapServer是用C语言编写的通用网关接口(common gateway interface,CGI)程序,兼容多种操作系统[51]。它提供了2种工作模式:CGI和MapScript,一般选用CGI模式进行应用系统研发[35]。开发者亦可选用MapScript应用程序编程接口(application programming interface,API)配置服务器,并以执行脚本的方式与服务器交互。MapServer通过集成GDAL类库实现多种栅格和矢量数据格式的访问;通过使用Mapfiles文件配置数据发布服务;通过支持PostGIS数据库实现空间数据的存储和查询,并基于kamap、MapLab、CartoWeb等一系列客户端JavaScript API来实现对地理空间数据的表达与传输[52]。
1.2.2 GeoServer
GeoServer是基于Java开发的空间数据服务发布软件,是OpenGIS Web服务器规范的J2EE(Java 2 platform enterprise edition)实现,可兼容WMS、WFS、GML等WebGIS相关服务[53]。GeoServer允许用户插入、删除、修改、查询、发布特征数据,以便在用户之间迅速共享地理信息。GeoServer提供了图形化的Web配置管理工具,方便开发者通过采用表述性状态转移(representational state transfer,REST)接口以编程的方式更加灵活地配置服务器[54]。此外,GeoServer还实现了对OpenLayers和Google Earth插件的支持,并支持GeoWebCache自动空间数据缓存、瓦片制图及空间数据库访问。GeoServer访问空间数据是基于GeoTools类库实现的,它严重依赖GeoTools类库[55]。
1.2.3 deegree
deegree是用Java编写的空间数据发布软件,实现了WMS、WFS等OGC标准。deegree的功能由Servlet组件实现,现有绝大多数Web服务器均支持Servlet技术,因此可以很方便地将其部署到服务器上。它也提供了一个类似于REST的编程配置界面,能以编程方式配置服务器。此外,deegree还支持如PostGIS、shapefile和OGC-GML格式等多种数据源,动态地产生点、线、多边形等地理空间数据[56]。
1.2.4 Geomajas
Geomajas是一个用于建立WebGIS应用的框架,具有显示和管理复杂地理空间信息的能力。它基于谷歌网络工具(Google Web tools,GWT)构建,为浏览器提供了一个完整的映射API。Geomajas提供了服务器端平台GWT Server实现空间数据的集成,它允许用户从客户端浏览器中控制、管理发布空间数据,并提供了一套功能强大的模块,帮助开发者构建所需的地理信息系统应用程序。Geomajas的主要功能包括模块化结构、集成的客户端服务器架构、高级几何和属性编辑与验证、明确定义的API等[49]。
1.3 空间数据制图与可视化软件
空间数据需要制图与可视化软件实现网络环境下可视化显示。可视化时,制图软件获取后台空间数据服务器提供的WMS、WFS和WCS服务,对数据渲染并在浏览器中显示。当前,主流的开源网络地图制图和可视化软件有OpenLayers、Google Earth、QGIS Server、Leaflet等(表3)。
表3 常用空间数据制图与可视化软件特点及应用示例Table 3 Summary of mapping libraries features and examples in literature
1.3.1 OpenLayers
OpenLayers是由MetaCarta公司开发的JavaScript包,是用于构建网络地图应用的类库,可以在网页上交互式显示地图[77]。OpenLayers通过集成WebGL标准和Canvas 2D图形技术获得高效的可视化性能。它可以渲染显示各种格式的地理空间数据,如GeoJSON、GML及OGC Web服务等[59,78]。OpenLayers提供在地图上绘制和编辑的数据接口,允许开发人员使用各种基础地图,包括Open Street Map、Bing Map、MapQuest等[79]。此外,OpenLayers的API实现了类似Ajax的无刷新更新页面,与用户交互更便捷,减少了用户的等待时间。当前OpenLayers尚未支持三维显示,但是无需任何插件及插件附带的各种限制仍是它的优势[8]。
1.3.2 Google Earth
虽然Google Earth并非开源WebGIS软件,但其对普通用户免费,并且支持多种开源地图数据可视化。由于版权问题,Google Earth不能用于商业用途,但个人用户每天最多可以请求获取25 000个地图[8]。用户可通过Google Earth插件使用Keyhole标记语言(keyhole markup language,KML)在三维虚拟地球环境中可视化空间数据。但上述操作的前提是需要用户安装相应浏览器插件,而有些操作系统或浏览器不支持该插件。因此,谷歌Earth API已于2015年12月14日停用该Web插件。
1.3.3 QGIS Server
QGIS(原称Quantum GIS)是基于Qt开发的开源桌面GIS软件,2009年首次发行。QGIS的底层语言为C++,通过集成GDAL、Qt等开源类库,用户可进行常规的遥感影像处理流程[67,69]。QGIS支持多种数据库的访问,拥有丰富全面的算法库,每个算法都被封装,有明确的输入输出,方便用户跨平台开发[70]。QGIS提供了QGIS Server插件,开发者可以将自己的QGIS可视化项目作为WMS一对一地发布在网络上。QGIS Server是开源的WMS 1.3.0,WFS 1.0.0实现。它使用QGIS作为GIS逻辑和地图渲染的后端,实现了高级制图功能。当前,用户可以从QGIS提供的代码开放平台、官方教程及演示中学习QGIS、QGIS Server操作,进行开发。
1.3.4 Leaflet
Leaflet是一个易用轻量的开源JavaScript库,代码量小,只有39 KB,但具备开发网络地图的大部分功能,适用于中大型WebGIS系统开发。Leaflet的设计坚持简便、高性能和可用性好的原则,无需部署,可被程序直接引用。Leaflet支持插件扩展,开发者可以通过集成多种插件来满足地图查询、分析及渲染等操作需求[75]。Leaflet默认采用“L”作为命名空间,核心为Map类,Map是一个地图容器,可以在其中放置地图控件,添加图层、标注、符号,绑定事件等[80]。
1.4 空间分析软件
在WebGIS应用程序开发中,空间分析操作可通过使用OGC网络处理服务(Web processing service,WPS)规范来实现。WPS规范定义了三种强制操作,以实现网络上的空间信息处理。Get Capabilities操作允许客户端请求和接收描述服务器功能实现的元数据文档;Describe Process操作返回有关流程需求的详细信息,如输入输出参数及允许的数据格式等;Execute操作使用用户提供的输入参数调用由WPS实现的特定流程,并将流程处理结果返回客户端。开发者可以将WPS搭建在专门的空间数据处理服务器上来实现空间分析功能。前文所述的deegree和GeoServer虽也支持WPS,但很多现有使用deegree和GeoServer的文献并未明确言明是否使用其网络处理功能,因此本文未总结以上二者所涉及的应用。常用网络处理服务软件如表4。
表4 常用空间数据处理软件特点及应用示例Table 4 Summary of geoprocessing software features and examples in literature
1.4.1 52°North WPS
52°North WPS软件是全面支持OGC-WPS标准的典范。它实现了WPS 1.0标准,支持多种地理数据格式访问,如GeoTiff、Arc Grid、Shapefile、GML等,可以同时在线处理多种数据格式,并将结果反馈给用户[82]。它提供了一个可扩展、可集成的开发框架,允许开发人员把自己开发的R、Python脚本、Java程序以及地理处理算法等发布为网络服务。此外,52°North WPS还可与现有的地理处理库集成,如GRASS、Sextante和ArcGIS Server等,且集成开发后实现的地理处理功能,无需进行任何修改,拿来即用,极大地降低了应用开发难度。
1.4.2 PyWPS
PyWPS是唯一基于Python的WPS实现,提供在Python中创建WPS的环境。与其他WPS服务一样,PyWPS本身并不处理数据,而是提供服务器与本地数据操作工具(如GRASS、GDAL和R脚本)之间的连接,为WPS输入和输出提供简单的接口[30]。其开发自定义流程需要创建一个Python文件来实现业务逻辑,定义服务元数据和配置参数。开发PyWPS的过程不需要Python语言本身和WPS标准核心概念以外的额外知识,更加适合缺乏编程高级培训的个人开发者使用。
1.4.3 ZOO-Project
ZOO-Project是用C、Python和JavaScript编写的WPS服务,实现了WPS 1.0和WPS 2.0接口标准,能够在线处理地理空间或非地理空间数据。它的核心处理引擎ZOO-Kernel允许用户基于可靠的软件和类库来执行诸多现有的ZOO服务,并允许用户从新的或现有的源代码创建自己的WPS服务。ZOO-Project提供了另一种网络处理服务实现方式来促进网络处理服务的发展。它支持20多种编程语言,简化了新服务作为独立模块的开发,并提供了一个原始的方法来设置WPS服务器,使网络处理服务更容易实现[94]。
2 WebGIS开发工具
WebGIS应用一般需要设计开发Web界面作为与后台软件组件的交互入口。因此,一般的WebGIS应用都配置一个Web服务器并设计基于HTML的Web页面作为地图数据和信息显示的容器,用于和用户进行操作交互。Web服务器上的脚本语言通常需要承担数据库交互、与其他软件和其他Web应用的逻辑交互等任务。因此,合适的开发语言、简洁的开发框架、适当的内容管理系统,对WebGIS应用开发至关重要。本章主要回顾文献中WebGIS应用开发时常用的开发语言、网络框架和内容管理系统。常用WebGIS开发工具如表5。
表5 常用WebGIS开发工具Table 5 Summary of Web development software used by Web Apps in literature
2.1 开发语言
在Web开发中,编程语言可以处理高级逻辑,使网站更加动态,而不仅仅简单地返回静态HTML。例如,当用户提交操作请求时,编程语言可以执行模拟分析任务或处理复杂的可视化任务。事实上,只要编程语言提供了处理HTTP请求的机制,就可以实现以上目的,用于WebGIS开发。但由于不同编程语言提供的Web开发类库丰富程度不同,使得开发难易程度和时间开销不同,因而才有WebGIS开发语言的划分。
2.1.1 PHP
超文本预处理器(hypertext preprocessor,PHP)是一种适用于Web开发的开源服务器端脚本语言。其语法吸收借鉴C、Java、Perl等语言,易于学习和实践。PHP嵌入在网站的HTML页面中,用户请求网页时在服务器上执行代码。它通过ODBC类库支持不同数据库,并提供PDO数据库抽象层[51]。PHP官方提供了诸多功能扩展模块,并添加常见的Web功能(如管理会话和cookie、用户身份验证和文件上传等)使开发更加高效。目前,国内比较主流的Web地图服务,如天地图、高德地图、腾讯地图和百度地图都提供了PHP语言的开发示例,支持用户快速搭建WebGIS应用程序。
2.1.2 Java
Java是一种基于类的面向对象编程语言,广泛应用于企业级Web应用开发和移动应用开发。Java继承了C++中的面向对象技术,摒弃了指针、运算符重载和多重继承特性,增加了垃圾回收器等功能,使得基于Java开发更加灵活、稳健。在WebGIS应用开发中,开发人员一般使用J2EE(Java 2 platform enterprise edition)和JSP(Java server pages)进行程序开发。现行大部分基于Android的WebGIS软件都是使用Java语言开发的[30]。Java技术免费、开源的特性,为创建和运行大规模、多层、可扩展、安全可靠的网络应用程序提供了强大的跨平台开发环境,极大地促进了Java语言在WebGIS开发领域的普及和应用。
2.2 网络应用框架
网络框架是为构建网站提供的可编写脚本的方法,目的是减轻开发者在设计静态网站时编写低级代码的任务量。例如,之前需要设计多个静态网页才能实现的任务,通过网络框架编写动态脚本可以集成在一个页面内完成。网络应用框架通常提供数据库访问、用户管理、会话控制及网络安全控制等功能。大多数网络应用框架都遵循软件系统设计的模型(model)—视图(view)—控制器(controller)的MVC开发范式。MVC开发范式实现了动态的程序设计,使开发者后续对程序的修改和扩展更加简便,降低了程序设计的复杂度,方便开发者进行程序开发。
2.2.1 Python网络应用框架
Python的SciPy和NumPy等科学计算模块及简单易用的特性,使其成为流行的科学计算脚本语言[110]。当前,Python驱动的网络应用框架(如Django、Flask、Tornado、Web2py和Pylons等)是构建地理科学网络应用程序的首选。但是,基于Python的网络应用框架的默认功能差异很大。例如,Django提供了大量默认可用的功能,使开发更加简单方便,而Pylons仅提供少量默认功能,但却为开发人员提供更大的开发灵活性。随着近年来基于Python的开发愈加流行,采用Python网络应用框架的WebGIS应用也将越来越多。
2.2.2 CodeIgniter
CodeIgniter是一个基于MVC开发范式,采用PHP语言开发的Web应用框架,性能卓越,配置简单。CodeIgniter框架提供了完整的数据库操作、表单操作和数据验证、安全控制、会话管理和文件上传等功能。对于已使用PHP的WebGIS应用,想要使用结构化框架的方法进行功能扩展的任务来说,CodeIgniter是一个比较好的选择[111]。
2.2.3 Ruby on Rails
Ruby on Rails,简称Rails,是采用Ruby语言编写的Web应用框架。它严格按照MVC结构开发,框架自身简单,实际应用开发代码量少[112]。许多其他Web应用框架都曾受到Rails开发思想的影响。据统计,有数以万计的网站是基于Rails开发的,包括比较流行的Twitter和GitHub网站等[112]。
2.2.4 客户端开发框架
为避免浏览器和服务器之间频繁交互造成的延迟,一些Web应用被开发成完全在客户端(Web浏览器)上运行的纯JavaScript应用程序。用户初次请求会传递给服务器,从服务器下载应用程序的源代码,而后启动Web应用程序。Walker等在2014年开发了客户端Web应用程序,运行基于Web的交互式河流模型WIRM[102]。该Web应用是使用Backbone.js开发的JavaScript MVC客户端框架。在服务器端,该程序使用Django处理用户认证和数据库交互。
2.3 内容管理系统
内容管理系统(content management system,CMS)是一种位于Web服务器和后端办公系统之间的软件系统。内容管理系统中的“内容”涵括除地理数据外,其他任何形式的数字信息组合,如文本、Web页面、视频、声音、XML文件等。基于CMS的WebGIS应用只需在浏览器中使用有限代码和界面交互即可完成网站构建。CMS的用户界面具有前端和后端结构,用户访问前端进行交互,管理员访问后端进行维护和开发,这种类型系统非常适合非技术管理员维护网站。在WebGIS应用开发完成后,只需对一般人员进行简单的网站维护和数据更新培训即可承担网站管理工作。文献中常用的开源CMS系统主要有Drupal、CKAN等。
2.3.1 Drupal
Drupal是基于PHP语言编写的开源内容管理系统。它提供了基于浏览器的图形用户界面用于开发WebGIS应用,以此来最大限度地减少代码编写量[107]。Drupal本身仅提供了基本功能,开发者可以按照自己的需求安装相应模块库的模块来为网站添加功能。此外,开发者还可以使用PHP调用其他Drupal开发者提供的模块来快速创建自己的模块。
2.3.2 CKAN
CKAN是建立在Pylons Python框架上内容管理系统。和Drupal主要用于网络应用的页面可视化不同,CKAN使用内置数据管理系统托管地理数据集[109]。CKAN的系统以“开箱即用”的方式托管数据,并创建丰富的元数据支持对地理数据信息描述[42]。同时,CKAN还提供了一组用于构建自定义扩展的Python编程接口及以编程方式上传和下载数据的REST API。当前,美国政府、加拿大政府及开源非洲等地理数据共享网站都是采用CKAN框架开发的。
3 讨论
免费和开源网络地理信息系统软件的独特优势和技术特点促使其在实际中应用越来越广。相较于商业GIS软件,用于地理空间的FOSS软件完全免费、兼容性强,支持多种操作系统,且开发过程中几乎无需考虑软件成本问题。FOSS完全开源,开发者可通过研究源代码了解WebGIS相关技术的底层实现方法。一些开源WebGIS软件还提供了独立的插件管理器,允许开发者自由分享插件。开源WebGIS软件中许多插件由一线科研工作者研发,涉及领域内前沿学术问题,并且,诸多经典模型在软件中都有完备模块,可以帮助刚入门的小白节省编程实现模型所带来的时间消耗,提高科研和学习效率。
本文主要介绍文献中常用的开源WebGIS开发技术,并相应列举了目前已公开发表的85个项目,其中73个近十年发表,35个近五年发表。本文总结的开源软件项目虽不完全,但也在一定程度上反映,网络应用程序作为地球科学建模和数据的媒介越来越受关注。文中所列网络应用程序质量和功能差异很大,一些网络应用程序作为原型或演示系统开发,如Feng等在2011年开发的湿地生态在线服务模型GeoMSP;另一些则作为全功能数据和建模服务开发,如USGS地理数据门户网站。这些网络应用程序涉及生态学、地质学、气象学、测绘学乃至于火星表面信息处理等诸多领域。此外,综述中的WebGIS应用至少包含一个FOSS软件组件,大多数采用多个FOSS项目来满足各种空间数据操作和管理的需求。本章将按先前划分的类别,对比分析FOSS4G程序并剖析它们的技术优势。
3.1 空间数据库软件比较
在本综述的WebGIS应用程序中,有19个使用了带有空间数据扩展的SQL数据库。其中,PostGIS因为其功能全面,并发访问能力强等特性在空间数据库应用中占有优势,是绝大多数WebGIS应用开发的首选。SpatiaLite因为SQLite对于Web环境的支持较弱,因此使用率较低。MySQL在一般网络应用开发中的使用率较高,但目前在WebGIS应用开发中使用较少。
PostGIS的优势在于:PostGIS对栅格数据具有广泛的支持,而SpatialLite和MySQL Spatial则不支持栅格数据。PostGIS提供了超过400个空间数据操作函数,可以对栅格和矢量数据执行空间分析;而MySQL Spatial的空间函数库只有大约90个函数。PostGIS支持各类空间坐标参考系统,而SpatialLite和MySQL Spatial的空间分析函数忽略空间参考,使用欧氏平面参与空间数据分析,降低了数据处理的精度。虽然当前PostGIS相较于其他空间数据库具有一定优势,但随着地理信息系统发展,MySQL Spatial可能会成为PostGIS的竞争对手,因为它作为互联网应用的标准数据库管理系统拥有庞大的用户基础。表6总结了文中所列空间数据库及其特点。
表6 空间数据库主要特征比较Table 6 Comparison of notable features of spatial databases
3.2 空间数据发布软件比较
在综述的WebGIS应用中,有23个使用空间数据发布软件。其中MapServer和GeoServer应用数目相差无几,均高于deegree和Geomajas GWT Server。比较来看,GeoServer和deegree提供了Web页面用于在服务器上做服务发布和数据配置,比MapServer基于文件的配置更加友好,操作更加直观。然而,MapServer允许开发人员通过MapScript在不同的编程环境中以编程方式配置,并且MapServer支持PHP、Python、Perl、Ruby、Java和.NET等多种语言。而GeoServer和deegree却仅可通过REST API配置。在性能方面,MapServer凭借C语言的开发基础,性能略优于GeoServer和deegree。在配置环境方面,Geomajas和degree配置较为复杂,需要有一定的开发经验才能定制界面或功能。上述四个软件中,degree的可视化和编辑能力最为有限,但如果用其分发数据,使之成为像GeoNetwork那样的目录服务,它仍是一个可用工具。表7总结了文中所列空间数据发布软件及其特点。
表7 空间数据发布软件主要特征比较Table 7 Comparison of notable features of spatial data publishing software
3.3 制图与可视化软件比较
在综述的WebGIS应用程序中,有32个应用使用制图与可视化软件。其中,OpenLayers凭借其优秀的前端渲染能力成为应用制图与可视化软件开发的首选。Google Earth使用率高主要源自于Google地图服务的强大支持。且与OpenLayers和Leaflet相比,Google Earth具有提供三维可视化的优势。但在支持的数据格式方面,Google Earth仅限于KML或JavaScript API的数据。而OpenLayers和Leaflet则支持多种格式,包括KML、GML、GeoJSON、OGC制图服务(如WMS和WFS)等。另外,OpenLayers、Leaflet和Google Earth还允许用户在地图上以绘图的方式进行交互式输入。QGIS作为FOSS客户端程序,实现了OGC的各项服务,并依托丰富的开源类库,实现了媲美ArcGIS的功能,其QGIS Server插件可以方便地发布用户数据,在制图与可视化方面表现出色。表8总结了文中所列制图与可视化软件及其特点。
表8 制图与可视化软件主要特征比较Table 8 Comparison of notable features of mapping libraries
3.4 网络空间分析软件比较
在综述的WebGIS应用程序中,有16个使用空间分析软件。其中,52°North WPS安装简单配置容易,提供了大多数“开箱即用”的分析功能。它能连接Sextante和ArcGIS Server地理处理类库,并可调用Python、R及Java编写的自定义数据分析脚本,因此在开源WebGIS开发中应用较高。而PyWPS安装配置过程复杂,有必须安装的依赖项,且仅支持用Python和R编写的进程,实际开发中应用较少。ZOO-Project实现了以上二者的大部分功能,且相较于以上两者,率先支持WPS 2.0标准,虽然当前应用率不如前两者高,但其强大的兼容性可能会使其成为未来网络空间分析软件的主流。空间分析软件及主要特点总结如表9。
表9 网络空间分析软件主要特征比较Table 9 Comparison of notable features of spatial analysis software
3.5 WebGIS常用开发软件比较
GIS开发采用的软件比较混杂,但开发语言相对集中。在文中总结的26个WebGIS开发项目中,Java是WebGIS开发的首选。原因主要有:一是实现OGC标准的许多软件由Java实现,如GeoServer、deegree、52°North WPS等。二是许多成熟的GIS开发框架均可与Java集成,如GeoTools和JTS Topology Suite等。PHP是当前最流行的网络开发语言,是WebGIS应用开发的第二选择,有着巨大的群众基础。此外,Python也是WebGIS开发者的常见选择。Python开发社区提供了丰富地理数据处理开发包,方便用户按需开发。
大多数Web开发框架都提供了网络开发的基本功能,如用户管理、数据库交互、创建动态HTML和文件上传处理等。WebGIS开发软件之间的主要区别在于Web开发框架解决每个开发任务的方法。比如,Drupal和CKAN提供了网络用户管理系统原型,可以实现登录、注销、忘记密码和用户个人资料页面等功能。Django也提供了一个用户管理系统原型,但是创建登录、注销和用户配置文件网页等任务都需要开发者二次开发。以上两种方法各有优劣,前者基础功能较多开发方便,定制能力弱;后者功能较少,需要靠外部模块集成开发额外功能,但定制能力强。在Web开发时,框架的选择主要取决于WebGIS项目的需求、项目复杂度及开发人员的偏好等因素。此外,开发者在选择Web开发框架时还需考虑开发团队编程经验、地理数据库支持能力、项目规模及项目所需功能等,尤其是涉及到网络空间分析功能时更应该慎重选择Web开发框架。表10总结了文中涉及的FOSS Web开发软件及其主要技术特点。
表10 WebGIS常用开发软件及其主要技术特点比较Table 10 Comparison of notable features of WebGIS development software
3.6 国内开源WebGIS产业发展与典型应用分析
目前,全球97%的软件开发者和99%的企业使用开源软件,全球70%以上的新立项软件项目采用开源模式。在开源为软件工业带来变革的同时,也促进了WebGIS的发展,尤其当前开发基本采用Java、PHP等开源语言,几乎主导了WebGIS应用开发。当前国内较为主流的云计算平台(如阿里云、华为云和腾讯云等)都提供PostGIS、MySQL等开源数据库架构与开发业务。MapServer和GeoServer是当前应用最为广泛的空间数据发布软件,其充分兼容国内主流的地图服务(如天地图、百度、高德地图服务),因而诸多WebGIS应用使用其进行数据发布和共享。Openlayers、Leaflet等制图可视化软件发展相对成熟,已广泛应用于移动端地图应用中,如高德地图手机端APP深度集成Leaflet来实现地图可视化。而52°North WPS等基于WPS的空间分析软件仍处于探索阶段,应用率不高。可以看出,以FOSS为开源的WebGIS软件已经有效促进了国内地理信息产业发展。
但就国内当前应用状况而言,基于FOSS的国产WebGIS软件仍然相对较少,技术和应用潜力有待进一步挖掘。国内针对开源WebGIS的开发都旨在解决一些具体应用问题,比较典型的应用包括:国家自然保护区信息服务系统NRS,青藏公路冻土灾害信息系统,JUST京东城市时空数据引擎等。这些典型应用功能较为单一,可在此基础上进一步深化完善,为各类WebGIS应用提供技术支持。
4 结语
本文从空间数据库、空间数据发布、制图与可视化和空间分析等方面对当前公开发表的85个开源WebGIS应用程序进行了总结,梳理了开源WebGIS应用开发中常用的FOSS软件和主要技术。当前国内开源WebGIS开发还处于早期阶段,其技术和应用潜力仍有待进一步挖掘,通过本文对FOSS软件及技术进行总结和归纳,可以使更多学者和技术人员了解开源WebGIS软件,促进国内开源WebGIS发展,推动国内GIS软件技术进步,形成可替代的国产开源WebGIS软件,促进技术自主创新和技术独立。但也需要看到的是,当前FOSS软件开发仍有很多技术问题亟需解决,如各个不同的FOSS软件自成体系,把不同软件充分集成依然是一个技术难点。