墨卡托的魔术:地图是如何欺骗你的眼睛的?
By Long Luo
最近在书店里看到一本 《数学的奥秘》 ,原著是 《The Secret Life of Equations: The 50 Greatest Equations and How They Work》 ,讲的是最伟大的数学方程式起源、构成、含义和应用。书的内容并不多,我看了其中的一部分,里面有讲 墨卡托投影( \(\textit{Mercator projection}\) )1 。
我对地理和地图一直很感兴趣,但之前对原理一直一知半解的,只知道我们常见的地图都是墨卡托投影,由墨卡托( \(\textit{Gerardus Mercator}\) )2 在 1569年创立。但墨卡托投影的原理是什么却并不清楚。书里面只有几页,但具体公式缺乏说明及推导过程,所以这几天通过查找资料掌握了墨卡托投影的原理。
如何绘制地图?
在大航海时代,航海家可以通过六分仪和观察日月星辰获取到经纬度,但在茫茫大海中迷失方向是很可怕的事情,如何才能正确的航行到目的地呢?
地球由于自转是一个两极比赤道略短的扁球体,但扁率约为 \(\dfrac {1}{300}\) ,非常之低,因为可以视为球体。因为球面不是可展曲面,也就是如果展成平面的话,长度会发生形变,所以也会形变。因为根据高斯绝妙定理 ( \(\textit{Theorema Egregium}\) )3 ,平面的高斯曲率为 \(0\) ,而球面的高斯曲率为 \(\dfrac {1}{R^2}\) ,其中 \(R\) 为球面半径,所以在保持图形完整性前提下,将球面转化为平面,投影后得到的经纬线网形状必然会产生变形,也就是说,在投影的过程中,变形是必然存在的。
在这种情况下,墨卡托运用等角圆柱投影法绘制了航海图,极大地方便了航海家。有了墨卡托海图,航海家想要到达某个目的地,只需要在出发点和目的地之间连一条直线,量出这条航线和经线的夹角,按照航行路线就能到达目的地。
什么是墨卡托投影?
设想将地球置于在一中空的圆柱里,如下图所示,其基准纬线(赤道)与圆柱相切。再设想地球中心处放置一灯泡,那么从球心处发射的光线会把球面上的图形投影到圆柱体上,之后再将把圆柱体展开,那么就可以得到一张墨卡托投影绘制出的地图。
墨卡托公式的推导
设 \(P(\textit{lng}, \textit{lat})\) 表示投影前的球面上的点,在数学上我们常使用弧度制,则表示为 \(P(\lambda , \varphi )\) ,其中 \(\lambda = \textit{lng} \cdot \dfrac{\pi}{180} , \quad \varphi = \textit{lat} \cdot \dfrac{\pi}{180}\) ,所以墨卡托投影就是将球面上的 \(P(\lambda , \varphi )\) 转换为平面直角坐标系 \(P' (x, y)\) ,即定义为下面的一个映射:
\[ f: P \rightarrow P' \]
那么则有函数 \(f_x\) 和 \(f_y\) :
\[ \left\{ \begin{aligned} x &= f_x(\lambda , \varphi ) \\ y &= f_y(\lambda , \varphi ) \\ \end{aligned} \right. \]
如下图,图中由经纬线分割出的方块区域 \(\Box KPMQ\) 映射为 \(\Box K'P'M'Q'\) ,如果 \(P\) 和 \(Q\) 点足够近的话,那么 \(\Box KPMQ\) 可以近似为矩形。
\(P\) 的经纬度为 \([\lambda , \varphi ]\) ,相邻点 \(Q\) 的经纬度为 \([\lambda + \mathrm{d}\lambda , \varphi + \mathrm{d}\varphi]\) ,那么平行赤道的纬线所在圆的半径 \(r = R \cos \varphi\) ,则有圆弧:
\[ PM = r \times \mathrm{d} \lambda = R \cos \varphi \mathrm{d} \lambda \]
,圆弧 \(PK = R \mathrm{d} \varphi\) 。投影变换后平面上的矩形长宽分别为 \(\mathrm{d} x\) 和 \(\mathrm{d} y\) 。
在变换后,在微观局部应该保持长宽比例不变,那么:
\[ \frac{R \cdot \mathrm{d} {\varphi}}{\mathrm{d} y} = \frac{R \cdot \cos \varphi \cdot \mathrm{d} \lambda }{\mathrm{d} x} \]
另外也可以根据墨卡托投影是等角投影4, \(\angle \alpha = \angle \beta\) ,则有:
\[ \tan \angle \alpha \approx \frac{PM}{QM} = \frac {R \cos \varphi \mathrm{d} \lambda }{R \mathrm{d} \varphi } \]
\[ \tan \angle \beta = \frac{P'M'}{Q'M'} = \frac{\mathrm{d} x}{\mathrm{d} y} \]
那么:
\[ \frac{R \cos \varphi \mathrm{d} \lambda }{R \mathrm{d} \varphi } = \frac {\mathrm{d} x}{\mathrm{d} y} \]
显然同一条经线上的点,变换到墨卡托之后横坐标相同,而横坐标的值就是赤道弧线划过的长度,所以 \(x = R \cdot \lambda\) ,那么 \(\mathrm{d} x = R \times \mathrm{d} \lambda\) 。
消掉 \(\mathrm{d} x\) 和 \(\mathrm{d} \lambda\) ,可得:
\[ \left \{ \begin{aligned} x'(\lambda ) &= R \\ y'(\varphi ) &= R \cdot \frac{1}{\cos \varphi } \cdot \mathrm{d} {\varphi} = R \sec \varphi \\ \end{aligned} \right. \]
对上式积分可得:
\[ \int \mathrm{d}y = R \int \frac{1}{ \cos \varphi} \mathrm{d}\varphi = R \int \sec \varphi \mathrm{d} \varphi = R \ln (\sec \varphi + \tan \varphi ) + C \]
可得:
\[ y = R \ln \tan (\frac{\pi}{4} + \frac{\varphi }{2}) + C \]
根据初始条件可知 \(C = 0\) ,所以等角投影的公式:
\[ \left \{ \begin{aligned} x & = R(\lambda -\lambda _{0}) \\ y & = R \ln \left[ \tan \left ( {\frac {\pi }{4}} + {\frac {\varphi }{2}} \right ) \right ] \\ \end{aligned} \right. \]
等角航线
之前讲过墨卡托投影的地图上,经线投影成一组平行线,两地之间的等方位角曲线 (Rhumb line) ,在地图上是一条直线。航海家只需要保持方位角不变,不改变航线即可达到终点,所以在航海中得到广泛应用。但这条航线并不是两地之间的最短航线,我们知道球面上两点间最短距离是通过两点间大圆的劣弧,如下图所示。在航海或航空中,运用此特性而走最短距离的航线叫做大圆航线 (Great Circle Route) 。