地理空间计算 可视化实验室
用交互式 SVG 呈现坐标系投影、空间索引、空间查询、路径规划、瓦片金字塔等 GIS 核心技术。八个模块,纯原生实现。
坐标系与地图投影
WGS84 球面坐标与 Web Mercator 投影的对比。Mercator 保角但面积随纬度放大,纬度越高变形越大。拖动纬度滑块观察单位圆的形变。
投影公式
Web Mercator (EPSG:3857) 把经纬度映射为平面坐标,纬度方向使用 y = R·ln(tan(π/4+φ/2))。它保角(局部角度正确),但不保面积——
scale(φ) = 1 / cos(φ) area_scale(φ) = 1 / cos²(φ)
在赤道(φ=0°)形变为 1,在纬度 60° 放大 2 倍,85° 放大 11.5 倍,趋近 90° 时趋于无穷。这也是 Web 地图在两极裁切的原因。
空间索引结构
R-Tree 用层次包围盒加速查询;GeoHash 用一维字符串编码二维区域,前缀共享即邻近;H3 用六边形离散全球网格。切换索引并执行区域查询。
R-Tree
R-Tree 把空间对象按 MBR(最小外接矩形)分组,父节点包含子节点 MBR 的并。区域查询只需对相交的 MBR 递归下探,避免遍历全部点。
空间查询操作
KNN 最近邻、范围查询、缓冲区(Buffer)分析是 GIS 三大基础查询。点击地图设置查询点,切换模式并调整参数。
KNN 查询
KNN 查找距离查询点最近的 K 个对象。朴素法 O(n),借助空间索引(如 R-Tree 的 Best-First 搜索)可达 O(log n) 级别。
地理编码与逆地理编码
正向编码:地址文本 → 经纬度。逆向编码:经纬度 → 最近地址。模糊匹配用编辑距离(Levenshtein)容忍拼写错误。输入地址进行匹配。
地理编码
输入地址文本,系统返回最匹配的位置及其经纬度。模糊匹配允许 1–2 字符差异,例如「天安门」可匹配「天安门广场」。
最短路径算法
Dijkstra 无启发地均匀扩展;A* 用到终点的估计距离引导搜索;Contraction Hierarchies 预先收缩节点、查询时走捷径。对比三者搜索范围。
Dijkstra
Dijkstra 以起点为中心逐层扩展,保证得到精确最短路径,但搜索范围大。点击“运行”观察算法扩展过程。
瓦片金字塔与 LOD
XYZ 与 TMS 两种瓦片索引:XYZ 的 Y 轴向下,TMS 的 Y 轴向上。每加深一级缩放,瓦片数 ×4。切换层级与方案观察金字塔结构。
XYZ 方案
XYZ(Google/OSM 标准):原点在左上,Y 向下递增;TMS:原点在左下,Y 向上递增。两者瓦片内容相同,仅 Y 坐标翻转:y_tms = 2^z − 1 − y_xyz。
空间聚合与聚类
热力图按密度叠加核函数;DBSCAN 按密度连通聚类,能发现任意形状簇并标识噪声。调整 ε 与 MinPts 观察簇结构变化。
DBSCAN
DBSCAN:若某点 ε 邻域内至少有 MinPts 个点则为核心点,核心点密度相连构成一簇;非核心且无核心邻居者为噪声。无需预设簇数。
矢量瓦片 vs 栅格瓦片
栅格瓦片是预渲染图片,放大即马赛克;矢量瓦片(MVT)传输几何与属性,浏览器按样式实时绘制,任意缩放保持清晰。拖动缩放对比。
矢量瓦片
MVT 用 Protocol Buffers 编码简化几何(线/面/点)与图层属性,客户端按样式(如 Mapbox GL)实时着色、可旋转可换肤;栅格瓦片体积大、不可重设样式,但渲染开销低。