也许你遇到过这样的场景:想让虚拟定位更逼真一些——比如在登山App里显示自己正站在海拔3280米的地方,或者让AR游戏识别出你正站在摩天大楼顶层。但打开FakeLocation,却发现根本没有“海拔”这个输入框。别急,这其实不是Bug,而是设计逻辑使然。

要理解这件事,得先搞清楚FakeLocation在做什么:它模拟的是GPS的原始信号,而真实GPS返回的数据包(NMEA语句)里,海拔高度是经纬度坐标的派生值,并不是可以独立设置的字段。如果强行改海拔却不调整经纬度,GPS校验会直接失败,应用会拒绝这个位置。所以,唯一的办法就是从经纬度的高精度小数位入手——小数点后第5位开始的微调,会显著改变GPS解算出的海拔估值,尤其在地形起伏明显的区域。
理解FakeLocation的海拔模拟逻辑
FakeLocation不提供独立“海拔”字段,因为其核心是模拟GPS原始信号——而真实GPS模块返回的位置数据包(NMEA语句)中,海拔高度是随经纬度一同计算生成的派生值,并非独立设置项。强行修改海拔而不匹配经纬度会导致GPS校验失败,应用直接拒绝该位置。所以必须从经纬度高阶数值入手:小数点后第5位起的微调,会显著改变GPS解算出的海拔估算值,尤其在地形起伏明显的区域。
实操:用经纬度微调反向控制海拔
第一步:打开FakeLocation,选择目标应用,进入“GPS位置模拟”设置界面。
第二步:关闭“地图选点”,切换到“手动输入坐标”模式。为什么?因为地图选点会自动四舍五入到小数点后4位,而海拔调控需要小数点后5-6位的精度,所以必须手动输入。
第三步:获取基准坐标。用高德地图长按目标地点,点击弹出气泡,选择“复制坐标”,得到类似“39.904211,116.407394”的字符串。注意保留小数点后6位完整数值。
第四步:执行海拔导向微调。以北纬39.904211为例:
- 若需升高海拔:将纬度末尾+0.000003(如39.904214),经度同步+0.000002(如116.407396)
- 若需降低海拔:将纬度末尾−0.000005(如39.904206),经度同步−0.000003(如116.407391)
关键规则:纬度每±0.000001≈对应海拔±1.1米变化,经度每±0.000001≈对应海拔±0.8米。不过实际效果受当地大地水准面模型影响,所以最好实测校准。
第五步:保存设置并启动目标应用。打开支持海拔显示的App(比如Gaia GPS、OruxMaps),等待10秒以上——FakeLocation需要时间重放完整的GPS信号帧,海拔值才会稳定更新。
验证与校准方法
方法一:使用专业GPS检测工具。安装GPS Status & Toolbox,进入“Satellites”标签页,查看当前Fix Type是否为“3D”,再点开“Location”详情,记录显示的Altitude(MSL)数值。这个值就是FakeLocation当前输出的海拔。
方法二:交叉比对法。在同一设备上,先关闭FakeLocation,用真实GPS获取当前位置海拔;再开启FakeLocation并应用微调坐标,对比两次Altitude差值。如果偏差超过5米,说明微调幅度过大,回退0.000001级重新尝试。
注意:部分国产应用(如微信运动、支付宝出行)会主动过滤海拔异常值。如果发现海拔始终显示为0,请在FakeLocation设置中开启“基站信息模拟”,填写与目标区域匹配的MCC/MNC,并勾选“启用海拔欺骗兼容模式”——这个选项藏在高级参数底部,需要滑动到底部才能看到。
