返回知识库

GIS

阅读指南

阅读指南 封面
GISengine-webgpu阅读指南

直觉问题

如果你写过前端、用过 Three.js 或 Babylon.js,第一次打开 Web GIS 引擎的代码,多半会有同一种感觉——

“经纬度我熟啊,经纬度怎么就变成了屏幕上的瓦片?为什么左下角显示的 (116.40°E, 39.90°N),和 DOM 的 (x, y) 完全不是一回事?”

更让人崩溃的是术语:WGS84、ECEF、Web Mercator、EPSG:3857、四叉树、LOD、DEM、大地水准面、RTE、3D Tiles——每一个看上去都”应该是常识”,但合在一起就构成一道密不透风的墙。

这套笔记要回答的就是这两个朴素问题:

  1. Web GIS 这套体系,到底是怎么搭起来的? 12 篇笔记能不能串成一张完整的知识地图?
  2. 作为前端转 GIS 的人,该按什么顺序学,学到第几篇能干什么活?

读完这篇阅读指南,你会得到:一张依赖图、一张知识全景图、一份 20+ 术语速查表、3 条按目标人群裁剪的学习路径。

NOTE

这套笔记只讲 GIS 知识本身,不绑定任何具体引擎的源码实现。你可以把这里讲的概念直接迁移到 Cesium、Mapbox、OpenLayers 等任何 Web GIS 系统。

学习路线图:12 篇笔记的依赖关系

12 篇笔记按”读者学习路径”而非”学科分类”排序。每篇笔记都假定你已读完它的前置依赖——所以跳读有风险,至少要按依赖图走。

图 1:12 篇笔记的依赖关系(A → B 表示读 B 之前要先读 A)

关键路径:00 → 01 → 02 → 03 → 06 → 07 → 08 → 11。这条链覆盖了”从经纬度到屏幕像素”的最完整推理路径,缺一不可。

可并行:04(影像)和 05(地形)可以在 06 之前任意时间并行学习;09(3D Tiles)和 10(调优手册)可以在 08 之后并行。

TIP

如果你时间有限,至少要读完关键路径上的 7 篇,其他可以按需查表。每篇笔记结尾都给”下一篇导引”,跟着走不会迷路。

GIS 知识全景图:地图渲染金字塔

Web GIS 的所有概念,可以归纳成一座”金字塔”——从底部的真实地球,逐层抽象、逐层变换,最终到达顶部的应用层。每一层都把上一层的数据”加工”成下一层能用的形式。

图 2:地图渲染金字塔——每一层都是一次抽象跳跃
处理对象输入输出涉及笔记
① 真实地球大地测量学地壳形状、重力场数学椭球面 + 高程基准02、05
② 坐标与投影坐标变换经纬度 (度)投影米或笛卡尔 (米)02
③ 瓦片金字塔空间索引投影后的全球地图z/x/y 编号的瓦片树03
④ 图层与数据数据加载瓦片 URL、DEM、3D TilesGPU 纹理 / 几何04、05、09
⑤ 渲染管线GPU 绘制纹理 + 几何 + 着色器屏幕像素01、08
⑥ 实体与交互对象系统矢量数据、鼠标事件标注、飞行、拾取结果06、07
⑦ 应用层业务集成全部上述能力Web 地图产品10、11

为什么是金字塔? 因为下层概念是上层的前提——你不能在不理解瓦片的情况下谈图层,不能在不理解坐标系的情况下谈瓦片编号。这就是为什么这套笔记必须按依赖图读。

瓦片数量的指数增长也是金字塔形:

Ntiles(z)=4zN_{\text{tiles}}(z) = 4^z
缩放级别 z瓦片数量单张瓦片覆盖
01整个地球
14一个半球
51 024一个中型国家
10约 100 万一座大城市
15约 10 亿几条街道
18约 680 亿一栋楼

术语速查表(20+ 一句话定义)

这是读者入口;写作内部用的更详细术语表不发布。这里每条 ≤ 30 字,足够你认出这个词;要理解还要去对应笔记读推导。

坐标系与投影

