格陵兰没有那么大:一张 1569 年的航海图,还挂在你手机里
- 作者:Bougie
- 创建于:2026-10-20
打开任何一张世界地图——纸质挂图、Google Maps、高德、手机里的天气 App——你都会看到同一个画面:格陵兰是一块巨大的、几乎和非洲分庭抗礼的陆地。
非洲:3036.5 万 km²。格陵兰:216.6 万 km²。非洲装得下 14 个格陵兰。
可地图上格陵兰看起来比非洲还大。这不是错觉,也不是你想象力不好,是一张 457 年前画出来的航海图,直到今天还决定着你在屏幕上看到的世界。

下面所有数字都来自我写的两个脚本:一个做投影计算与数值微分(算每个投影在各纬度的变形指标),一个用粗轮廓多边形做条带积分(把格陵兰、非洲、中国分别放进真实球面和墨卡托平面里各称一次重)。环境是本机 Linux、Node v24.16.0,没有网络请求,没有地图库,只有三角函数。
# 一、先把结论摆出来
| 地区 | 真实面积(万 km²) | 墨卡托上的面积(万 km²) | 被放大的倍数 |
|---|---|---|---|
| 格陵兰 | 216.6 | 3775.5 | 15.5 倍 |
| 非洲 | 3036.5 | 3257.9 | 1.11 倍 |
| 中国 | 959.7 | 1439.7 | 1.56 倍 |
(格陵兰、非洲、中国用的是约 34/38/62 个顶点的粗轮廓做条带积分,实测轮廓面积与权威值分别偏差 +12.7%、−3.5%、−3.9%。关键在于:真实面积和投影面积用的是同一个轮廓,所以「放大的倍数」对轮廓误差不敏感——分母胖一点,分子等比例胖一点,比值几乎不动。)
三行数字,一句话概括:
墨卡托上,格陵兰看起来比整个非洲还大 16%;实际上非洲是它的 14 倍。
真实面积比:非洲 ÷ 格陵兰 = 14.02。 墨卡托上的面积比:非洲 ÷ 格陵兰 = 0.863。
一个被放大了 15.5 倍,一个几乎原样。这两块陆地在墨卡托投影里的"等效纬度"也很有意思:非洲的放大倍数 1.11 相当于把整块大陆搬到 18.5°N 的效果,格陵兰的 15.5 相当于搬到 75.3°N。

