地理信息系统起源于20世纪中叶,至今已经有50多年的发展历史,形成了GDAL、SAGA、ArcGIS、MapInfo等多种开源或商业GIS软件和工具。为了方便不同GIS软件和工具之间地理空间数据的传递与交流,国际上形成了开放地理空间信息联盟(OGC)、开源地理空间基金会(OSGeo)等行业组织,制定了简单要素模型、Web服务模型等大量行业标准。目前,包括QGIS在内的绝大多数GIS软件都或多或少地支持OGC标准。
本节介绍这些常见的行业标准及相关概念,掌握这些概念对今后的QGIS学习大有裨益。
地理信息(GeoInformation)是指与地理环境相关的所有信息的集合,通常指由类别、数值、文字、图片、视频等表述的空间事物与现象,也可以是这些空间事物与现象之间的相互关系。数据是信息的载体,信息是数据的内涵。地理信息是一个抽象概念,地理空间数据(Geospatial Data)则是地理信息的载体,所有的地理信息必须通过地理空间数据来表达。
地理信息系统(GIS)就是用于采集、存储、管理和分析地理空间数据的工具。自从Roger Tomlinson在1963年首次提出并应用了加拿大地理信息系统(CGIS)以来,GIS经历了50余年的标准化与应用,如今已经成为地理学科中浓墨重彩的一笔,在一定程度上推动了整个地理学的发展。地理信息系统已经超越文字和地图,成为地理学的第三语言。目前,在地理学及其相关科学的研究中,许多分析和数据表达都不可避免地依赖于GIS软件。
GIS的根基在于地理学,地理学的核心是人地关系,其主要研究对象就是人类关注的地表的各种地理事物(简称“地物”)与地理现象,即地理要素。因而,GIS研究的地理空间数据就是指抽象化的地理要素,地理位置通常可以抽象为在某坐标系下的点、线、面、体等几何图形,其他信息通常可以抽象为数据表中的一条记录。因此,地理空间数据包括上述空间信息和属性信息,这是地理信息系统与其他信息系统的本质区别。
GIS的发展并不孤单,还得益于数学、空间科学、遥感学、计算机科学等学科的进步。这些学科不仅向GIS提供了新的数据源(如高分辨率遥感数据、无人机遥感数据等),还提供了新的存储与分析方法(如云GIS、网格GIS等),更提供了新的数据展现形式(如三维GIS等)。地理信息系统(GIS)与遥感(Remote Sensing,RS)、全球导航卫星技术(Global Navigation Satellite System,GNSS)的关系非常密切,相辅相成,常常共同发展与应用,并构成了强大的技术体系,因此通常并称为“3S”技术。
当前,GIS的几个前沿发展方向如下。
1. 云GIS
云GIS是指基于云计算的理论、方法和技术,实现地理空间数据或算法的云端集成,提供更加高效的计算能力和数据处理能力,解决地理信息科学领域中计算密集型和数据密集型的各种问题,能够将大规模的矢量数据和栅格数据处理的时间从天压缩到小时甚至分钟的级别,如美国的Google Earth Engine平台、日本的Tellus平台、中国的Supermap Online等。由于分布式处理方式可以充分调动服务器资源,降低GIS数据的存储成本和运算成本,因此云GIS可以借助云计算平台的优势,以低成本、高度灵活的特征提供GIS存储、分析、渲染服务。
2. 3D-GIS/VR-GIS
3D-GIS采用虚拟的三维空间渲染地理空间数据,VR-GIS则是指虚拟现实技术与地理信息系统技术相结合的技术,两者都采用多维数据可视化的方法表达数据。数据可视化在图形学、计算机技术乃至互联网技术中应用广泛,并且经历了二维—三维—VR的发展历程。VR提供了一个虚拟空间,可以容纳比三维地图多一个层次的维度。事实上,许多地物和现象都是三维甚至更高维度的,如立体交通、埋在地下且相互交错的管网、大气运动等,很难在二维的角度充分、直观地描述其位置关系。通过3D-GIS和VR GIS可以“亲身”感受和经历空间数据要传达的信息,在城市规划、电网管理、环境监测等领域具有较好的应用前景。
3. 自发地理信息
自发地理信息(Volunteered Geographic Information,VGI)最早在2007年由M.F.Goodchild提出,是指用户通过互联网终端自发地创建、编辑带有地理位置的信息。自发地理信息的提出打破了地理信息采集的专业界限,汇集公众智慧,实现了地理信息创建、传递、共享和分析前所未有的转变。带有定位功能的移动终端的普及,以及社交平台的发展使用户对信息发生的位置更加敏感。例如,许多手机导航软件允许用户进行事故上报,从而提供更加精准的导航信息;许多自媒体允许用户在发布信息的同时带有位置标签等。自发地理信息具有动态性、随机性、集中性和低成本性,其发展对地理空间数据的管理提出了更高的要求。
4. Hybrid制图
Hybrid制图就是在一个地图中选用多种不同数据来源的图层进行整合渲染。随着地理空间数据的获取越来越容易,地学分析和地图综合不能够局限于单一来源的数据,越来越多的地学研究和GIS应用将多种不同的数据源进行整合、分析和展现。由于不同来源的数据在尺度、表现角度上存在差异,因此采用多源数据有利于在不同尺度和维度上对要表达的信息进行展示和分析。为了将多源数据有效整合,地理空间数据标准化组织OGC提供了一系列标准(统称“OGC标准”),对数据发布的形式进行了规定,例如,WMS、WFS等规范规定了发布的地理空间数据的组织方法和访问方式,方便在互联网上的Hybrid制图。另外,Google地图、百度地图等互联网地图底图服务采用的大多为Web墨卡托投影,并且数据切片的大小和格式都非常类似,采用Leaflets、OpenLayers等地图控件可以对这些数据进行有效、快速的集成。
OGC的全称为开放地理空间信息联盟(Open Geospatial Consortium),成立于1994年,前身是OGF(Open GRASS Foundation),是一个针对地理信息系统规范化的非营利国际标准化组织,与万维网联盟(W3C)、结构化信息标准促进组织(OASIS)等国际标准化组织结成了伙伴关系。OGC的诞生是为了制定一系列数据访问的规范和准则,以在不同开源GIS软件之间进行数据共享和交互性数据处理,但是鉴于其影响力越来越大,一些提供商业GIS产品的公司(如ESRI、Google等)也逐步加入了OGC。虽然OGC是一个非营利、非政府的组织,其标准也不带有强制性,但是目前绝大多数的GIS软件和平台均在不同程度上参考和符合这些标准。
【小提示】 在2004年以前,OGC使用“开放地理信息系统协会(Open GIS Consortium)”作为机构名称,因此OGC标准也曾被称为“OpenGIS标准”。现在,OGC发布的新标准已经不冠以“OpenGIS”简称,但是目前仍有不少学者和开发者使用“OpenGIS”作为开源GIS的代名词。
OGC标准众多,已经正式发布的标准达30多种,常见的标准包括:
· 简单要素标准(SFS):包括矢量简单要素的通用模型,以及针对简单要素的SQL操作定义等。
· 常见数据格式标准:包括GeoPackage、GeoTiff、HDF5、LAS、NetCDF等。
· 标记语言标准:包括GML、KML、CityGML、WaterML、ARML 2.0等。
· Web服务标准:包括WMS、WFS、WMTS等。
除了上述常见标准,OGC标准还包括概念性地理空间用户反馈(Geospatial User Feedback,GUF)数据模型、开放位置服务接口标准(OpenLS)、地理信息扩展的RSS源(GeoRSS)标准、3D切片标准、RDF数据的地理查询语言GeoSPARQL、地理要素运动(Moving Features)等。OGC标准也在不断发展和壮大,了解OGC标准对学习QGIS数据管理、数据分析非常有帮助。由于篇幅有限,本节只介绍几种重要的OGC标准。
1. 简单要素标准
简单要素标准(OpenGIS Simple Features Interface Standard,SFS)包括简单要素的通用模型和SQL操作定义。
1)几何对象类
SFS抽象一系列的几何对象类来表达地理要素,包括点(Point)、线串(LineString)、多边形(Polygon)等,也可以将相同类型的多个几何对象构成几何对象集合(GeometryCollection),形成多点(MultiPoint)、多线串(MultiLineString)、多多边形(MultiPolygon)等。这些几何对象(集合)的基类定义为几何对象(Geometry),如图1-1所示。
图1-1 简单要素标准中的各种几何对象类图
2)几何对象的存储与SQL操作定义
在SFS中,几何对象可以采用WKT(Well-known Text)和WKB(Well-known Binary)进行描述,前者采用文本的方式存储信息,后者采用二进制的方式存储信息。通过WKT和WKB的方式,可以将地理要素的空间特征抽象为文本或二进制码,从而方便地将其存储在数据库中。因此,SFS还定义了针对存储在数据库中的简单要素的SQL操作,这些SQL操作定义包括几何对象转换、几何对象属性获取、几何关系判断、几何运算等。
· 几何对象转换:例如,通过ST_WKTToSQL、ST_WKBToSQL可以构造WKT、WKB描述的几何对象的SQL语句;通过ST_AsText、ST_AsBinary可以将几何对象转换为WKT、WKB描述等。
· 几何对象属性获取:例如,利用ST_Dimension获取维度;利用ST_IsEmpty判断几何对象是否为空等。
· 几何关系判断:例如,通过ST_Equals判断几何对象是否相同;通过ST_Touches判断几何对象是否相接等。
· 几何运算:例如,通过ST_Union可以合并几何对象;利用ST_Buffer可以计算几何对象的缓冲区;利用ST_Distance可以计算两个几何对象的距离等。
除此之外,SFS还包括针对某一特定几何对象的SQL操作定义,例如,利用ST_X、ST_Y获取点的坐标;利用ST_NumPoints获取线串的节点数等。目前,诸如PostGIS、Oracle Spatial、MySQL Spatial等GIS数据库扩展均在不同程度上支持并实现了SFS模型。例如,在PostGIS中,可以使用ST_IsEmpty判断几何对象是否为空:
其中,第一条SQL语句用ST_WKTToSQL语句创建一个空的面对象,因此ST_IsEmpty返回真(t);第二条SQL语句创建一个具有3个节点的面对象,因此ST_IsEmpty返回假(f)。
【小提示】 基于简单要素模型的数据源(如shapefile格式)中不存储拓扑关系,而基于拓扑模型的数据源(如Coverage、GRASS等)在其数据中包含拓扑关系。例如,多边形的相同边界只在拓扑模型的数据源中存储一次,而简单要素模型需要在两个要素中分别存储两次。因此,拓扑模型的数据源可以相对节约存储空间,但数据的读取、分析更复杂。在GIS发展初期,由于计算机存储性能等方面的限制,GIS工作者更倾向于使用拓扑模型。如今,在存储成本降低和性能提高的基础上,简单要素模型逐渐代替拓扑模型成为主流。
2. GML
GML(Geography Markup Language,地理标记语言)是一种被广泛采用的空间数据的交换类型,主要应用在WFS服务进行数据交换。GML基于XML(The Extensible Markup Language),而XML则非常广泛地应用在不同系统、平台、软件之间进行信息交换。在使用GML之前,需要先定义命名空间:
然后,就可以使用GML定义一个坐标为(112.92, 48.57)的点:
上述代码中的“<gml:Point>”元素声明了一个点对象,“srsName”属性定义这个点的坐标系统为“EPSG:4326”;“srsDimension”属性定义其“2”维的空间维度。“<gml:Point>”元素内部的“<gml:pos>”元素保存了点对象的坐标位置, X 坐标和 Y 坐标之间用空格隔开。
类似的,利用GML可以定义一个包括(10,20)和(30,40)两个节点的线串对象:
“<gml:LineString>”元素声明了一个线串,“<gml:posList>”元素用于声明线串的节点坐标,各个节点的坐标按顺序依次排列,并且用空格隔开。
3. KML
KML(Keyhole Markup Language,Keyhole标记语言)是Google旗下的Keyhole公司用于描述地理空间数据的XML扩展,由Google公司向OGC提交并形成标准。KML和GML的功能相似,都是利用XML交换格式存储空间数据,但是KML只能存储几何对象,GML还可以存储地理要素的符号和属性。目前,KML主要应用在Google地图、Google地球等相关软件中,并采用“kml”或“kmz”等扩展名保存数据。其中,“kml”格式的文件存储单独的KML文本;“kmz”格式的文件以ZIP压缩文件的方式出现,不仅存储KML文本,还存储各种附属的图形文件等。
例如,通过KML定义一个坐标为(10,20)、高程为0的点地标的方法如下:
“<Placemark>”元素用于定义一个地标,“<name>”、“<description>”和“<Point>”分别定义地标的名称、描述和一个点几何对象。点几何对象中的“<coordinates>”元素用于保存坐标位置,并使用逗号隔开,第一个数字“10”表示 X 坐标,第二个数字“20”表示 Y 坐标,第三个数字“0”(可选)表示 Z 坐标。
4. Web服务标准
OGC提出了一系列Web服务标准(OWS),包括Web地图服务(Web Map Service,WMS)、Web地图切片服务(Web Map Tile Service,WMTS)、Web要素服务(Web Feature Service,WFS)和Web覆盖服务(Web Coverage Service,WCS)等。许多开源GIS服务器(如GeoServer、MapServer等)提供了上述Web服务标准的具体实现,并且QGIS也提供了访问这些OWS服务的功能。
1)Web地图服务(WMS)
WMS通过HTTP为用户提供地图渲染数据,并且支持返回JPEG、PNG等多种数据格式。OGC为WMS定义了GetCapabilities、GetMap和GetFeatureInfo等常见重要方法。通过GetCapabilities方法可获得WMS服务的基本信息,如服务内容、版本信息等。GetMap方法是WMS的核心,通过它可获得具体地理范围的地图数据。通过GetFeatureInfo方法,可根据地理位置坐标获取该位置详细的要素信息。
2)Web地图切片服务(WMTS)
WMTS通过HTTP提供预渲染或实时计算的地图切片数据的服务。相对于WMS,WMTS具有更强的灵活性,并利用缓存技术缓解Web服务器端数据处理的压力,提高交互响应速度,大大改善在线地图应用客户端的用户体验,而且应用范围更广泛。
【小提示】 与WMTS类似的协议还包括WMS-C(WMS-Cached)、TMS(Tile Map Service)、Bing Quadkey等。WMS-C是WMS的扩展,是一种较原始的切片服务标准。TMS是OSGeo组织提出的标准,只允许正方形切片,并且用于计算切片序号的 Y 轴与WMTS相反。目前,提供地图切片服务仍然以WMTS标准为主流。
3)Web要素服务(WFS)
WFS直接向网络提供矢量要素的数据服务。相对于WMS和WMTS,WFS的特点是直接提供完整的数据信息,没有经过渲染与符号化,因此它更加灵活,常用于点要素的信息传递及多用户编辑等专业领域。由于WFS返回的数据是原始的,完整的要素数据传输到客户端以后才能进行渲染或处理,因此它在一定程度上会加重网络负担和客户端负担。WFS的核心方法是GetFeature方法,用于根据地理范围等参数请求返回矢量要素数据。
4)Web覆盖服务(WCS)
WCS可以直接向网络提供遥感影像、数字高程等栅格数据接口。WCS提供GetCapabilities、DescribeCoverage、GetCoverage等主要方法,GetCapabilities方法用于获取WCS的基本信息;DescribeCoverage方法用于获取栅格数据的元数据信息;GetCoverage方法是WCS的核心方法,用于根据用户请求的范围等参数获取栅格数据。
OSGeo成立于2006年,主要为自由和开源的地理空间社区提供经济、组织和法律上的帮助。如今,OSGeo孵化并支持了大量的开源GIS软件和工具。
OSGeo支持的主要开源项目如下。
1. 地理空间数据处理相关类库
地理空间数据处理相关类库是其他GIS软件和工具的基础类库,主要包括GDAL、OGR、GEOS、PROJ等。
1)GDAL
空间数据抽象库(Geospatial Data Abstraction Library,GDAL)由Frank Warmerdam于1998年开始研发,主要用于读取栅格数据的抽象数据模型类库,并采用X/MIT协议发布。GDAL支持绝大多数的GIS栅格数据,并被大多数桌面GIS软件应用,如QGIS、ArcGIS等开源或商业软件都使用GDAL作为读取、写入栅格数据的基础类库。
2)OGR
与GDAL类似,OGR是用于读写矢量数据的抽象数据模型类库,是GDAL开源项目的一个分支,也采用X/MIT协议发布。
3)GEOS
GEOS(Geometry Engine,Open Source)是几何对象基本操作类库,实现几何对象的关系判断、合并、简化、距离计算、缓冲区计算等功能,采用LGPL协议发布。类似于Java拓扑套件(Java Topology Suite,JTS),GEOS是C++语言实现几何对象拓扑的套件。
4)PROJ
PROJ是一款通用的坐标系定义和转换工具,可以将一个坐标系下的坐标转换为另一个坐标系下的坐标,采用X/MIT协议发布。
5)GeoTools
GeoTools是Java语言环境下读取、处理栅格数据和矢量数据的工具集,采用LGPL协议发布,数据结构基于OGC标准。
2. 桌面GIS软件
桌面GIS软件是指运行在桌面计算机的GIS软件,OSGeo支持的开源桌面GIS软件主要包括QGIS、GRASS GIS、gvSIG等,详见“1.4.1开源地理信息系统平台”。
3. 服务器GIS软件
OSGeo支持的服务器GIS软件包括MapServer、GeoServer、deegree、Mapfish等。
1)MapServer
MapServer是C语言和C++语言环境下的服务器GIS软件,最初由美国明尼苏达大学开发,采用MIT协议发布。目前,MapServer可以运行在绝大多数的操作系统中(如Windows、Mac OS、Linux系统等)。自6.0版本以来,MapServer成为包含MapServer Core、MapCache和TinyOWS三个组成部分的软件体系。
2)GeoServer
GeoServer起源于2001年,是Java语言环境下的服务器GIS软件,采用GPL协议发布。
3)deegree
deegree是一款Java语言环境下的地理空间数据管理组件,于2002年由德国波恩大学地理系开发,可以实现数据的可视化、发布和安全保护,采用LGPL协议发布。
4)Mapfish
Mapfish是一个灵活地应用于Web制图的完整框架平台,采用Python语言开发,并基于Pylons框架设计,采用BSD协议发布。
4. Web客户端
1)OpenLayers
OpenLayers是基于JavaScript的GIS客户端,采用FreeBSD协议发布。
2)GeoMoose
GeoMoose是一个模块化、可扩展的轻量级GIS客户端框架,使用JavaScript编写,采用MIT协议发布。
5. 数据库扩展
PostGIS是OSGeo支持的PostgreSQL数据库的GIS扩展,可以配合PostgreSQL数据库实现完整且稳定的GIS数据库,被大量的开发者广泛使用,采用BSD协议发布。
6. 其他GIS软件和工具
OSGeo支持的常用GIS软件和工具还有GeoNetwork、pycsw、GeoNode、OSGeoLive等。
1)GeoNetwork
GeoNetwork是一个标准化的分布式空间信息管理平台,用于对GIS数据的元数据进行读取和管理,以便于GIS数据在互联网上的传递与共享。通过GeoNetwork,用户可以快速查找并获取某个地理位置、某个领域的地理空间数据。
2)pycsw
pycsw是Python语言环境下通过网络发布元数据的工具集,可以部署在Apache服务器上,对数据库内存储的XML格式的元数据进行读取、添加、删除操作。
3)GeoNode
GeoNode是一个开源的、共享地理空间数据和地图的平台,提供数据集和地图编辑应用,允许用户浏览地图或贡献自己的地图。
4)OSGeoLive
OSGeoLive是一个基于Lubuntu的独立操作系统(经常运行在虚拟机上),其中整合了大量实用的开源GIS软件和工具。
【小提示】 OSGeo中国中心是由国家遥感中心发起、Autodesk中国有限公司协助、经OSGeo正式授权的非营利组织。OSGeo中国中心与OSGeo理事会紧密合作,提供大量开源GIS软件的中文支持文档等资源。