你用过的几乎所有交互式地图都以Web Mercator绘制。Google Maps、OpenStreetMap、Mapbox、MapLibre、Apple Maps、MapAtlas:全部使用同一种投影,在EPSG数据库中标识为EPSG:3857。原因很简单:这种投影能够干净地适配瓦片网格,在任意缩放级别下保持形状可识别,是几乎所有商业地图场景的理想默认选择。
本文解析该投影的实际含义、产生面积失真的原因,以及何时应考虑使用其他方案。
30秒理解地图投影
地球近似为一个球体,计算机屏幕是平面的。地图投影是一个数学函数,将球面上的位置(经纬度)转换为平面上的位置(x, y)。每种投影都需要在形状、面积、距离或方向之间做出取舍,没有适合所有用途的完美投影,这也是制图学作为一门学科存在的原因。
Web Mercator保留形状和方向,但会扭曲面积。距赤道越远,要素看起来相对于地面真实大小就越大。
数学原理
对于以弧度表示的经度 lng 和纬度 lat:
x = R * lngy = R * ln(tan(pi/4 + lat/2))
其中 R 是投影使用的球形地球半径(EPSG:3857中为6378137米)。瓦片网格将这些x,y值映射为各缩放级别的整数像素坐标,缩放级别0将整个世界容纳在一张256x256的瓦片中,每增加一个缩放级别分辨率翻倍。
纬度范围被限定在约±85.0511度,因为该公式在两极处趋向无穷大。这就是为什么你见过的所有Web Mercator世界地图都会截去极地区域。
面积拉伸的原因
面积失真向极点增大的原因在于y轴与纬度不是线性关系。ln(tan(...)) 项使纬线间距随着向北或向南移动而增大。在赤道处,1度纬度与1度经度占用相同的垂直空间;而在赫尔辛基,1度纬度占用的垂直空间约为赤道处的两倍。
两个著名的副作用:
- 格陵兰岛与非洲。 在Web Mercator世界地图上,格陵兰岛看起来与非洲差不多大。实际上非洲约是格陵兰岛的14倍。同样的视觉效果让南极洲看起来像是世界底部的一条连续条带。
- 俄罗斯。 俄罗斯看起来面积巨大,因为其大部分领土位于垂直方向失真倍增的高纬度地带。
对于街道级地图,这些失真无关紧要。柏林某街区和悉尼某街区都能以接近真实的形状渲染。但对于跨大陆比较数值的专题地图,这种失真是真实存在的问题。
EPSG:3857与EPSG:4326
在任何地理空间代码库中,你都会看到这两个EPSG代码。
- EPSG:4326(WGS84经纬度):角度值。存储坐标的方式,GPS报告坐标的方式,GeoJSON编码坐标的方式。这是通用坐标系统。
- EPSG:3857(Web Mercator):一种投影。将坐标转换为显示像素的方式。
在生产环境中,除渲染边界外的所有地方都使用4326。PostGIS列:geometry(point, 4326)。JSON载荷:WGS84格式的 [lng, lat]。地图库输入:4326坐标,由渲染器内部处理投影转换。
将数据存储在3857中几乎总是错误的做法。一旦需要计算距离、切换地图服务商或通过GIS工具处理,你就必须转换回4326,而这个转换过程会损失精度。
Web Mercator赢得网络的原因
2005年Google推出Maps时,团队选择了Web Mercator,因为它是能在每个缩放级别生成方形瓦片的最简单投影。方形瓦片能干净地嵌入2的幂次方金字塔结构:缩放级别0有1张瓦片,缩放级别1有4张,缩放级别2有16张。此后每家主要网络地图服务商都沿用了这一惯例,因为瓦片集必须能够互换使用。二十年后,Web Mercator已成为不言而喻的默认选择。几乎每种地图样式、每个路径规划引擎、每个分析叠加层都默认使用3857,除非另有说明。
在网络上切换到不同投影意味着重建整个瓦片金字塔。这在技术上可行(Mapbox支持地球视图,deck.gl支持自定义投影),对于全球视图模式也越来越普遍,但对于街道级地图而言,Web Mercator的惯性非常强。
何时使用其他投影
几乎所有交互式城市、区域或国家级地图都使用Web Mercator即可。在两种场景下需要切换投影:
- 跨区域比较数值的全球专题地图,包括人口密度、选举结果、气候变量等任何视觉面积具有实际意义的场景。北美使用Albers等面积投影,欧洲使用Lambert正形圆锥投影,全球范围使用Mollweide或Equal Earth投影。
- 极地地图。Web Mercator在极地附近会失效,北极和南极应使用极球面投影。
用于内部GIS分析(空间连接、距离缓冲区、叠加分析)时,以WGS84角度值或针对特定国家设计的本地投影系统(UTM分带、欧洲的ETRS89)进行计算,仅在显示时进行投影转换。
MapAtlas的处理方式
MapAtlas为动态地图产品默认提供Web Mercator瓦片,采用所有现代网络地图库所期望的EPSG:3857 schema。Geocoding API和Search API返回的坐标始终是WGS84经纬度(EPSG:4326),让你存储权威坐标值,由渲染器负责处理投影转换。如需深入了解投影取舍及切换时机,请参阅地图投影指南。
常见问题
什么是Web Mercator?
Web Mercator是Google Maps、Bing Maps、Apple Maps、OpenStreetMap、Mapbox、MapLibre、MapAtlas及几乎所有交互式网络地图所使用的地图投影。它是经典墨卡托投影的变体,针对网络瓦片模型进行了适配。在EPSG大地测量数据库中,其标识符为EPSG:3857。该投影将经纬度坐标(球面上的角度值)转换为平面地图上的x,y坐标,实现了弯曲地球在矩形屏幕上的呈现。
Web Mercator为何会产生面积失真?
Web Mercator在局部范围内保留了角度和形状,但越远离赤道,要素的视觉面积就越大于实际面积。在斯德哥尔摩或安克雷奇,区域面积看起来约为真实大小的两倍;在投影的极地极限处(纬度约85度),失真趋向无穷大。这就是为什么格陵兰岛在Web Mercator地图上看起来与非洲差不多大,而实际上非洲是格陵兰岛的14倍。这种失真是保持形状可识别性所付出的代价,而这正是大多数用户所期望的。
EPSG:3857和EPSG:4326有什么区别?
EPSG:4326是WGS84经纬度坐标,即以两个角度值描述地球上某位置的通用方式。EPSG:3857是Web Mercator投影,将这些角度值转换为平面x,y坐标。存储坐标时使用4326(经纬度),显示时使用3857(投影像素)。现代地图库会自动处理转换,但在数据库或代码中混用两种坐标系是一类经典bug的来源。
何时应该使用其他投影方式?
通用交互式地图(街道地图、导航、门店定位、房产、车队追踪)使用Web Mercator即可。以下两种场景需要切换:一是在大陆或全球尺度上比较区域数值的专题地图,应改用等面积投影(Albers、Lambert、Mollweide);二是极地地图,应使用方位投影。内部GIS分析时,以WGS84经纬度工作,仅在显示时进行投影转换。

