最近公司要开展国家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]之间,程序员把世界地图弄成了正方形。
再看一下大地坐标(经纬度表示法)的范围,经度的范围是[-180,180],这个没问题,把Y坐标反算成纬度,可以得到纬度范围为 [-85.05, 85.05]。
北极南极显示得不全?没事,企鹅们不在乎。南极科考人员肯定不敢用这个Web墨卡托投影。
高斯克吕格投影
Gauss–Krüger projection由两个人的名字得来,首先由德国数学家高斯创立,后经德国大地测量学家克吕格完善,又称为横轴墨卡托投影(Transverse Mercator Projection)。
所谓横轴就是拿一个横放的圆柱套住地球,把地球像西瓜一样切成很多片,展开到一个平面上。为了减少投影变形,高斯-克吕格投影分为3°带和6°带投影。
图片取自网络
以6度分带为例,水平方向从-180度到180度,共分为60个带。我国经度范围是73°到135°,横跨11个六度带,所以带号范围是13到23。
每一小片西瓜都有一个坐标系,我国位于北半球,纵坐标均为正值,横坐标在中央经线处为零,西边为负值,使用不便。故规定带内的横坐标均加上 500公里。
由于高斯克吕格投影每一个投影带的坐标都是对本带坐标原点的相对值,所以各带的坐标完全相同,为了从坐标读数直接判断出哪一带,在横轴坐标前加上带号,如(4123456, 21654321),坐标数值为八位数字的就是横坐标,其中21为带号。
UTM投影
UTM投影全称为通用横轴墨卡托投影(Universal Transverse Mercator Projection),国外软件常用这种投影。
它是等角横轴割圆柱投影,圆柱割地球于南纬80度、北纬84度两条等高圈,将地球划分为60个投影带,每带经差为6度,与六分带的高斯克吕格投影非常相像,容易搞混。
UTM投影与高斯克吕格的坐标很容易相互转换,涉及到一个比例系数0.9996,再记住偏移量500000即可,本文不再展开。
油田行业中的坐标一直都采用北京54标准,数据库中的井位等坐标一直都是六度分带的高斯-克吕格投影坐标,现在国家全面启用2000坐标系,如果是油田内部的图件,一般不会有什么问题,如果涉及到与外部系统进行数据交换,就要涉及到繁琐的坐标转换了。
参考资料
- 坐标知识学习与2000坐标转换
- 知乎的一篇关于常用投影方式的介绍 https://www.zhihu.com/question/21161865
- 喜欢看视频讲解的可以看这篇,后面有关编程的内容可以略过
- 那些年我们一起读过的地图投影
由于本人非测绘科班出身,文中的有些描述并不专业和严谨,如有错误,欢迎留言指出。