为什么地下停车场没有 GPS,手机依然知道你在哪?
第一次认真研究手机定位的时候,我一直有个疑问。
地下停车场明明没有 GPS 信号。
但微信、高德、小红书,
依然知道我在哪。
甚至还能持续更新位置。
后来深入看了一圈移动端定位系统,
我才发现:
现代手机定位,
早就不是“GPS 定位”那么简单了。
它本质上已经是一套:
多源实时融合系统GPS 只是其中一部分。
而且很多时候,
GPS 甚至是最没用的那个。
一、GPS 其实有很多硬伤
很多人对定位的理解还停留在:
手机 ← GPS卫星实际上:
GPS 在真实业务场景里,
问题非常多。
1)GPS 必须“看见天空”
GPS 本质上是:
卫星发射无线电信号,
手机接收后做三角测距。
问题是:
这个信号非常弱。
所以:
- 室外空旷地 → 很准
- 高楼之间 → 开始漂
- 室内 → 基本废
- 地下停车场 → 直接没信号
做过地图业务的人应该都见过:
用户已经进商场了, 地图上的点还在马路上。这就是 GPS 信号丢失后的典型表现。
2)GPS 冷启动非常慢
很多人不知道:
GPS 第一次定位其实不快。
尤其:
- 长时间没开定位
- 飞机落地
- 手机刚重启
场景下。
GPS 需要先下载星历数据。
这个过程:
可能要几十秒对于用户体验来说:
完全不可接受。
想象一下:
外卖 App 打开以后:
“正在定位...”转半分钟。
产品经理会直接疯掉。
3)GPS 很耗电
持续开 GPS:
- 手机发热
- 电量暴跌
- 后台耗电异常
所以:
现代手机系统其实不会长期只依赖 GPS。
二、真正的定位系统,其实有三套信号源
现代手机定位,
本质上是:
GPS + WiFi + 基站三套系统一起工作。
再加上传感器融合。
三、基站定位:永远在线,但精度一般
手机即使不联网,
也始终在和附近基站通信。
每个基站都有唯一标识:
MCC + MNC + LAC + Cell ID运营商知道:
每个基站在哪。
所以:
手机只要上报:
“我附近有哪些基站”服务端就能大概推算位置。
基站定位的特点
优点:
- 不需要 GPS
- 室内可用
- 功耗极低
- 几乎随时可用
缺点:
精度一般。
误差大概:
| 场景 | 误差 |
|---|---|
| 农村 | 1~5公里 |
| 普通城市 | 100~500米 |
| 市区核心区 | 50~100米 |
所以:
基站定位更像:
“先告诉系统你大概在哪”而不是精准定位。
四、WiFi 定位,才是真正的室内核心
这个是很多人第一次知道会震惊的东西。
因为:
手机甚至不需要连接 WiFi。只要:
扫描到附近热点就已经足够定位。
五、WiFi 为什么能定位?
每个 WiFi 路由器都有唯一 MAC 地址:
BSSID手机会扫描:
[ { bssid: "xx:xx:xx", rssi: -45 }, { bssid: "yy:yy:yy", rssi: -63 } ]也就是:
- 周围有哪些 WiFi
- 每个信号强度多少
然后上传给服务端。
六、真正的核心:WiFi 指纹数据库
服务端背后其实有一套巨大的:
WiFi AP 数据库里面记录:
某个 WiFi 出现在哪于是:
系统只要发现:
“你附近出现了这些 WiFi”就能推算位置。
而且:
精度通常比基站高很多。
七、为什么地下停车场还能定位?
因为:
地下停车场没有 GPS, 但通常有 WiFi。尤其:
- 商场
- 写字楼
- 地铁
- 地下车库
WiFi 密度其实非常高。
所以:
即使 GPS 完全失效,
系统依然能通过:
WiFi 指纹完成定位。
这也是为什么:
很多时候室内定位,
反而比室外更稳定。
八、这些 WiFi 数据从哪来的?
这其实是整个行业最大的壁垒之一。
因为:
定位精度最终拼的是:
数据库规模数据一般来自:
- 手机厂商长期采集
- 地图服务商众包
- 用户设备匿名回传
- 扫街设备采集
简单理解:
当用户 GPS 很准时:
系统会顺便记录:
当前位置附近有哪些 WiFi久而久之:
数据库越来越大。
九、还有第四套系统:传感器融合
现代手机还有一套:
IMU(惯性测量单元)包括:
- 加速度计
- 陀螺仪
- 磁力计
- 气压计
这些东西的作用是:
位置连续性比如:
GPS 突然断了。
系统仍然可以根据:
- 用户移动方向
- 步频
- 加速度
推算:
“你大概又往前走了10米”避免地图点位突然跳跃。
十、真正核心:融合算法
现在问题来了。
GPS、
WiFi、
基站、
IMU,
都不完美。
那系统到底该信谁?
答案是:
融合算法工业界主流方案:
EKF(扩展卡尔曼滤波)十一、卡尔曼滤波到底在干什么?
简单理解:
系统每时每刻都在做:
“我猜你现在在哪” + “传感器告诉我你在哪”然后不断修正。
比如:
GPS 信号强
系统会:
提高 GPS 权重室内 WiFi 很多
系统会:
提高 WiFi 权重所有信号都没了
系统只能:
依赖 IMU 短时间推算但误差会越来越大。
十二、accuracy 为什么特别重要?
很多开发者拿到经纬度:
直接就用了。
但真正重要的是:
accuracy也就是:
当前定位误差半径举个例子
{ lat: 39.9960, lng: 116.4812, accuracy: 15 }代表:
系统有很高概率认为: 你在15米范围内如果:
accuracy: 500那说明:
系统自己都不确定你在哪。
十三、很多定位“翻车”其实是没看 accuracy
这个是非常真实的工程坑。
很多项目:
showMarker(lat, lng)直接画点。
结果:
用户在商场里。
accuracy:
800米地图上还在精确画 Marker。
最后用户以为:
定位错了实际上:
是开发者根本没处理精度。
十四、开发里真正推荐的做法
如果你的业务:
只是:
- 天气
- 城市推荐
- 普通地图展示
系统原生定位通常够用。
但如果涉及:
- 外卖
- 跑腿
- 打卡
- IoT
- 室内定位
- 轨迹
那原生能力一般不够。
因为:
你真正需要的是融合定位而不是单纯 GPS。
十五、我们后来项目里的做法
后来项目里接了 LTS 的融合定位 SDK。
主要原因是:
它会自动融合:
- GPS
- WiFi
- 基站
室内场景稳定性会比原生定位好很多。
小程序里接入也比较简单:
import LTS from 'lts-wechat-sdk'; const lts = new LTS({ apiKey: 'YOUR_API_KEY' }); const position = await lts.getLocation({ type: 'fusion' }); console.log({ lat: position.lat, lng: position.lng, accuracy: position.accuracy, source: position.source });实际项目里:
我们更关心的反而不是:
经纬度而是:
accuracy 是否稳定因为:
用户感知的是:
“位置有没有乱跳”而不是:
“理论误差是多少”十六、一张图总结整个融合定位系统
GPS → 室外精准,但室内失效 WiFi → 室内核心,精度高 基站 → 永远在线,负责兜底 IMU → 保证位置连续性 ↓ 数据融合 EKF / 卡尔曼滤波 ↓ 当前位置 + accuracy十七、最后一个很重要的认知
融合定位不是魔法。
它本质上是:
对多个“不完美信号”的最优融合所以:
真正做定位系统时,
你最重要的能力不是:
“获取坐标”而是:
理解每种信号源的能力边界什么时候:
- GPS 会漂
- WiFi 会失效
- 基站精度不够
- IMU 开始累计误差
这些才是真正的工程核心。
如果你的项目涉及:
- 小程序定位
- 室内定位
- IoT轨迹
- 融合定位
可以试试 LTS 的定位能力。关于链接我方评论区了 有兴趣的同学可以去了解
也很想听听:
做过室内定位项目的同学,
实际踩过哪些坑。