术语一句话定义笔记
经纬度(lonLat)地球表面的”地址坐标”,单位是度02
地理范围(Extent)用西南角和东北角两个经纬度点定义的矩形选区03
WGS84 椭球全球通用的标准地球数学形状(赤道略鼓)02
大地水准面(Geoid)真实重力场下的海平面延伸,凹凸不平05
ECEF以地球质心为原点的三维笛卡尔坐标,单位米02
投影(Projection)把球面坐标变换为平面坐标的方法02
EPSG 编码坐标参考系的国际唯一编号(4326 / 3857 等)02

瓦片与 LOD

术语一句话定义笔记
瓦片(Tile)按 z/x/y 编号的小图,通常 256×256 像素03、04
瓦片金字塔缩放级别每升一级,瓦片数量 4 倍增长03
四叉树(quadtree)每个瓦片分裂为 4 个子瓦片的递归索引结构03
LOD按相机距离选不同细节级别的策略03
视锥剔除跳过相机视锥之外的对象不渲染03、06

图层与数据

术语一句话定义笔记
图层(layer)地图上叠加的”透明胶片”(底图、道路、标注等)04
DEM数字高程模型,每像素存一个海拔值05
RGB / BIL 编码把高度值编码进像素颜色或二进制的两种方案05
3D TilesOGC 三维空间数据流式传输标准09
OGC 标准开放地理信息协会维护的国际 GIS 标准族04、09

渲染与几何

术语一句话定义笔记
渲染循环每秒约 60 次重复执行”输入 → 状态 → 剔除 → 绘制 → 提交”的循环01、08
视锥体(Frustum)相机能看到的空间区域(截头锥体)06
FramebufferGPU 离屏缓冲,按用途分 Color/Depth/Picking/HDR/Screen 等01、08
Tone Mapping把 HDR 高动态范围颜色压回显示器 LDR 范围的算法08
大气散射阳光被大气分子 / 气溶胶 / 臭氧散射的物理过程08
RTE相对视点高精度算法,避免大坐标抖动06

系统架构与交互

术语一句话定义笔记
渲染场景所有可渲染对象的容器(相机、灯光、行星、实体)01
渲染节点渲染场景内可独立渲染的单元01
行星节点渲染场景内的地球对象,挂载四叉树01、03
瓦片段单个瓦片的几何 + 影像 + 高程数据03
实体(Entity)地图上的对象(点、线、面、3D 模型)07
WorkerWeb Worker 异步线程,处理耗时任务不卡帧05
Picking(拾取)把鼠标点击的屏幕坐标反查为对象 ID06

NOTE

表里的”渲染场景""渲染节点""行星节点""瓦片段”是概念性中文——它们对应到不同引擎里的”场景对象”等具体类名可能不同,但概念是统一的。本系列所有笔记都按概念性中文叙述,不绑定具体引擎的实现细节。

前置知识边界:你已知什么,需要新学什么

这套笔记面向”懂前端 TS、用过 WebGL 库(Three/Babylon),但不懂 GIS”的入门者。下面这张对比表帮你快速定位自己的起点。

类别你应当已知你需要新学笔记
语言/框架TS / async / Promise / 模块 / 装饰器
浏览器 APIDOM / Canvas / WebGL 基础 / Web Worker
通用图形学顶点/片元着色器、纹理、深度测试、混合、视锥剔除的概念
线性代数向量、矩阵、四元数、坐标系变换
浮点精度IEEE 754 的概念RTE 高精度算法(GIS 大坐标抖动)06
经纬度知道是”度数”球面坐标不能直接做平面计算02
投影听过墨卡托Web 墨卡托的失真与 ±85° 限制02
椭球WGS84 长半轴 6 378 137 m、扁率 1/298.25702
大地水准面椭球面 vs 大地水准面差异最大 ±100 m05
瓦片z/x/y 编号数学、四叉树空间索引03
LOD听过游戏里的 LOD屏幕空间误差、几何误差、LOD 切换策略03、09
图层XYZ / WMS / WMTS 协议差异、OGC 标准04
高程RGB / BIL 编码、Mapbox Terrain-RGB 公式05
Tone MappingReinhard / ACES / Cineon 算法差异08
大气散射Rayleigh / Mie / Ozone 三种散射物理08
3D TilesboundingVolume、geometricError、refine09

