旧金山的陡坡一向是行人和骑行者的噩梦。从 Filbert 街的夺命阶梯到 Telegraph Hill 的断崖式起伏,在这座城市出行,两点之间直线最短往往意味着体力透支。然而打开主流的 Google Maps 或 Apple Maps,系统给出的路线通常只有一条经过黑盒加权的折中推荐,至多附带一句轻描淡写的坡度提示。

刚上线的开源地形路由项目 Flatten SF 试图用数学方法打破这种黑盒。它把整座城市的街道图和高程模型塞进浏览器,让用户通过一个滑动条,在最短与最平之间自由拉扯。它用扎实的数据证明了一个违反直觉的规律:步行者平均只需多走 14% 的距离,就能抹掉全城路途中近 39% 的累计爬升。这不仅是一次巧妙的交互演示,更是一场对传统地图导航工程范式的轻量化反叛。

16万条路段压进4.6MB:纯前端毫秒级求解

高精度地形路由以往高度依赖昂贵的云端地理数据库,计算开销巨大。Flatten SF 则选择完全甩开后端服务器,在用户本地的浏览器端直接完成全城级双目标寻路。

为了在极其有限的网页内存中跑通复杂算法,该项目在数据底层做了极为克制的减法。街道网络采用 Overture 发布的 2026-08-19.0 版本交通路段与连接器,遵循 ODbL 协议开源,全城涵盖约 16 万条有向路段;高程数据则采自美国地质调查局 USGS 3DEP 的 1 米分辨率裸地激光雷达。原始高程经过 3 米高斯预滤波与 5 米采样平滑,剔除 0.5 米以内的微小抖动,最终与独立数字高程模型交叉验证的均方根误差压至 0.68 米。

更关键的工程突破在数据压缩。开发者将全城 18.4 MB 的图结构提炼打包为扁平的类型化数组,整体体积大幅压缩至 4.6 MB。依托紧凑的压缩稀疏行邻接表与扁平二叉堆,浏览器求解一次跨城路径耗时仅需 0.1 至 0.6 秒。

Flatten SF 核心性能与空间指标 4.6 MB 打包图结构体积 由 18.4MB 压缩打包 0.1-0.6s 纯前端算路耗时 无服务器毫秒级响应 -39% 平均爬升削减 只需增加约 14% 距离 0.68 m 激光雷达验证误差 USGS 1米高程平滑过滤

双目标帕累托前沿:打破传统地图的黑盒算力

在地理信息算法中,找一条平缓路线从来不是给坡度加个惩罚参数那么简单。距离与爬升是天然对立的两个目标,传统导航软件惯用的加权单目标最短路径,在数学上必然会漏掉大量非凸折中解。

Flatten SF 的核心在于采用了双目标启发式搜索算法 BOA* 结合支配剪枝。算法直接计算出两点之间的帕累托前沿,也就是所有没有任何一条路线能在距离和爬升两项指标上同时击败它的最优解集合。为了排除漫无边际的极端绕路,系统设定爬升与水平距离的比率上限为 200,即每节约 1 英尺爬升最多允许增加 200 英尺步行,超过这一边界的路线直接截断。

在实际测试中,这种非凸解的价值立竿见影。以一段典型跨区路线为例,距离仅需增加 0.4 英里,增幅不过 8%,却能直接减少 252 英尺爬升,降幅达到 48%。通过滑动条,用户不再被动接受算法推荐的唯一路线,而是自己决定今天愿意用多少体力去兑换时间。

路线优化的本质不是替用户做主,而是把真实代价的刻度盘还给双脚。
导航路线决策逻辑对比 商业地图:加权单目标 Shortest Path • 将距离与坡度混合为固定权重成本 • 数学局限:无法捕获凹面折中解 • 结果:输出单一路线,用户缺乏自主权 Flatten SF:双目标 BOA* 帕累托前沿 • 严格保留所有非支配解集 • 引入边界截断比(1:200)防止荒谬绕路 • 结果:无级滑动条直观量化体力与时间代价
  • 结论.双目标启发式搜索与前端 Typed Arrays 的结合,证明了高精地理分析不再是云端算力的专利,轻量化 WebGIS 工具完全有能力在端侧提供更高的算法透明度。

几何最优与真实市井的落差

尽管技术圈对 Flatten SF 的纯前端架构和优雅交互赞誉有加,但若把它放入真实的消费级出行生态,这件作品目前更接近高分学术原型,而非能直接替代成熟软件的日常工具。

在实际出行市场中,Citymapper 早就针对旧金山推出了避开大坡的绕山模式,而 Flatpath 与 FlatRoute 等竞品则构筑了包含实时转弯导航、平坦度评分、GPX 轨迹导出和历史记录的完整工作流。Flatten SF 缺乏这些消费级功能,用户只能对着静态网页上的路线手动对照手机地图。

更深层的断层潜藏在数据底层。项目依赖的是裸地激光雷达,而不是真实的人行道铺装表面,桥梁与隧道大多依赖算法插值;因旧金山官方 DataSF 的 41 个社区数据不可用,项目只能降级使用 Code for America 的 37 社区镜像数据;由于缺少旧金山市交通局 SFMTA 的权威路况,骑行压力也只能全凭 OpenStreetMap 标签粗略推断。

最关键的分歧在于对平坦的定义。Flatten SF 优化的是累计爬升总量,但这并不等于行走舒适度。避开 100 米缓慢爬坡却被引入一段垂直攀爬的极陡短坡,或者为了维持平缓而拐入没有遮阳与路灯的机动车干道,在算法上都算最优解,在体感上却是十足的灾难。

  • 风险.对于推婴儿车、轮椅出行或夜间步行的群体,该工具计算出的平坦线路并未纳入路面平整度、红绿灯等待与街道治安等现实变量,盲目依从算法可能面临更恶劣的物理通行阻碍。