很多人在使用两步路记录自己的徒步轨迹后,会习惯性的使用两步路的海拔纠偏功能。以清明节全程徒步华山的轨迹为例,纠偏效果如下:
可见纠偏让爬升从 1910 米大幅飙升到 2423 米。行程从数字上好看多了。但是它对吗?
一条轨迹是手机 GPS 按周期获取到的多个样本点位置组成。手机 GPS 获取位置,不光包含平面位置,也包括海拔数据,是一个三维坐标点。但 GPS 的定位有误差,在某些情况下 GPS 甚至有大幅漂移。这可能是两步路开发海拔纠偏的由来。直观上,海拔纠偏就是用等高线上插值得到的海拔代替 GPS 获取到的高度。
举一个极端的例子,如果在学校操场上跑圈,每个样本点上 GPS 的海拔也会有微小的几厘米几十厘米的上上下下的误差,如果时间很长,取点量过多,同样会造成很高的累计爬升。比如跑步 1 小时取样 1000 个点,每个点就算平均 10 厘米的误差,也会带来 100 米的累计爬升。
(但该误差可以被算法消除,而且事实上两步路已经过度处理了这个误差,导致两步路往往低估累计爬升,下篇文章我们再讨论这个问题)。
在这个极端的平地跑步例子里,用等高线来进行纠偏,可以很好地平滑掉 GPS 的微小误差。在平地上,海拔纠偏后得到的各样本的海拔是一样的,能精确得出累计爬升为 0。但在大多数爬山案例中,海拔纠偏得到的数据更不准确。
我们把上面徒步华山的轨迹纠偏前纠偏后的具体的高程数据导出来(将两个轨迹导出为 KML 文件然后用 VSCODE 打开读取里面的坐标数据)。这两条轨迹分别是:
- 纠偏前:https://2bulu.com/track/t-aiW12lGI1q%25252Fp%25252FR2KBg5Tzw%25253D%25253D.htm
- 纠偏后:https://2bulu.com/track/t-yuDYboOBO5%25252Fp%25252FR2KBg5Tzw%25253D%25253D.htm
对比结果如下,蓝色线是纠偏前,红色线是纠偏后的,其中横坐标是取样点(该轨迹一共有 3604 个取样点):
很明显纠偏后的高程数据有问题。轨迹的最高点在华山的东峰、南峰那一片,海拔已知都是在 2000 到 2100 米左右,所以纠偏前的海拔是大致准确的。但纠偏后,那一片的海拔只有 1700 到 1900 米,相差了 200 米。也就是纠偏后的最高海拔低了大约 200 米。
那为什么纠偏后的累计爬升多了很多呢,因为纠偏后多了很多上上下下的爬升。最典型的出现在点号 300 左右,在爬山过程中突然有约 100 米海拔的下降。对照地图,这个位置大约在华山的五里关左右。但我们都知道,上升途中,并没有这么大的突然下降。
除了上面这种极大的误差,仔细查看华山这条轨迹纠偏前后的海拔数据的细节,会发现纠偏前的海拔很连续,但纠偏后的海拔非常不连续而且有错误。完全和海拔纠偏的本意相反。以上面华山下山的最后一小段 44 个样本点共 4 分钟为例,获取相邻位置的海拔变化(相邻位置的取样间隔大约是 4 到 12 秒不等),纵坐标单位为米。纠偏后的数据显然大有问题:
为什么纠偏后的结果反而不准了。因为所谓的海拔纠偏,就是替换掉 GPS 本身的高程数据,用 GPS 的位置数据,再用等高线拟合位置的海拔数据。看看两步路的等高线数据,它在华山顶的等高线在 1700 米左右,而且等高线的走势也完全不对(因为南峰、长空栈道南边都是悬崖)。我猜测是官方提供的等高线没有进行中国特色的 GPS 坐标转换。
windy 图层自带的等高线走势相对准确一些,但高程还是不对。华山顶的海拔在 1900 到 2000 米之间。而且前面纠偏后的数据更像是 windy 图层里这个等高线:
即使等高线数据是准确的,海拔纠偏在陡峭区域尤其是悬崖区域依然不准确。因为 GPS 数据不只是高度有误差,位置数据也有误差,位置差 10 米,等高线上的海拔可能差几十米,纠偏后的数据仍然不可靠。
综合结论是:海拔纠偏在平地或平缓路段可以过滤 GPS 的微小误差,但在大多数时候会带来更多误差。
如果继续深究,全程徒步华山,累计爬升到底是多少?纠偏前 1911 米,纠偏后 2378 米。我们知道 2378 米肯定是不准确的。但实际应该是多少呢?从最低点到最高点海拔落差大约是 1750 米。中途若干上上下下,估摸多 300 米。我猜测实际累计爬升应该是 2000 到 2100 米之间,这也高于纠偏前的数据。
这实际上是另外一个问题,很多人都发现了,两步路往往低估了累计爬升(这也是很多人喜欢用海拔纠偏的原因,用一个错误去解决另一个错误)。这是因为两步路为了过滤 GPS 的微小误差,参数设置明显有问题,也过滤了 30 米以内的小幅上上下下( 30 米是实验得到的猜测值)。下一篇文章我们将讨论这个问题。
Q. E. D.