——站在巨人的肩膀上:切片原理、国家标准与坐标系迷局
在第 1 至 4 章中,我们主要处理的是存储在本地硬盘上的“死数据”。无论是几百兆的 TIFF 影像还是几个 G 的 Shapefile,它们都是静态且有限的。然而,当我们试图构建一个“全球”级别的地图应用时,数据量将激增至 PB(Petabyte)级别。无论是存储成本还是网络带宽,都无法支撑将全量数据一次性传输给用户。
本章将带你进入在线地图服务(Online Map Services)的世界。我们将从底层的瓦片金字塔(Tile Pyramid)原理讲起,揭示 Google Maps、OpenStreetMap 和天地图是如何让全球地图在浏览器中“秒开”的。我们将重点剖析中国官方的天地(Tianditu)生态,深入解读其特殊的“底图+注记”分层架构、双重坐标体系(_c 与 _w 的爱恨情仇),以及如何在工程实践中解决最令人头疼的“火星坐标”偏移问题。
在线地图的核心思想是“分而治之”和“预渲染”。服务器不是实时画图,而是预先将地球按照不同的比例尺切成数以亿计的小图片(瓦片,Tile),存在服务器硬盘里。
想象一个金字塔结构:
%% ASCII 示意图:四叉树结构
[Level 0] 1 Tile (256x256 px)
|
+-----+-----+
| |
[Level 1] [Level 1] ... 4 Tiles
|
+--+--+
| |
[L2] [L2] ... 16 Tiles
假设瓦片大小为标准的 $256 \times 256$ 像素,对于 Web 墨卡托投影:
Rule of Thumb (尺度直觉):
- Level 0-2:看大洲轮廓。
- Level 10-12:看城市路网结构。
- Level 15:约为 4.7米/像素,能分清街区。
- Level 18:约为 0.6米/像素,能看清房屋轮廓。这是绝大多数民用卫星影像的极限。
- Level 20+:需要无人机或航空影像支持,能看清车辆、斑马线。
在调用地图时,你实际上是在和服务器“对话”。根据对话方式不同,分为三种流派:
| 协议 | 全称 | 性质 | 描述 |
|---|---|---|---|
| WMS | Web Map Service | 动态裁切 | OGC 标准。客户端发给服务器一个经纬度框 (BBOX),服务器现场画一张图传回来。优点:灵活、实时;缺点:慢,服务器负载高,无法缓存。 |
| WMTS | Web Map Tile Service | 静态切片 | OGC 标准。客户端请求特定的行(Row)、列(Col)、级(Level)。服务器直接返回预存的图片。优点:标准化、支持多种投影;缺点:配置 XML 极其复杂。 |
| XYZ | (Slippy Map) | 事实标准 | 互联网非官方标准(Google/OSM 推广)。直接通过 URL 模板访问文件路径。优点:极简、极快、缓存友好。 |
XYZ 的 URL 模板: 这是本章最重要的公式之一。几乎所有 Web 前端库都通过这个模板加地图: \(\texttt{https://domain.com/}\{z\}/\{x\}/\{y\}\texttt{.png}\) 其中 $z$ 是缩放等级,$x$ 是列号(经度方向),$y$ 是行号(纬度方向)。
天地图(Map World) 是国家地理信息公共服务平台。与商业地图(高德、百度)不同,它具有官方性(国界线绘制标准)、数据分层性和坐标纯净性。
天地图不提供“一张画好所有东西的图”,而是提供积木。你需要像做三明治一样叠加图层:
img):卫星遥感影像,那是地球的真面目。vec):只有背景色、水系、绿地和浅色道路,没有文字。ter):带有山体阴影(Hillshade)的晕渲图。cia):透明背景,上面印着白色的地名、名。cva):透明背景,印着黑色的地名。cta):配合地形图的注记。常见错误:初学者常犯的错误是只加载了
vec,结果发现地图上光秃秃的一个字都没有;或者只加载了cva,结果看到全是悬浮在空中的文字。必须成对加载。
天地图同时提供两套切片矩阵,通过 URL 中的后缀区分。选错后缀是导致地图变形、无法叠加的根源。
_c (代表 China 或 Cartesian)。_w (代表 Web)。一个典型的天地图 XYZ 请求链接如下:
http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=你的密钥
t0 - t7):为了突破浏览器对同一域名并发请求数的限制,通常随机轮询 t0 到 t7。img):指定数据类型。w):指定投影体系(这里是 Web 墨卡托)。本章的陷阱主要集中在坐标系和权限配置上。
这是在中国做地图开发最大的坑,没有之一。
致命错误场景: 你手头有一份从高德地图抓取的 POI 数据(GCJ-02),然后你把它叠加到了天地图(CGCS2000)上。 结果:所有的餐馆“漂移”到了马路对面或者河里。
解决方案:同系才能叠加。
- 要么把 POI 数据反向纠偏转回 WGS84/CGCS2000。
- 要么把天地图(如果可能)进行偏移(不推荐,底图很难偏)。
- Rule of Thumb:做专业 GIS / 遥感 / 科学数据分析,坚决使用 WGS84/CGCS2000,远离火星坐标。
_c 和 _wimg_c(经纬度投影)。_w 系列。_w (Web Mercator, EPSG:3857):方形瓦片,适合 Web 公众应用,兼容 Google/OSM。_c (LatLon, EPSG:4490):矩形瓦片,适合专业 GIS 与国家标准数据对接。