TrailCam

指南

为什么 GPX 文件里没有海拔数据?

一条在地图上看起来完全正常的轨迹,打开之后却找不到任何海拔曲线——每个点都有经度和纬度,别的什么都没有。这不代表文件坏了。海拔从一开始就不是这个格式的必填项,一份完全合法的 GPX 文件缺了它,原因其实有好几种。

先说结论

GPX 的轨迹点只有经度和纬度是必须有的。海拔是一个可选的附加字段,没有它,文件照样完全合法。海拔整个缺失的时候,原因几乎都出在文件本身之前的环节:要么记录的设备当时就没有海拔可写,要么后来动过这份文件的什么工具没有把它保留下来。

不管是哪种情况,地图上的轨迹都不受影响。距离、线条的形状、点的先后顺序,全都是从经纬度算出来的,跟海拔在不在没有关系。

海拔在文件里存在哪,为什么是可选的

每个记录下来的点都是独立的一个轨迹点,经度和纬度是必须带的属性。海拔和时间戳是嵌在同一个点里的另外两个字段,设备当时有就写上,没有就干脆不出现。GPX 是 2002 年为了让不同厂商的 GPS 设备之间能互相交换数据而设计的格式,那时候不少接收机只报位置,压根没有测高度的传感器。把海拔设成可选字段,是让那些设备产出的文件依然能算作合法 GPX 文件的唯一办法。

如今的 iPhone 大多数时候都有东西可以往这个字段里写,但这个字段仍然是可选的,是因为格式一直沿用了当初的设计。

常见的原因

  • 记录设备本身没有测高度的手段。简单的 GPS 记录仪和一些老式接收机只报位置,对高度什么都不知道,海拔那一栏自然没有东西可写。
  • 简化或者压缩轨迹的工具把海拔一起删掉了。一些用来把密集轨迹精简成较少点数的编辑工具,删点的同时经常把海拔也一并丢掉,因为它们的目标是文件更小,而不是保留完整信息。
  • 这份文件本来就是"路线"而不是"轨迹"。GPX 区分记录你实际走过的每一个点的"轨迹",和只列出该转弯地点、用来规划路线的"路线"。路线通常不带海拔也不带时间戳,因为这两样都不是路线要解决的问题。
  • 接收的服务故意丢掉了海拔。有些服务不采用文件里写的高度值,而是按每个坐标去查自己的地形模型。这种情况下,你看到的不是"海拔缺失",而是"被服务方替换了"——有时候文件本身也已经被重新导出成不带海拔的版本。

没有海拔,实际会丢掉什么

累计爬升和累计下降都是靠把海拔按顺序排开、逐段加总上升和下降算出来的,没有海拔数值,这个计算根本无从下手。没有数值,就没有曲线,地图下面也没什么可画的。

除此之外什么都不受影响。距离是相邻坐标之间的水平距离,配速是这个距离除以时间,有没有海拔都一样算得出来。一份完全没有海拔的 GPX 文件,作为"去了哪、花了多久"的记录依然是完整可用的。

怎么自己确认文件里到底有没有

GPX 是纯文本,最快的检查办法就是用文本编辑器打开文件,随便看几个轨迹点:如果有海拔,它会作为一个短的嵌套值,出现在同一个点里、紧挨着时间戳的地方。如果每个点里都找不到,那这份文件是真的没有海拔数据,换个地方重新导入也不会凭空出现。反过来,一个平时会画高度曲线的 App,对着一条明明有上下坡的轨迹却画出一条平的曲线,说明的是同一件事。

TrailCam 能做什么

TrailCam 会给每一个能写的点都写上海拔值,因为 iPhone 可以从 GPS 获得高度,大多数机型还能从气压传感器获得高度。直接用 TrailCam 记录并导出的轨迹,整条线都带着海拔,这也是地图下方那条高度曲线的来源。导出格式是 GPX 1.1,属于可选的 TrailCam Pro 里的功能,App 本身免费下载。

常见问题

没有海拔数据的 GPX 文件算无效吗?
不算。轨迹点必须有的只是经度和纬度。海拔和时间戳都是可选字段,两个都没有,文件依然是完全合法的 GPX 文件。
没有海拔会影响距离或者配速吗?
不会。这两个数字都是从水平坐标和点之间的时间间隔算出来的,跟高度无关。一份完全没有海拔的文件,距离和配速照样准确。
能不能事后给 GPX 文件补上海拔?
有些工具可以,做法是按每个坐标去数字高程模型里查地面高度再写进去。但这是拿一个替代值补进去,不是把你当时实际经历的海拔找回来——当参考曲线还算有用,跟当时气压计或 GPS 实测的值并不是一回事。

记录你自己的轨迹

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

在 App Store 下载