如何用WKT和EPSG在GDAL中表达空间参考坐标系?
摘要:深入解析 GIS 中空间参考坐标系的标准化表达方式——WKT 与 EPSG 编码,并通过 GDAL 代码实战演示如何创建与输出地理坐标系和高斯-克吕格投影坐标系。
在 GIS 开发中,空间参考系统的正确表达是数据互操作的基础。本文节选自作者新书《GIS基础原理与技术实践》第3章,深入讲解 WKT 与 EPSG 的原理与代码实现。
3.2 空间参考坐标系的表达
通过第2章介绍的地理空间参考系统的知识我们可以知道,一个空间参考坐标系的内容是非常丰富的:需要描述参考椭球参数、基准面参数等;如果是投影坐标系,还需要描述投影参数,并且每个投影算法的参数都不同。而在实际的GIS应用中,对空间参考坐标系的表达是复用程度和通用程度都很高的功能;那么,有没有一种可能,采用一种约定俗成的方式,去描述各种空间参考坐标系呢。答案是肯定的,那就是WKT字符串和EPSG编码。
3.2.1 WKT字符串
WKT(Well-known Text)是开放地理空间信息联盟OGC(Open Geospatial Consortium)制定的一种文本标记语言,用于表示矢量对象和地理空间参考系统。
提示:开放地理空间信息联盟OGC是一个非盈利的国际标准化组织,致力于提供地理信息行业软件和数据及服务的标准化工作。不同的GIS厂商可以按照这些标准定义空间数据存储的编码和开放服务的接口,从而可以保证空间数据的互操作。OGC的成员包括了像ESRI、Google、Oracle等业界强势企业,可以认为是国际上一种比较“权威”的标准化机构。OGC目前提供的标准很多,我们在后面也会接触到一些。
根据最新的OGC标准,使用WKT来表达的空间参考系统的标准叫做“WKT CRS”,也就是坐标参考系统的WKT表示。在这个标准规范中,详细定义了如何通过WKT来表示各种空间参考系统。例如我们最常用的WGS84坐标系,其WKT字符串为:
GEOGCS["GCS_WGS_1984",
DATUM["D_WGS84",
SPHEROID["WGS84",6378137,298.257223563]],
PRIMEM["Greenwich",0],
UNIT["Degree",0.017453292519943295]]
结合第2章的内容,我们很容易识别其描述的具体含义:GEOGCS表明其是一个地理坐标系,DATUM表示大地基准面,SPHEROID则定义了一个参考椭球体,每一个参数后面的方括号内部则是其具体的参数。而一个投影坐标系则形如:
PROJCS["Xian_1980_3_degree_Gauss_Kruger_zone_39",
GEOGCS["GCS_XIAN 1980",
DATUM["D_XIAN 1980",
SPHEROID["Xian_1980",6378140,298.2569978029111]],
PRIMEM["Greenwich",0],
UNIT["Degree",0.017453292519943295]],
PROJECTION["Transverse_Mercator"],
PARAMETER["scale_factor",1],
PARAMETER["central_meridian",117],
PARAMETER["latitude_of_origin",0],
PARAMETER["false_easting",39500000],
PARAMETER["false_northing",0],
UNIT["Meter",1]]
PROJCS标识其是一个投影坐标系;定义投影坐标系的首要内容当然是需要先定义一个地理坐标系,这里的GEOGCS定义了一个XIAN80坐标系;PROJECTION则标识其采用的横轴墨卡托投影算法,PARAMETER则是其投影参数。由于参数false_easting在500000前面加了带号39,中央经线central_meridian为117,所以这是一个高斯-克吕格投影坐标系,使用的地理坐标系为XIAN80坐标系,采用3度带进行投影,带号为39。
使用WKT字符串的好处是易于识别,可以让用户和开发人员清楚的知道我们使用的到底是哪一个空间参考系统。但是让我们创建一个这么长的字符串就比较麻烦了,这需要非常了解WKT对坐标参考的具体规范和标准才行。简单总结来说就是易读不易写。
3.2.2 EPSG编码
与WKT字符串易读不易写的特性相反,使用EPSG编码来表达空间坐标参考系统的特点则是易写不易读。使用EPSG编码的原理在于,世界上空间坐标参考系统固然很多,但是通用的,经常使用的个数确是有限的;我们可以将这些常用的空间坐标参考系统都分配一个编号,这个编号就是EPSG编码。