# 二、那个不断变大的系数:sec φ
墨卡托投影的数学其实出奇地简单。经度方向,投影保持不动:
x = λ (λ 是经度,弧度)
纬度方向,乘上一个随纬度增长的系数:
y = ln tan(π/4 + φ/2)
这个 ln tan(π/4 + φ/2) 求导之后就是 sec φ = 1/cos φ。也就是说,纬度 φ 处,地图在南北方向被拉伸 1/cos φ 倍。
而东西方向呢?地表上纬线圈的周长是 2πR·cos φ,投影到地图上全都被拉成同样的长度,所以东西方向也被拉长 1/cos φ 倍。两个方向一起拉,面积就是 (1/cos φ)² = sec²φ 倍。
| 纬度 | 线性拉伸 sec φ | 面积放大 sec²φ |
|---|---|---|
| 0° | 1.00 | 1.00 |
| 10° | 1.02 | 1.03 |
| 20° | 1.06 | 1.13 |
| 30° | 1.15 | 1.33 |
| 45° | 1.41 | 2.00 |
| 60° | 2.00 | 4.00 |
| 66.5°(北极圈) | 2.51 | 6.29 |
| 70° | 2.92 | 8.55 |
| 75° | 3.86 | 14.93 |
| 80° | 5.76 | 33.16 |
| 85° | 11.47 | 131.65 |
| 85.05°(Web Mercator 截断处) | 11.59 | 134.31 |
这张表解释了一切。格陵兰南北跨 59.8°N 到 83.6°N,大部分领土压在 65°~80°N 之间——这里每一块地的面积都被放大了 6 到 33 倍。而非洲从 37.3°N 延伸到 34.8°S,主体骑在赤道上,放大系数基本是 1。
更精确一点,把整个纬度带(全球一圈)放进公式里积分——这一步不需要任何海岸线数据,因为球面上纬度带 [φ₁, φ₂] 的真实面积是 2πR²(sin φ₂ − sin φ₁),墨卡托上对应条带的面积是 2πR²(ln tan(π/4+φ₂/2) − ln tan(π/4+φ₁/2)),两个都是闭式解:
| 纬度带 | 真实面积(万 km²) | 墨卡托面积(万 km²) | 放大倍数 |
|---|---|---|---|
| 0°~10° | 4438.5 | 4484.0 | 1.01 |
| 10°~20° | 4303.7 | 4625.2 | 1.07 |
| 20°~30° | 4038.0 | 4931.3 | 1.22 |
| 30°~40° | 3649.7 | 5459.8 | 1.50 |
| 40°~50° | 3150.5 | 6333.2 | 2.01 |
| 50°~60° | 2555.6 | 7828.5 | 3.06 |
| 60°~70° | 1883.0 | 10695.9 | 5.68 |
| 70°~80° | 1153.2 | 17913.5 | 15.53 |
| 80°~85.05° | 293.0 | 18028.9 | 61.53 |
最后那一条带值得盯三秒:纬度 80° 以北的那一小圈,真实面积只有 293 万 km²(比格陵兰略大),可它在墨卡托地图上占了 1.8 亿 km²——差不多快 6 个非洲。
这也是为什么用两种方法算出来的格陵兰倍数略有差异:按纬度带全球均匀假设,格陵兰所在纬度带(59.8°~83.6°N)平均放大 12.16 倍;用真实轮廓积分是 15.5 倍。差异的原因是格陵兰在带内的"分布偏胖"——它的高纬部分(70°N 以北)占的经度比例比低纬部分更大,把加权平均值推向了更高放大的区域。
# 三、Web Mercator 的三个硬数字
1569 年,佛兰德斯制图师杰拉杜斯·墨卡托(Gerardus Mercator)发表了他那张著名的《新版并放大了的世界志,专为航海者修正》。他没有公开投影公式——那要等到 1599 年,英国数学家爱德华·赖特用逐纬度累加积分的方式把这张表的构造方法发表出来。
436 年后,Google Maps 在 2005 年把这张图的球面版本推给了几十亿人。为了让瓦片金字塔能整齐切块,它用半径 6378137 m(WGS84 长半轴)的正球代替椭球,社区给这个投影起了个非正式编号 900913(把「GOOGLE」用 leet 语写出来的样子),后来 EPSG 正式收编为 EPSG:3857,全名「WGS 84 / Pseudo-Mercator」——pseudo,就是 EPSG 在提醒你它连等角都不严格。
今天你手机里的地图,几乎都是 3857。它有三个值得记住的硬数字,全部可以自己推:
1. 纬度截断是 85.05112877981°。 Web Mercator 要把世界铺成正方形,正方形的半高是 πR(因为 x 方向半宽是 πR,从 −180° 到 180°)。解方程 y = R·ln tan(π/4 + φ/2) = πR,得 φ = 2·atan(e^π) − 90° = atan(sinh(π)),算出来就是 85.05112877981°。纬度比这更高的地方,公式里没有对应位置——不是画不下,是数学上不存在。
2. 这张世界图的总面积,恰好是地球表面积的 π 倍。 正方形边长 2πR = 40075.017 km,面积 4π²R²;地球表面积 4πR²。比值恰好是 π。每放大一个 zoom 级别,总像素翻四倍,这个 π 倍的超额比例始终不变。
3. 南极有 95.3 万 km² 直接不存在于 Web Mercator。 85.05°S 以南的球冠面积 = 2πR²(1 − sin 85.0511°) = 95.3 万 km²,那一圈几乎全是南极大陆,约占南极洲面积的 6.8%。所以你在 Google Maps 上永远看不到完整的南极——不是企鹅害羞,是被公式裁掉了。

