Web墨卡托投影

<image>

Web墨卡托投影（Web Mercator）是墨卡托投影的一种变体，被Web地图应用业界普遍采纳。2005年，随着Google地图的采用，这一标准开始崭露头角。几乎所有主要的在线地图提供商都使用这一标准，包括谷歌地图、Mapbox、Bing地图、OpenStreetMap、MapQuest、Esri等等。其正式的EPSG标识符是EPSG:3857，不过历史上也曾使用过其他标识符。

## 性质

Web墨卡托是墨卡托投影地图的一个轻微变体，主要用于基于Web的地图程序。对于小比例尺地图，它与标准的墨卡托用的公式一样。但Web墨卡托在所有比例尺下都使用球面公式，但大比例尺的墨卡托地图通常使用投影的椭球面形式。这种差异在全球比例尺下是察觉不到的，但会导致局部地区的地图稍微偏离同一比例尺的真正的椭球面墨卡托地图。

虽然Web墨卡托的公式是墨卡托的球面形式，但地理坐标必须得以WGS 84椭球面基准获得。此差异会导致投影略微不符合正形投影。人们普遍对Web墨卡托与标准墨卡托的不同认识不足，导致了相当多的混乱和误用。错误转换造成的误差在地面上可以达到40 km。

出于所有这些原因，美国国防部通过美国国家地理空间情报局宣布官方用途不可以使用这种地图投影。

### 公式

Web墨卡托的公式与标准球面墨卡托的公式基本相同，但是在应用缩放之前，将“世界坐标”调整为使得左上角为(0, 0)，右下角为(256, 256)：

$$\begin{align} <pre> x &= \left\lfloor\frac{256}{2\pi} 2^{\text{zoom level}} (\lambda + \pi)\right\rfloor \text{ pixels}\\[5pt] y &= \left\lfloor\frac{256}{2\pi} 2^{\text{zoom level}} \left(\pi - \ln \left[\tan \left(\frac{\pi}{4} + \frac{\varphi}{2} \right) \right]\right)\right\rfloor \text{ pixels} </pre> \end{align}$$

其中 λ 是用弧度表示的经度，而 φ 是用弧度表示的大地纬度。

因为墨卡托将极点投影在无穷远处，所以使用Web墨卡托投影的地图无法显示极点。Google地图之类的服务会在南北纬85.051129°切断覆盖。这不会对街道地图造成什么影响，因为这些服务的主要目的不在于显示完整的地球。85.051129°这个值是能让整个投影地图变成正方形的纬度，在 y = 0 的情况下计算为 φ 就会得到：

$$\begin{align} \varphi_{\text{max}} = \left[2\arctan(e^{\pi}) - \frac{\pi}{2}\right] \end{align}$$

### 球面与椭球面的混合

这个投影既不是严格的椭球面，也不是严格的球面，EPSG的定义说这个投影“使用椭球坐标系的球面演化”。它是建立在地球表面的WGS84椭球面模型定义的地理坐标上的，但在投影的时候却仿佛坐标是定义在球面上的。这种做法对于小比例尺的地图（例如整个世界）是没有争议的，但是在大比例尺地图（例如城市或省份）中却很少有先例。

### 优点和缺点

Web墨卡托是一个球面墨卡托投影，因此它具有与球面墨卡托相同的属性: 不管在哪，北都在上方；子午线都是等距的垂直线，角度在局部是正确的（假设是球面坐标），而且面积会随着离赤道越来越远而膨胀，以至于极地区域被严重夸大。椭球面墨卡托具有同样的属性，但是它将地球模拟为一个椭球体。

然而，与椭球面墨卡托不同的是，Web墨卡托并不十分符合正形投影。这意味着地面上线条之间的角度，绘制到地图中角度会发生变化，尽管它们不会偏离到肉眼可以察觉的程度。由于Web墨卡托指定了在WGS 84椭球面模型上给出的测量坐标，因此会有偏离。通过将测量坐标投影到球面上，角度关系会发生轻微的变化，就像在一个球面上测量一样。这是标准球面墨卡托投影法的标准做法，但与Web墨卡托不用的是，球面墨卡托通常不用于局部区域的地图，例如街道地图，因此绘图所需的位置精度通常小于使用球面公式引起的角偏差。Web墨卡托的好处在于，球面形式的计算比椭球面形式的计算简单得多，因此只需要一小部分计算资源。

## 识别码

由于EPSG注册通过迟缓，Web墨卡托有了好几个不同的空间参考系识别码（SRID），包括EPSG:900913、EPSG:3785和EPSG:3857。

### EPSG:900913

该投影坐标参考系最初缺少一个官方的SRID，OGP的地理信息学委员会（又名EPSG）的大地测量小组委员会拒绝提供一个SRID，并称“我们已经审查了微软、谷歌等公司使用的坐标参考系统，并认为它在技术上有缺陷。我们不会为了收录这些不适当的大地测量和制图，而降低EPSG数据集的价值。” 非官方的代码“EPSG:900913”（Google转写为数字）开始被使用。它最初由Christopher Schmidt在他的Technical Ramblings博客中定义，并在OpenLayers 2中进行了编码，从技术上讲，它将使OpenLayers成为SRID权威。

### EPSG:3785

2008年，EPSG提供了官方识别码EPSG:3785，其官方名称为“Popular Visualisation CRS / Mercator”，但指出“它不是一个正式的大地测量系统”。该定义使用了地球的球面（而非椭球面）模型。

### EPSG:3857

当年晚些时候，EPSG提供了一个更新的识别码EPSG:3857，其正式名称为“WGS 84 / Pseudo-Mercator”。该定义转换为使用WGS84椭球面（EPSG:4326），而不是使用球面。

虽然这一投影与Google密切相关，但在EPSG的标准里，把微软列为了“信息来源”。

### 其他识别码

其他使用过的识别码有ESRI:102113、ESRI:102100和OSGEO:41001。

ESRI:102113对应于EPSG:3785，而ESRI:102100对应于EPSG:3857。

## WKT定义

该投影覆盖了经度从−180°到180°，南北纬85.05°之间的地球。使用坐标参考系的知名文本表示（well-known text representation of coordinate reference systems，简称WKT），EPSG:3857定义如下：

```
PROJCS["WGS 84 / Pseudo-Mercator",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Mercator_1SP"],
    PARAMETER["central_meridian",0],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",0],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["X",EAST],
    AXIS["Y",NORTH],
    EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs"],
    AUTHORITY["EPSG","3857"]]
```