TIP

如果你已经熟悉 WebGL 渲染管线,可以快速浏览 01 篇的渲染循环骨架部分,把节省的时间留给 02 篇(坐标与投影)——那是 GIS 入门最大的认知坎。

学习路径建议:3 条按目标裁剪的路线

不同读者的目标不同,没必要所有人都按 12 篇顺序读完。下面是 3 条典型路径,每条都能让你到达特定目标

路径 A:应用开发者(短路径,先跑起来)

目标:在网页上叠加底图、画矢量对象、加载 BIM 模型,做出可用的 Web 地图应用。

顺序:00 → 04 → 07 → 09 → 11

顺序笔记学完你能干什么
100 阅读指南知道整体知识地图
204 影像图层加载 OSM / 卫星底图
307 矢量与实体画点 / 线 / 面、加标注
409 3D Tiles 与 BIM加载城市倾斜摄影或 BIM
511 综合练习拼装一个完整 demo

可跳过:02、03、06、08 的数学推导细节(坐标系、四叉树、相机、shader)——这些是引擎内部机制,应用层不直接面对。遇到坐标转换问题再回查 02

路径 B:引擎贡献者(深度路径,理解机制)

目标:能阅读并修改引擎源码,或自己实现一个 Web GIS 引擎。

顺序:00 → 01 → 02 → 03 → 06 → 08 → 10 → 11

顺序笔记学完你能干什么
100 阅读指南知道整体知识地图
201 第一帧看懂渲染循环与首帧时序
302 坐标与投影写经纬度 ↔ ECEF ↔ 屏幕的变换
403 四叉树与 LOD实现瓦片调度与剔除算法
506 相机与拾取实现 RTE 高精度与 Picking
608 渲染管线写 shader、调 Tone Mapping、加大气
710 调优手册排查帧率瓶颈、内存泄漏
811 综合练习验证全栈理解

不可跳过:每一篇都关键。额外建议:每读完一篇,对照一个开源引擎(Cesium、Mapbox GL)的实现验证理解。

路径 C:学术研究(理论路径,攻数学)

目标:在 GIS / 计算机图形学领域做研究、发论文、写教材。

顺序:00 → 02 → 05 → 08 → 09(+ 自选 03 / 06)

顺序笔记重点攻什么
100 阅读指南知识全景
202 坐标与投影大地测量学、椭球数学、EPSG 体系
305 地形与 Worker大地水准面、DEM 编码、EGM2008
408 渲染管线Rayleigh / Mie / Ozone 物理推导、Nishita 模型
509 3D Tiles 与 BIMOGC 标准、geometricError 数学定义

额外建议:每篇笔记的”延伸阅读”链接都点开看一遍,包括 OGC 标准原文和学术论文(如 Nishita 1993 大气散射)。

自测题

读到这里,先别急着进入 01。试着回答下面几个问题——能答出 3 题以上再继续,答不出就回看上面的对应章节。

  1. 金字塔下层:为什么经纬度是”球面坐标”而不是”平面坐标”?球面坐标做平面距离计算会发生什么?
  2. 瓦片数学:缩放级别 z=12 时,全球总共有多少张瓦片?为什么是这个数量级?
  3. 依赖关系:为什么 06 篇(相机与拾取)依赖 02(坐标)和 03(四叉树)两篇,而不是只依赖其中一篇?
  4. 学习路径:如果你的目标是”做一个能加载卫星图、画路径、点击拾取的地图应用”,会选路径 A、B、C 哪一条?为什么?
  5. 概念性中文:为什么这套笔记用”渲染场景""渲染节点""瓦片段”这种中文词,而不是直接用某个具体引擎的类名?

IMPORTANT

答案不在本篇——回答这些问题需要你主动回忆前面读过的内容。如果只能”看着面熟”但说不出来,说明还没真正掌握,建议回看。


下一篇导引01 第一帧 将打开渲染循环这个黑盒——从调用引擎初始化的那一刻起,到地球第一次出现在屏幕上的那一帧,中间到底发生了什么。