空间参考系统与WKT解析
空间参考系统与WKT解析
1、为什么要空间参考系统?
空间参考系统,也称为坐标系统。在GIS中为地理数据定位的基准,假设给你一个坐标(442281.875,4422651.589)。如果不给你空间参考系统,你可能根本不知道这个点在哪,是在欧洲还是在我们中国。这样就会给GIS应用带来困难。因此说没有空间参考的地理数据都是没有实际意义的。如果我告诉你他的空间参考系统是WGS84坐标系下的UTM50带的投影坐标系,那么你可能经过一些推算可以知道这是在北京。这里的推算就是用到了投影坐标反算,也就是由投影坐标系的平面坐标转换到地理坐标的经纬度。好了,现在大概应该知道空间参考系统的重要性了吧。
2、空间参考系统的类型
在GIS中,我们经常听到WGS84、高斯-克吕格。那么是否真正弄清楚这些名词的含义了?在这里说的WGS84是一种基准面,它的参考椭球体是国际大地测量与地球物理联合会第17届大会大地测量常数推荐值,其基本参数如下:
地球引力和地球质量的乘积:GM=3986005×108m3s-2±0.6×108m3s-2;
正常化二阶带谐系数:C20=-484.16685×10-6±1.3×10-9;
地球重力场二阶带球谐系数:J2=108263×10-8
地球自转角速度:ω=7292115×10-11rads-1±0.150×10-11rads-1
扁率f=0.003352810664
那么高斯-克吕格又是什么呢?它是一种地图投影,在此投影下的坐标系一般都是用平面笛卡尔坐标表示,坐标度量的单位是米、英尺之类的。GIS相关专业的学生在本科阶段,我想老师们都会给你们布置一个作业:编程实现高斯克吕格投影正解与反解计算。
在GIS的应用中,普遍应用的空间参考系统有如下几种:
地心坐标系 |
地心坐标系是以地球质心为原点建立的空间直角坐标系,以x,y,z表示 或者以椭球体的中心和此质心重合建立的大地坐标系,大地坐标系一般是用B,L,H表示的 |
地理坐标系 |
以椭球体为基础建立的坐标系,用经纬度度量坐标 |
投影坐标系 |
在特定椭球体基础之上经过地图投影建立的平面坐标系。 |
3、空间参考系统的表示方法
在GIS应用中,经常会遇到空间参考系的表示问题,如果不同系统中的同一个空间参考系统使用了不同的代码或者名称的话,就会给不同系统之间的互操作带来困难。为了统一空间参考系统的表示,openGIS定义了用WKT,也就是孰知文本来表示空间参考系统。另外欧洲是由勘探组织定义了一套标准,它通常以以下三种形式发布:
lEPSG Registry:我们可以通过http://www.epsg-registry.org/访问和查询。
EPSG 数据库:通过关系数据库的形式发布,可以通过http://www.epsg.org/下载。
SQL脚本:以SQL脚本的方式发布,通过脚本的方式创建EPSG数据集。
3、1WKT表示方法
现在主要讲解WKT表示方法。
WKT主要就是用文本的方法表示空间参考系统,下面这些语句就是定义空间参考系统的字句。
<coordinate system> = <horz cs> | <geocentric cs> | <vert cs> | <compd cs>
| <fitted cs> | <local cs>
<horz cs> = <geographic cs> | <projected cs>
<projected cs> = PROJCS["<name>", <geographic cs>, <projection>,
{<parameter>,}* <linear unit> {,<twin axes>}{,<authority>}]
<projection> = PROJECTION["<name>" {,<authority>}]
<geographic cs> = GEOGCS["<name>", <datum>, <prime meridian>, <angular
unit> {,<twin axes>} {,<authority>}]
<datum> = DATUM["<name>", <spheroid> {,<to wgs84>} {,<authority>}]
<spheroid> = SPHEROID["<name>", <semi-major axis>, <inverse flattening>
{,<authority>}]
<semi-major axis> = <number>
<inverse flattening> = <number>
<prime meridian> = PRIMEM["<name>", <longitude> {,<authority>}]
<longitude> = <number>
<angular unit> = <unit>
<linear unit> = <unit>
<unit> = UNIT["<name>", <conversion factor> {,<authority>}]
<conversion factor> = <number>
<geocentric cs> = GEOCCS["<name>", <datum>, <prime meridian>, <linear unit> {,<axis>,
<axis>, <axis>} {,<authority>}]
<authority> = AUTHORITY["<name>", "<code>"]
<vert cs> = VERT_CS["<name>", <vert datum>, <linear unit>, {<axis>,}
{,<authority>}]
<vert datum> = VERT_DATUM["<name>", <datum type> {,<authority>}]
<datum type> = <number>
<compd cs> = COMPD_CS["<name>", <head cs>, <tail cs> {,<authority>}]
<head cs> = <coordinate system>
<tail cs> = <coordinate system>
<twin axes> = <axis>, <axis>
<axis> = AXIS["<name>", NORTH | SOUTH | EAST | WEST | UP | DOWN | OTHER]
<to wgs84s> = TOWGS84[<seven param>]
<seven param> = <dx>, <dy>, <dz>, <ex>, <ey>, <ez>, <ppm>
<dx> = <number>
<dy> = <number>
<dz> = <number>
<ex> = <number>
<ey> = <number>
<ez> = <number>
<ppm> = <number>
<fitted cs> = FITTED_CS["<name>", <to base>, <base cs>]
<to base> = <math transform>
<base cs> = <coordinate system>
<local cs> = LOCAL_CS["<name>", <local datum>, <unit>, <axis>,
{,<axis>}* {,<authority>}]
<local datum> = LOCAL_DATUM["<name>", <datum type> {,<authority>}]
3、2 WKT主要关键字解析
上面列举了一些WKT的定义字句,这样看我们可能不知道是什么意思。下面就解析WKT中的主要关键字。
n AUTHORITY
这个关键字是可选的,表示外部权威的空间参考系统的编码
n AXIS
这个关键字主要指定空间参考系统的坐标轴方向,如果没有指定,就使用默认的,默认的指定方向如下:
地理坐标系统: AXIS[“Lon”,EAST],AXIS[“Lat”,NORTH]
投影坐标系统: AXIS[“X”,EAST],AXIS[“Y”,NORTH]
地心坐标系统: AXIS[“X”,OTHER],AXIS[“Y”,EAST],AXIS[“Z”,NORTH]
n COMPD_CS
用于指定一个符合的参考系统,符合参考系统一般由两个坐标系统指定。例如一个3D坐标系统可以由一个水平坐标系统和一个垂直坐标系统复合而成。
n DATUM
用于指定一个水平基准面。
n GEOCCS
用于指定一个地心坐标系,是一个3D坐标系,X轴的正方向是从地球质心指向赤道和本初子午线的交点,Z轴指向北极方向,Y轴正方向是从地球质心到赤道与东经90度经线的交点。
n GEOGCS
用于指定基于经纬度的坐标系统。注意:并不是所有的地理坐标系统都用度来表示单位。
n LOCAL_CS
用于指定一个本地的坐标系统。一些坐标系统经常用于CAD系统中
n PARAMETER
投影转换的参数及其值。
n PRIMEM
用于指定经度度量的本初子午线。
n PROJCS
用于指定一个投影坐标系。
n PROJECTION
用于指定从地理坐标到投影坐标转换的参数。
n SPHEROID
定义一个椭球体,椭球体是地球表面的近似。Spheroid和ellipsoid是同义词。Spheroid一般用于WKT中;而ellipsoid在任何地方使用,都是椭球体的意思。
n TOWGS84
用于指示Bursa Wolf变换的七个参数。这七个参数可以近似的从一个基准面到WGS基准面的变换。Bursa Wolf变换只能用于空间直角坐标系之间的变换。
n UNIT
用于指定测量使用的单位。在地理坐标系下使用角度。在垂直坐标系下使用线性单位,如米等。
n VERT_DATUM
用于指定垂直基准面或者高程测量的方法。
n VERT_CS
用于指定一个垂直坐标系统。
3、3 WKT表示方法举例
如果使用的是地理坐标系,那么使用GEOGCS关键字;如果使用投影坐标系那么要使用PROJCS关键字,投影坐标系必须是基于一个地理坐标系定义的;如果是高程坐标系,那么使用VERT_CS关键字。
下面是一个投影坐标系的WKT字符串,表示的是WGS84坐标系下UTM50带投影下的坐标系,是不是很拗口。
PROJCS[
"WGS 84 / UTM zone 50N",
GEOGCS["WGS 84",
DATUM["WGS_1984",SPHEROID["WGS84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",117],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,AUTHORITY["EPSG","9001"]],
AUTHORITY["EPSG","32650"]]
从上面的字符串中我们可以看出一些参数的意思。表示的是一个投影坐标系统,基于的地理坐标系统是WGS84,基准面是WGS_1984,椭球体是WGS84坐标系所依赖的椭球体,6378137表示的长半轴,298.257223563是扁率的倒数,起始经线是本初子午线,地理坐标系使用单位是度,0.0174532925199433代表一度所代表多少弧度。
PROJECTION["Transverse_Mercator"]表示是投影方法通用墨卡托投影,
"latitude_of_origin",0表示纬度的起点是0度,也就是赤道,
"central_meridian",117表示投影带的中央经线是东经117度,
"scale_factor",0.9996表示中央经线的长度比是0.9996,因为UTM投影是通用横轴等角割圆柱投影,
"false_easting",500000表示坐标纵轴向西移动500km,
"false_northing",0表示横轴没有平移。
以下是一个地理坐标系统的WKT字符串,它表示的就是WGS84坐标系。
GEOGCS
["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]
]
4、后记
空间坐标系统的WKT表示作为GIS业界互操作的一个规范确实起到了很大的作用。各大GIS厂商以及开源GIS软件类库也都是用WKT作为空间参考系统表示的规范,这样对GIS行业的发展起到了推动作用,也在一定程度上推进了空间数据共享。如果本文中有什么不对的地方,欢迎批评指正,我们共同探讨。