TrailCam

指南

为什么 GPS 轨迹会显示负的海拔

整个下午都走在比海面高出几米的海岬步道上,回家打开海拔曲线,却发现有两处掉到了零以下。那天你压根没有走到过海面以下的地方。GPS 轨迹会记出负数,原因有两个,而且都不代表文件出了问题。

简单说

GPS 给出的所有数字里,海拔是最不精确的一个,靠近海平面的地方,光是这份误差就足以让单个点跌到零以下。另一个原因和它无关:卫星定位算出的原始高度,参照的是一个用数学方式近似地球形状的基准面,而不是真正的海平面。在世界上有些地方,这个基准面本身就比实际海平面略低,结果会让整条轨迹整体偏低差不多一个固定的量。这两个原因,单独出现或者叠在一起,都能让一段其实一直在海面以上的路,在文件里冒出几个负数点。

为什么海拔是最不稳的那个数字

手机靠计算头顶散布的卫星信号到达的时间差来定位。水平位置的话,这些卫星从四面八方把你围住,东西南北方向都卡得比较死。高度就不一样了——能看到的卫星全都在地平线以上,永远在你上方,从来不会在下方,几何上只能从一侧夹住你。正是这种不对称,让 GPS 垂直方向的精度通常比水平方向差两到三倍,这是定位方式本身的几何局限,不是哪台手机或哪个 App 的问题。

把这份误差加到海边真实海拔五米的地方,正负都有可能,单个点很容易就跌到负二、负三。同一个点的水平位置可能分毫不差,只有高度这一个数字自己在飘。

另一个原因:两种不同的「零」

基准椭球高度和海平面不是一回事

卫星定位给出的原始高度,是相对于「参考椭球」——一个用数学方式平滑近似地球形状的模型——量出来的,而不是相对于真正随重力起伏、凹凸不平的平均海平面。两者之间的差距叫作大地水准面差距,在世界各地都不一样:有些地方真实的海平面比参考椭球高,有些地方比它低。在偏低的地方,没有做过修正的高度读数就会比真正的海拔矮一截,一块其实略高于海面的地面,读出来可能就在零附近甚至以下。

这种偏差不像 GPS 噪声那样每次都在跳,它更接近于一个地区内相对固定的偏移。至于设备或 App 在给你看到的数字之前,会不会、以及多彻底地去修正这个偏差,是定位本身之外单独的一步,各家做到什么程度并不一样。

GPX 文件里长什么样

GPX 轨迹里每个点的海拔,就是 <ele> 标签下一个以米为单位的普通数字,格式本身不区分这是一次真正的凹陷还是一次垂直方向的噪声——负数和正数存法完全一样。用文本编辑器打开一段贴近海面的低地轨迹,在大多是小正数中间偶尔混进几个小负数,是很正常的样子。这是海拔数据在靠近海平面时的正常质感,不是文件损坏的迹象。

什么情况值得多看一眼

  • 一段贴近海面的路线上,只有一两个点是几米的负数——这是普通的 GPS 垂直噪声,跟原始海拔曲线在别处也会显得锯齿状是同一回事。大多数 App 在给出总数之前会先把这类噪声抹平。
  • 这些负值几乎不影响爬升总数——爬升通常是过滤掉小于某个阈值的上下波动之后再算出来的,零附近的几个噪声点很少会真正动摇那个真正有用的数字。
  • 整条轨迹从头到尾都低了几十米,而不只是一两个点——这不是噪声,而是一个相对固定的偏移,值得拿登山口的标牌或者地图之类的已知参照对一下,因为它更可能指向参考椭球和海平面之间的差距,而不是普通的抖动。

TrailCam 这边

TrailCam 会把每条记录的爬升画成地图下方的海拔曲线,回放保存好的轨迹时同一条曲线也在下面同步跑,导出成 GPX 1.1 或 CSV 时海拔也会带上。靠海路线的曲线里偶尔冒出的一个负值,是 GPS 高度数据本身的样子,不是记录出了问题。App 本身免费下载。

常见问题

海拔显示负数,是不是说明 GPX 文件坏了?
不是。GPX 把海拔存成一个普通数字,正负没有区别对待,也没有单独的标记。靠近海平面时出现负值,几乎都是普通的垂直方向 GPS 噪声,不是文件损坏。
为什么这种情况多出现在海边,山上反而少见?
因为误差的大小在哪里都差不多。把这份误差加到海边真实海拔五米的地方,很容易就变成负数;把同样大小的误差加到山上五百米的地方,顶多变成一个稍微不准的五百米。
明明整段路都在海面以上不少,整条轨迹会不会还是偏低?
会。如果 GPS 参照的基准椭球和当地真实海平面之间的差距,在那个地区正好是负的,就会表现成整条轨迹几乎一致地偏低,而不是零星几个噪声点。

记录你自己的轨迹

TrailCam 是一款 iPhone 上的 GPS 轨迹记录 App,会把沿途拍的视频、照片和语音钉在你拍下它的那个位置,并支持导出成 GPX 1.1 或 CSV。免费下载。

在 App Store 下载