顺带把瓦片坐标也算了一遍(slippy map 标准公式)。天安门在 z=12 的瓦片号是 (3372, 1552),z=18 是 (215830, 99328)。而 z=4 的时候,天安门和上海人民广场的瓦片号都是 (13, 6)——z=4 一张 256 像素的瓦片就装下了大半个中国,此时每像素在赤道对应 9784 米。
# 四、前端的坑:EPSG:3857 里的"米"不是米
这是写地图相关代码的人迟早会撞上的一堵墙。
3857 坐标的单位名义上是米,但在 60°N,3857 里 1000 个单位的实际地面距离只有约 501 米。我用文森蒂公式(Vincenty,椭球上的精确测地线算法)做了交叉验证:从 (116°E, φ) 出发让 3857 的 X 增加 1000,反算地面实际距离;再让 Y 增加 1000 做同样的事:
| 纬度 | X +1000 对应地面东西向(m) | Y +1000 对应地面南北向(m) | 面积放大倍数 |
|---|---|---|---|
| 0° | 1000.00 | 993.31 | 1.01 |
| 20° | 940.06 | 934.47 | 1.14 |
| 40° | 767.11 | 764.05 | 1.71 |
| 60° | 501.26 | 500.38 | 3.99 |
| 80° | 174.21 | 174.17 | 32.96 |
注意东西向和南北向的数值几乎相等(差异来自椭球扁率,球模型下严格相等)——这正是墨卡托"等角"性质在数值上的体现:局部形状是对的,圆还是圆,但圆的半径错了。60°N 处面积放大 3.99,和理论值 sec²60° = 4 吻合。
落到日常场景:
同一张 z=12 的地图上,100 个像素在广州代表 3.52 km,在哈尔滨只代表 2.66 km(比值 1.32,等于 cos23.13° ÷ cos45.8°)。朗伊尔城(78.2°N)只有 7.8 米——是广州的 4.5 倍。
在 z=12 的 3857 平面上画一个"地面半径 1 km"的圆,需要的像素半径随纬度变化: 赤道 26.17 px,广州 28.45 px,北京 34.11 px,60°N 52.33 px,78°N 要 125.85 px——是赤道的 4.8 倍。如果你的代码里直接拿固定像素半径去画地理缓冲区(buffer),纬度一高就全错。
直接在 3857 数据上算多边形面积,结果随纬度虚高:60°N 的多边形算出来是真实面积的 4 倍。这就是为什么 Turf.js 之类的库要在球面/椭球上做面积计算,而不是在 3857 平面上。
还有一个更深一层的取巧:3857 用正球半径 6378137 m 代替 WGS84 椭球。我把球面墨卡托和椭球墨卡托(把 WGS84 第一偏心率 e 塞回 y 公式的那一版)都算了一遍,两者的 Y 坐标差异:
| 纬度 | 球墨卡托 Y(m) | 椭球墨卡托 Y(m) | 差值(km) |
|---|---|---|---|
| 10° | 1 118 890 | 1 111 475 | 7.4 |
| 30° | 3 503 550 | 3 482 189 | 21.4 |
| 45° | 5 621 522 | 5 591 296 | 30.2 |
| 60° | 8 399 738 | 8 362 699 | 37.0 |
| 75° | 12 932 243 | 12 890 914 | 41.3 |
中纬度处系统性的 30~40 km 偏差。对导航无所谓(相对形状是对的),对"把两个数据源精确对齐"的 GIS 工程来说,这个误差足够让图层错位半个城市。
# 五、为什么五百年不换:因为水手要的是直线
既然变形这么夸张,为什么航海图、乃至整个 Web 地图,都赖在墨卡托上?
答案是墨卡托当年为了航海者做的那个取舍:等角投影(conformal)保证图上任何一点的局部方向关系与地表一致,于是"保持固定罗盘航向的航线"——恒向线(rhumb line / loxodrome)——在图上是一条直线。
1569 年的船长没有 GPS,只有罗盘。图上量一条直线,读出角度,罗盘保持这个角度开就行。这个性质在当年价值连城——代价是高纬度面积爆炸,而当年没人在乎北边有什么。
恒向线要付的代价可以精确计算。它的球面距离公式是:
Δψ = ln tan(π/4 + φ₂/2) − ln tan(π/4 + φ₁/2)
d = R · √(Δφ² + q²·Δλ²) 其中 q = Δφ/Δψ
我拿文森蒂椭球距离做基准,把几条航线都算了一遍:
| 航线 | 椭球大圆(km) | 恒向线(km) | 恒向线多走 | 恒向线航向 |
|---|---|---|---|---|
| 上海 → 悉尼 | 7852.8 | 7892.3 | +0.50% | 156.7° |
| 伦敦 → 纽约 | 5585.2 | 5800.6 | +3.86% | −102.0° |
| 深圳 → 法兰克福 | 9147.0 | 9752.8 | +6.62% | −71.7° |
| 上海 → 洛杉矶 | 10455.0 | 11277.4 | +7.87% | 88.4° |
| 北京 → 纽约 | 11014.5 | 14396.1 | +30.70% | 89.6° |
规律一目了然:航线越接近南北向,恒向线越接近大圆(上海 → 悉尼只多 0.5%);越接近东西向、纬度越高,亏得越多——北京飞纽约,恒向线要求你保持 89.6°(几乎正东)一路开到底,比大圆多飞 3382 km,三分之一。
真实航班走的是大圆:北京飞纽约的航迹在墨卡托地图上是一条明显向北弯的弧线,途经北极圈附近——在地图上看着"绕远",实际是最短的。看航迹图觉得"飞机为什么绕路"的人,基本都是被墨卡托骗了。

