GPX 文件里为什么没有配速
用文本编辑器打开一个 GPX 文件,从头翻到尾也找不到"配速"两个字。这不是哪个 App 漏写了,而是 GPX 里的一个点从设计上就没打算装配速这个数字。它装的是位置、高度和时间这三样东西,配速是拿这三样东西算出来的,而且每个读这个文件的软件都是自己重新算一遍。
先说结论
配速不是 GPX 轨迹点里的一个字段,所以它压根就没"存在"文件里过。文件里每个点实际存的是经纬度,通常还有海拔和时间戳。任何打开这个文件的软件——包括当初记录它的那个 App 自己——都是拿相邻两个点的距离除以经过的时间,事后算出配速的。同一个 GPX 文件在两个 App 里配速数字不一样,原因就在这里:两边各算各的。
一个轨迹点里到底装了什么
GPX 文件的核心是一串 <trkpt> 元素,每记录一个点就有一个,带着表示位置的 lat 和 lon。大多数记录软件还会在里面加一个 <ele> 存海拔,加一个 <time> 存时间戳。GPX 的基础规范里能确定有的就这些,没有 <pace>,也没有 <speed>。这个格式想描述的是你在什么时候、在什么地方,不是你在两个点之间走得有多快。
有些软件会用 GPX 的扩展机制,往轨迹点里塞一些自家的数据,比如速度——这是一种在不破坏基础格式的前提下加私有字段的办法。不认识这个扩展的软件会直接跳过它,也就是说用这种方式写进去的速度值,换一个 App 打开未必读得到。
屏幕上那个配速到底是哪来的
是算出来的,不是存好的
不管是走路的时候实时看到的配速,还是过后翻旧路线看到的配速,显示它的那个软件都是拿附近几个点的坐标和时间戳——走过的距离除以花掉的时间——现场算的。就算是当初记录这条路线的那个 App 也不例外。走路时实时算出来的配速,和之后从保存好的 GPX 文件里再算一遍的配速,是两次独立的计算,只是用的是同一批点。
换个地方打开数字就不一样了
把同一个 GPX 文件导进两个不同的服务,每一边都按自己的规则算配速:噪点怎么平滑、多慢算"停下来"而不是"在走"、两个离得特别近的点怎么处理——这些东西没有一样是写在文件里的,全在读文件的软件那一端。同一条路线配速对不上,不代表文件坏了或者哪个 App 算错了。
配速这个数字到底存在哪
如果想要一个跟着数据走、不用每次打开都重算的配速,那是汇总导出该干的事。CSV 导出里通常会有一列配速,跟距离、时长、爬升放在一起,因为 CSV 的一行是一整条路线的汇总,不是逐点记录,所以有地方放一个"定死了"的数字,这是 GPX 轨迹点做不到的。GPX 和 CSV 正好互补:GPX 把路线本身留下来,谁都能拿它重新算配速;CSV 把这个数字直接留下来,省得每次都算。
容易搞混的地方
- 导进一个新 App,平均配速跟原来记录的不一样——这是正常的,新 App 不是读了文件里存的数字,而是拿原始的点重新算了一遍。
- GPX 转成别的格式以后配速"没了"——其实不存在丢失,因为 GPX 本来就没存过配速,转换完了也一样得重新算。
- 有的 App 说自己能靠扩展字段保留速度信息,换一个 App 打开同一个文件却什么都没有——扩展字段是不是要支持完全看软件自己,一个 App 写进去的速度,不保证下一个 App 能读出来。
- 整段路线的平均配速,比走的时候感觉的任何一段都要慢——这通常是因为计算里把停下来的时间也算进去了,不是 GPX 数据本身有问题。
TrailCam 在这里能帮上什么
TrailCam 记录每条路线的同时就把距离、移动时长、配速和爬升算好了,不是靠一条光秃秃的轨迹事后再算。路线可以导出成保留每个点本身的 GPX 1.1,也可以导出成带配速在内的 CSV 汇总。导出是可选的 TrailCam Pro 功能,App 本身免费下载。
常见问题
- GPX 到底支不支持配速或速度字段?
- 基础规范里不支持。GPX 轨迹点有的是位置、海拔和时间。可以靠扩展机制加进速度,但换个 App 未必读得到,不太能指望它。
- 同一个 GPX 文件,为什么在不同 App 里平均配速不一样?
- 因为两边都没有在读一个存好的配速值,而是各自拿坐标和时间戳算的。停顿怎么算、噪点怎么处理,两边稍微不一样,答案就会差一点。
- 想留住配速,是不是 CSV 比 GPX 更合适?
- 光论这个数字本身,CSV 更合适,因为它每条路线都有一个定好的配速。不过 GPX 也值得留着,因为不管是过去还是以后要算的配速,最终都是从它保存的那些点算出来的。
记录你自己的轨迹
TrailCam 是一款 iPhone 上的 GPS 轨迹记录 App,会把沿途拍的视频、照片和语音钉在你拍下它的那个位置,并支持导出成 GPX 1.1 或 CSV。免费下载。