1.1.2 OGC标准

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的核心方法,用于根据用户请求的范围等参数获取栅格数据。