解决了什么问题

每天地铁口到公司 1.2 公里,走了快 300 次,我想"看见"这件事。跑步 App 只关心配速心率,地图 App 只想给我导航。我不需要谁告诉我跑得快不快,我就想看到"这条路被我踩熟了"这个事实本身。找了一圈没有满意的产品,干脆自己写了一个,叫「像素征途」。

做完之后回头看,这个需求其实特别适合 HarmonyOS 的场景化能力——持续定位、低功耗后台、本地数据安全,这些正好是鸿蒙在系统层面做得比较深的方向。下面聊聊我的实现思路和踩过的坑,给同样在做 LBS 类应用的鸿蒙开发者一些参考。

核心玩法:像素格子点亮 + 颜色升级

整个地图被切成像素格子。走过一个格子,它从灰色点亮。同一个格子走的次数越多,颜色逐级升级——走得最多的路最终变成金色。我通勤那条线现在已经是一整条金色大道了,看着有种奇怪的满足感。

除了点亮地图,还有一套养成系统:8×8 的领地征服(把家附近的格子全部点亮算占领)、科技树(解锁更高效的点亮方式)、徽章收集。本质上是把日常出行做成了一个单机游戏,不比配速、不社交、不 UGC,纯粹自己玩。

技术细节:定位追踪的三档策略

位置追踪是这类 App 最大的坑——既要省电又要不断线,尤其高铁场景时速 300+ 还要持续记录格子。

我最终做了三档模式:省电、平衡、持续。核心思路是根据场景动态调整定位精度和过滤距离。iOS 端用的 CLLocationManager,如果用 HarmonyOS 的 geoLocationManager 来实现类似逻辑,大致是这样的思路:

func switchTrackingMode(_ mode: TrackingMode) {
    switch mode {
        case .powerSave:
                locationManager.desiredAccuracy = kCLAccuracyHundredMeters
                        locationManager.distanceFilter = 200
                            case .balanced:
                                    locationManager.desiredAccuracy = kCLAccuracyNearestTenMeters
                                            locationManager.distanceFilter = 50
                                                case .continuous:
                                                        locationManager.desiredAccuracy = kCLAccuracyBest
                                                                locationManager.distanceFilter = 10
                                                                        locationManager.allowsBackgroundLocationUpdates = true
                                                                            }
                                                                            }
                                                                            ```
省电档日常通勤够用,持续档坐高铁也不掉线。实测 iPhone 15 连续记录 8 小时掉电约 12%,可以接受。鸿蒙这边如果用 continuous 定位请求配合 `@ohos.geoLocationManager`,在后台存活和功耗控制上理论表现会更好,因为 HarmonyOS 对后台任务有系统级的调度优化。

## 设计决策:数据全部本地存储

没有服务器,没有账号系统,轨迹数据只在用户手机里。我自己对位置隐私比较敏感,不想让任何人(包括我这个开发者)知道用户去过哪里。iOS 端用 Core Data 做本地持久化,iCloud 同步是可选项,走的也是用户自己的 iCloud 容器。

如果做鸿蒙版本,这块可以用 ArkData(关系型数据库)做本地持久化,分布式数据同步走用户自己的华为云空间,思路完全一致。而且 HarmonyOS 的数据安全分级机制天然适合这种纯本地敏感数据的场景。

## 格子映射:GPS 坐标到像素的投影问题

格子的升级算法不复杂,难的是怎么把 GPS 坐标高效映射到像素格子。地球不是平的,直接用经纬度等分会在高纬度地区变形严重。最后选了 Web Mercator 投影做格子划分,在国内纬度范围(18°N-54°N)误差可控。这个算法跟平台无关,ArkTS 里实现一遍就行。

## 和世界迷雾的区别

用了一个月,说实话比预期有意思。出差刻意多走两步去点亮新格子,周末 citywalk 变成了"开地图迷雾"。我觉得它比 Fog of World(世界迷雾)更适合日常通勤党。世界迷雾偏旅行打卡,格子太大,通勤那点距离根本看不出变化。像素征途的格子更细,而且"重复走会升级"这个机制让日常路线也有成长感,不是只有去新地方才有反馈。

## 下载和交流

App Store 搜「像素征途」,或者直接访问:https://apps.apple.com/app/像素征途

免费下载,高级功能(科技树完整解锁、更多徽章)走内购。

目前是 iOS 版本先行,我一直在关注 HarmonyOS NEXTMapKit 和定位能力成熟度,后续有计划用 ArkUI 做鸿蒙原生版本。如果你也在做鸿蒙开发,特别是 LBS 类或者地图 overlay 渲染相关的,欢迎评论区交流,一起踩坑。
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