最近公司要开展国家2000坐标转换相关的工作,身边的测绘专业的同事给我科普了一下GIS基础知识,甩给我一堆缩写、概念和PPT:
-
BJ54
-
XA80
-
WGS84
-
CGCS2000
-
大地水准面
-
大地原点
-
参心坐标系
-
起始子午线
-
地理坐标系
-
椭球体参数
-
基准面
-
高斯克吕格投影
-
墨卡托投影
-
七参数
然后我的表情就是这样了:
小学地理老师从小告诉我们地球是圆的,我也知道直角坐标系、经纬度,不过我的地理知识可能是排球老师教的,可能知道的就这么多了。如今我整天都用GPS定位,我看到的地图是下面这样的,专业人士们为什么把地球研究得如此复杂?
随着翻阅了一堆公众号文章和资料,发现懂个“球”(地球)还真不容易,需要了解天文、地理、数学、历史等相关知识,想把北京54的坐标精确地转换国家2000坐标还真够费劲的。
在所有的概念里,最重要的两个概念应该是
坐标系
和
投影
。把这两个概念搞懂,再熟悉一些常用的坐标系和投影,平常工作就足够用了。
三维空间直角坐标系
初中都学过几何知识,空间直角坐标系都不陌生,球面上的点P有三个坐标分量,分别为(x, y, z)。
假设地球是一个完美的球,O点是球心,X轴、Y轴和Z轴还需要明确一下,Z轴可以对应于南北极的连线,X轴是
本初子午线
与赤道平面的交线。
我的小学地理也不及格,抓紧百度了一下本初子午线,就是指通过英国伦敦的格林尼治天文台原址的那条经线,也称为0°经线,或零子午线。英文名字是Prime Meridian。
这条本初子午线还是伦敦的一个景点,我也没有去过,从网上找到了一张图片。
有了X轴和Z轴,Y轴基本就确定了,只差一个方向,地图学里用右手坐标系,就是我图上画的那种X/Y/Z的位置关系。
大地坐标系
地理中还学过一种经纬度表示坐标的方法,在GIS中称为大地坐标系。
从0°经线的位置向东转过的角度就是经度,范围从-180°到180°。西边为负,东边为正。
从赤道向北转过的角度就是纬度,范围从-90°到90°。北半球为正,南半球为负。
参考椭球体
以上一直把地球认为是一个完美的球体,但现实中的地球有点扁,赤道方向稍长一点,南北极方向略短,数学上用椭球体来近似描述我们的地球。
所以上面说的纬度的定义实际上并不准确,在椭球体里,还有大地纬度、天文纬度之类的准确说法,数值会有略微差异,这里为了简化理解,就当成从赤道平面转过的角度。
从中心点O开始,东西方向上的长度称为长半轴a,南北极方向上的长度称为短半轴b,a和b具体是多少呢?不同的科学家有不同的参考答案,所以给定一套椭球体参数,就有一种地球描述,称为
参考椭球体
,英文称为Reference ellipsoid。
常见的几种参考椭球体
参考椭球体
|
长半轴a(米)
|
短半轴b(米)
|
备注
|
北京54
|
6378245
|
6356863
|
Krasovsky 1940
|
西安80
|
6378140
|
6356755
|
1975国际椭球
|
WGS84
|
6378137
|
6356752.3142
|
GPS标准
|
CGCS2000
|
6378137
|
6356752.3141
|
我国标准
|
北京54
最早的北京54坐标系用的是苏联老大哥1942年的测量成果,克拉索夫斯基(Krasovsky)是苏联的一位数学家、大地测量学家,该椭球就是用他的名字命名 。后来发现,这个椭球体与我国的地面情况吻合得不太理想,有些地方的误差还挺大,就有了后来的西安80和CGCS2000。
西安80
1978年,因为北京54坐标系误差较大,我国决定采用新的坐标系,以陕西省泾阳县永乐镇为大地原点,称为1980年西安坐标系。其椭球体参数采用了1975年国际大地测量与地球物理联合会的推荐值。
什么是
大地原点
?由于地球起伏不平,为了计算出一个与我国地貌比较吻合的椭球,要在我国范围内找一个
大地基准点
,经过一番测量和计算(
平差
这个概念就不引入了),最后就选在西安了。我的解释不够专业和严谨,但大概意思就是这样。
西安大地原点标志塔(图片取自网络)
参心坐标系
北京54和西安80都是以参考椭球的几何中心为原点的大地坐标系,称为参心坐标系(reference-ellipsoid-centric coordinate system)。“参心”意指参考椭球的中心。
地心坐标系
以地球质心为原点建立的坐标系,就称为地心坐标系(geocentric coordinate system)。WGS84和CGCS2000都是地心坐标系。
WGS84
即世界大地坐标系(World Geodetic System 1984),是为美国GPS全球定位系统使用而建立的坐标系统,其坐标原点是地球质心。Google Earth和ArcGIS等软件都采用WGS84坐标系。
CGCS2000
2000中国大地坐标系(China Geodetic Coordinate System 2000),又称之为2000国家大地坐标系,2007年在中国正式实施。其椭球参数与WGS84的相差极小,如果没有极其精确的定位需求,可以不用把WGS84坐标转换成CGCS2000坐标。
投影
前面介绍了几种椭球体和相应的坐标系,想准确直观地表示地球上某点的位置,应该用地球仪来展示。但携带地球仪太不方便,也没办法打印出来挂在墙上,也不能显示在计算机屏幕上。
为此,要利用数学上的一种
投影
变换,把三维的球面变换到二维平面上,三维球面上的点与二维平面上的点完全一一对应。
这样的变换不可能完美,总会变形,或者长度变形,或者角度变形,或者面积变形,因此在不同的场合下,会使用不同的投影方法。
墨卡托投影
最容易想到的一种投影方法是把经线和纬线都扯直,平铺在一个平面上,当然这种描述方法太不严谨。荷兰地图学家墨卡托(Mercator)在1569年就提出了这种方法。这种投影还有一种很学术的名称:
等角正切圆柱投影
。
有个形象的比喻:假设地球被围在一中空的圆柱里,赤道与圆柱相切接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是墨卡托投影,注意这是一种近似描述。
墨卡托投影没有角度变形,常用作航海图和航空图,但长度和面积变形明显,赤道位置无变形,但北极和南极变形严重。从网上找到两幅示意图,可以看到墨卡托投影的原理以及变形情况。
图片取自知乎
Web墨卡托投影
Google Map、Virtual Earth等网络地理信息系统常用Web Mercator投影,也叫Spherical Mercator,它与常规墨卡托投影的主要区别就是把地球模拟为球体而非椭球体。
本初子午线和赤道的交点为坐标零点,X轴向东为正,Y轴向北为正。赤道半径为6378137米,赤道周长为40075016.6855784,因此X轴的取值范围是[-20037508.3427892, 20037508.3427892]。
Y轴按理说在纬度为90°时,y值为无穷大,这会让程序员崩溃的,为了编程方便和效率,程序员把Y轴的取值范围也限定在 [-20037508.3427892, 20037508.3427892]之间,
程序员把世界地图弄成了正方形