跑步不一定只能追逐配速和里程。它也可以是一场发生在真实街道里的探索游戏。

我一直觉得,跑步应用里的数字已经足够多了。
配速、心率、步频、里程、训练负荷……它们当然重要,但当跑步只剩下一组组不断刷新的数据时,一次原本轻松的出门,有时也会变成另一场需要完成的考试。
我想做一点不太一样的东西。
如果不要求跑得更快,也不要求跑得更远,只是邀请你去看看家门口那条从未拐进去的小路,会怎么样?
于是,我给自己开发的「快乐跑团」小程序加入了一个新功能:城市点亮计划。
它的规则很简单:
跑过一格,点亮一城。
把熟悉的街区变成一张待探索的地图
打开城市点亮计划后,发起人可以在地图上选择一个中心点,圈定一片真实区域,再设置挑战名称、覆盖范围和持续时间。
系统会把这片区域切分成许多六边形网格。一场挑战就这样生成了。

跑友到达挑战区域后,点击「开始探索点亮」,小程序会根据实时位置判断当前所在的网格。每经过一个新区域,对应的格子就会从雾蓝灰变成暖橙色,并伴随一次轻微震动。
地图不再只是一张用来导航的底图,而像是一块等待被填满的拼图。
你可以选择:
- 在周末慢慢点亮一座公园;
- 沿着江边探索一条从未完整跑过的路线;
- 和跑友分头行动,共同覆盖一片街区;
- 在排行榜里看看谁发现了更多角落。
我很喜欢这种反馈带来的心理变化。
平时跑步时,我们很容易沿着最熟悉的路线不断重复。但当地图上还有一格没有亮起时,人会自然地产生一点好奇:那边到底是什么?要不要顺路去看看?
它没有要求我提高配速,却给了我继续向前跑的理由。
为什么是六边形?
城市点亮计划使用了 Uber 开源的地理空间索引库 H3。
简单来说,H3 可以把地球表面划分成不同精度的六边形网格,并给每个网格分配一个唯一编号。只要把当前位置的经纬度交给 H3,就能知道用户正位于哪一格。
相比自己保存大量地图多边形,再判断定位点是否落在其中,这种方式更加直接:
获取当前位置
↓
转换为 H3 网格编号
↓
判断该网格是否属于挑战区域
↓
记录并点亮网格六边形也很适合表现“探索”。它不像行政区划那么生硬,又比普通方格更接近自然扩散的感觉。多个网格连接起来后,会形成一种很像游戏战争迷雾的视觉效果。
创建挑战时,系统还会根据覆盖范围自动调整网格精度:小范围使用更细的格子,大范围则适当降低精度,同时把单次挑战控制在不超过约 300 个网格,兼顾探索体验和地图渲染性能。
真正麻烦的不是网格,而是坐标偏移
开发这个功能时,最让我头疼的问题并不是 H3,而是国内地图常见的坐标系差异。
H3 使用 WGS84 坐标系,而腾讯地图展示使用 GCJ-02。如果直接把 H3 计算出的六边形绘制到腾讯地图上,整片网格会与真实道路发生偏移。
更麻烦的是,不同运行环境返回的位置坐标也不完全相同。例如 H5 原生定位可能返回 WGS84,小程序端则通常请求 GCJ-02。
最后,我把坐标处理拆成两条明确的路径:
网格计算:统一转换为 WGS84 → 交给 H3
地图展示:H3 边界 → 转换为 GCJ-02 → 绘制到腾讯地图客户端上传定位时会标记原始坐标类型,服务端只做一次标准化转换,尽量避免重复纠偏。
这是用户几乎感知不到的一层工作,但它决定了屏幕上的六边形能不能真正对准脚下的道路。
点亮不能完全由手机自己说了算
如果点亮结果只由客户端决定,修改请求或重复提交就可能让挑战失去意义。因此,客户端只负责获取位置和展示结果,最终是否点亮由 uniCloud 云函数判断。
服务端会完成几项基础检查:
- 经纬度和坐标类型是否合法;
- 当前定位精度是否可用;
- 移动速度是否存在明显异常;
- 用户所在网格是否属于当前挑战;
- 同一个网格是否已经点亮过。
每条点亮记录都由“挑战 ID、用户 ID、网格 ID”共同确定。同一个人在同一场挑战里反复经过同一格,也只会记录一次。
这套机制目前只能算基础异常过滤,还不是严格意义上的运动反作弊系统。GPS 漂移、模拟定位和多设备协同仍然是很难彻底解决的问题。不过对于轻量、偏社交的城市探索活动,它已经能够挡住大多数无意的重复记录和明显异常数据。
我希望它不是另一张数据报表
在城市点亮计划里,我没有把重点放在增加更多运动指标,而是尽量围绕几个简单动作展开:
- 圈定一个值得探索的地方;
- 邀请朋友加入;
- 真实地跑到那里;
- 看着地图一点点亮起来。
目前功能已经包含挑战创建、地图预览、实时点亮、在线参与者提示、探索进度、排行榜和分享。

下一步,我更想继续完善“探索之后留下了什么”。比如个人点亮地图、长期城市版图、主题路线,以及不以速度为唯一标准的跑团协作玩法。
跑步已经有很多衡量成绩的方式。我希望城市点亮计划提供的是另一种东西:用脚步重新认识生活半径的机会。
如何体验
小程序名称:快乐跑团渝你同行

如果你也喜欢跑步、地图或带有一点游戏感的户外探索,欢迎体验后告诉我感受。
我尤其想知道:
- 你更想点亮家附近的街区,还是一整座公园?
- 你会选择独自探索,还是和跑友共同完成?
- 对这种基于真实位置的玩法,你最在意体验、隐私还是防作弊?
这些答案,也许会决定这张地图接下来长成什么样子。
