图像坐标球面投影_从球面到平面的投影
最近工作中遇到一个问题,需要将点从球面投影到平面上。现将解决问题的过程记录下来,以备查阅。
1.局部投影
如果是将局部球面投影成平面,可以直接投影。常用的投影方式有两种,第一是中心投影,即从球心O发出射线经过球面上的点P并与投影面相交于P',P'即是点P的投影。第二是平行投影,如果投影面与球面相切于点Q,则用沿OQ的一束射线照射投影面,相应的球面上的点在投影面上也会有对应点。可以证明平行投影的变形比中心投影小,所以下面的投影采用平行投影。
局部投影的关键在于确定投影坐标系。
如上图,选定了球面上的投影原点(map origin)后,局部坐标系可以按三个方向确定:(1)z轴:map origin 指向球心(图中没有画图来);(2)y轴:该点在原坐标系中沿经线方向的切线;(3)x轴:按与z轴、y轴两两垂直的关系,求出x轴。
下面直接给出结论:如果在单位球面(球心坐标(0,0,0),球径r=1)上一点P的经、纬度分别为
和
,则该点处的局部参考系为
,
,
.可以验证上述
轴互相正交,且均为单位向量。
确定好局部坐标系后,要求原坐标系中一点在新坐标系中的位置,只需要用原坐标乘以坐标转换矩阵即可。
,变换后的坐标
2.全局投影
此处全局投影是指将整个球面映射到平面上去。将整个球面投影成平面也有很多方法,但是都会产生或大或小的变形(因为平面是0曲率的而球面是有曲率的),这里介绍地图投影中常用的墨卡托投影法。
如上图(图片引自网络), 墨卡托投影是等角圆柱投影。就地球而言,方法是:做一个圆柱面使之与赤道相切(这里忽略地球的椭球形,假设它是正球体),在地心放一个灯泡,发出光线穿过地面照射到圆柱面,于是地面上每一点在圆柱面上都有映射点。
这里有一个问题,高纬度地区的点经过映射后,成像点在圆柱面的很远处。简单计算可知,如果地球半径为
,地面某点纬度为
,以赤道作为映射后所得平面的
轴,则映射后该点距
轴的距离为
tan函数在
附近增长非常快,结果是两极附近距离无限放大。
为了缓解极点附近的畸变问题,墨卡托投影采用另一个函数替代了tan函数,替代函数为
.该函数在
附近与tan函数非常接近,而当
接近
时增长比tan缓慢,tan函数趋向无穷的条件值被推迟。
一般在使用时,规定替代函数的值域为
,此时定义域(纬度值)的范围大致是(-85,85)度,即极点附近5度纬度的信息损失掉了,并且高纬度地区与实际相比仍然会有一定变形。尽管如此,墨卡托投影仍然是地图投影中最有影响力的,适用于航海图、航空图等。
由于规定投影后的y方向的值域为
,而x(经度)方向是
,区间长度相同。因此,地球经过墨卡托投影得到的平面图是正方形。