# 六、等积的代价:没有免费的午餐
那么换个面积正确的投影不就完了?问题在于任何投影都必须弄坏点什么——球面不可能无变形地展开成平面,这是高斯早就证明了的(球面高斯曲率非零,平面为零,等距映射不存在)。区别只是:你想保什么,坏什么。
把这件事量化的标准工具是 Tissot 指标椭圆:在球面上放一个无限小的圆,投影后看它变成什么样。用数值微分算出每个投影在各纬度的指标椭圆,就能读出四个量:沿经线的缩放 h、沿纬线的缩放 k、面积因子(h·k·sinθ′),以及最大角度变形 ω:
| 投影 | 纬度 | h(经线) | k(纬线) | 面积因子 | 最大角变形 ω |
|---|---|---|---|---|---|
| 墨卡托 | 0° | 1.000 | 1.000 | 1.00 | 0.00° |
| 墨卡托 | 45° | 1.414 | 1.414 | 2.00 | 0.00° |
| 墨卡托 | 60° | 2.000 | 2.000 | 4.00 | 0.00° |
| 墨卡托 | 75° | 3.864 | 3.864 | 14.93 | 0.00° |
| 等距圆柱 | 60° | 1.000 | 2.000 | 2.00 | 38.9° |
| 兰勃特等积圆柱 | 60° | 0.500 | 2.000 | 1.00 | 73.7° |
| 兰勃特等积圆柱 | 75° | 0.259 | 3.864 | 1.00 | 122.0° |
| 摩尔维特 | 45° | 0.975 | 1.026 | 1.00 | 2.95° |
| 摩尔维特 | 75° | 0.679 | 1.472 | 1.00 | 43.2° |
| Equal Earth(2018) | 45° | 0.958 | 1.044 | 1.00 | 4.96° |
| Equal Earth(2018) | 75° | 0.466 | 2.146 | 1.00 | 80.1° |
这表把每种投影的"人设"暴露得干干净净:
墨卡托:ω 一列全是 0.00°——任何纬度、任何位置,最大角度变形为零。这就是"等角"的严格含义:指标椭圆永远是个正圆(虽然半径被放大到 3.86)。形状处处保真,面积无条件爆炸。
兰勃特等积圆柱:面积因子一列全是 1.00,但代价触目惊心——75°N 处经线方向被压到 0.26 倍、纬线方向拉到 3.86 倍,指标椭圆被压成 1:14.9 的细长条,最大角变形 122°。这就是"等积圆柱投影里加拿大看着像一条腊肠"的数学出处。
摩尔维特(Mollweide):45° 以内最大角变形不到 3°,是这份表里综合表现最好的,但它是个椭圆边界的"世界地图专用"投影,没法做瓦片金字塔——你没法把一个椭圆铺满平面格子。
Equal Earth:2018 年才发表的投影,设计目标就是"要摩尔维特的等积,又要矩形边界好看",45° 处 ω 只有 4.96°。发布当年就被 NASA 拿去画全球温度图了。

顺便说一句历史上那场著名的投影战争:1970 年代,德国历史学者阿诺·彼得斯大力推广一种等积圆柱投影(其实 1885 年詹姆斯·高尔就提出过),以"第三世界被墨卡托矮化了"为卖点进行宣传,引发地图学界的强烈反弹——因为它的形状变形比墨卡托难看得多(上表的兰勃特等积圆柱就是它的近亲)。1989 年北美地图学组织甚至联合发表声明,公开反对"用矩形等积投影解决墨卡托问题"的营销。等积没赢,等角也没赢——因为这道题本来就没有全解。
# 最后
写完这篇我盯着手里的三个数字看了很久:
- 真实世界里,非洲是格陵兰的 14.02 倍;
- 墨卡托上,格陵兰反过来比非洲大 16%;
- 而我们大多数人,是在第二套数字里建立的"世界有多大"的直觉。
没什么惊天动地的结论。只是又一次确认了一个老规律:你看到的每一张图,都是一次取舍的结果。墨卡托保了方向和形状,扔了面积;兰勃特保了面积,扔了形状;Web Mercator 保了瓦片好切,扔了椭球精度。没有一张图是错的,也没有一张图是全对的。
地图如此,别的图也一样——包括那些看起来不像图的图:排行榜、指标看板、时间线。它们的"投影公式"通常没有写在角落里,但它一定存在。
下次打开地图,可以顺手做一件事:把地图拖到哈尔滨,再拖到广州,注意比例尺那个数字的变化。它没变,变的是这个数字愿意撒多大谎。
附注:文中所有计算的具体数值复现——墨卡托投影 y 公式、纬度带闭式积分、Tissot 指标的数值微分、恒向线距离、Vincenty 椭球测地线——都是十几行三角函数就能重写的,感兴趣的可以自己搭一遍,跑出来的数字应该和本文逐位一致(Vincenty 部分与椭球基准有关,允许最后两位浮动)。