GPX 里的"路点"和"轨迹点"到底差在哪
打开一个 GPX 文件,这两种点看起来几乎一样——纬度、经度,可能还有海拔。但对读文件的 App 来说,它们的意义完全不同。轨迹点是一长串记录里的一个样本,是移动过程中自动记下来的。路点是一个独立存在的地点,是有人特意标出来的。把这两者搞混,是导入 GPX 之后看到一堆散落的图钉、而不是一条线,最常见的原因。
先给结论
轨迹点(文件里写作 <trkpt>,放在 <trk> 里的 <trkseg> 之中)是 GPS 接收器移动时按顺序记下来的一长串点里的一个,目的就是被连成一条线。路点(<wpt>)是一个单独存在的点——一个登山口、一处观景台、一个停车位置——没有顺序,也没有前后邻居。App 能把轨迹点连成线,是因为它可以放心假设第二个点紧跟在第一个点之后。这个假设对路点不成立,因为文件里没有任何信息说明某个路点跟其他点有什么关系。
轨迹点到底是什么
轨迹点之所以存在,是因为接收器在持续记录。走一个小时,GPS App 会每隔一段时间写下一个位置,每个都落进一个 <trkseg>,而 <trkseg> 又放在 <trk> 里——这就是"一段连续移动"的结构。顺序在这里很重要,和路点不一样:第 400 个点被理解为发生在第 399 个点之后,查看器就是按这个顺序把列表走一遍来画线的。大多数轨迹点还带着时间戳,正是靠它,App 才能算出两点之间走得多快,或者整段路花了多久。
单独拿出来的一个点,以上这些都不成立。一个没有顺序、没有邻居的孤立坐标,就算它放在 <trk> 元素里面,实际上也没有轨迹点应有的意义——真正承载信息的是这一整串点,不是其中任何一个。
路点到底是什么
路点标记的是一个有人觉得值得标出来的地方——登山口、水源、一处想记住的地点,或者规划类 App 落下的一根图钉。它单独存在于文件里,不属于任何轨迹或路线结构,甚至不需要带时间戳,因为一个想记住的地点,不需要说明它是什么时候被标记的。一个 GPX 文件可以在有轨迹的同时,再装下任意数量的路点,两者共存,互相不需要引用对方。
也正因为这样,路点和轨迹往往出现在不同性质的文件里。出发前规划好的路径——一串打算按顺序经过的转弯点或站点——几乎全部由路点组成,因为那时候什么都还没被记录下来。已经走完的一次徒步正好相反,绝大多数是轨迹点,顶多混着几个标记特定地点的路点。
为什么会变成"只有图钉,没有线"
这就是这个区别真正派上用场的地方。把一个期望拿到轨迹的 App,喂给它一个只由路点组成的文件,它能做的唯一合理的事就是:给每个点插一根图钉,不画任何线,因为路点里没有信息说明下一个该连哪个。这不是导入失败——文件里有什么,它就原样导入了什么。看起来"轨迹坏了",往往是因为那份文件从一开始就不是轨迹,常常是从一个专门用来标地点、而不是记录连续路线的工具里导出来的。
TrailCam 在这里的角色
TrailCam 把一次徒步记录成一条连续的轨迹——走的时候按顺序记下来的 GPS 点,而不是零散标出来的几个地点——然后可以把单条记录或者整段历史导出成 GPX 1.1 或 CSV。这正是 Strava、Garmin Connect、Komoot 这些平台期望拿到的结构,也是为什么结果会是一条线,而不是几个连不起来的图钉。导出属于可选的 TrailCam Pro,App 本身免费下载。
常见问题
- 一个 GPX 文件能同时装下路点和轨迹点吗?
- 可以。这两种结构互相独立,一个文件可以同时装着一条记录好的轨迹,和一组单独标出来的路点,很多规划类工具就是这么做的。
- 路点会像轨迹点一样带时间戳吗?
- 不一定。轨迹点在序列里的位置,通常要配合它被记录的时刻才有意义;而路点标记的是一个地方,不是一个瞬间,所以时间戳是可选的,很多时候干脆没有。
- 为什么导入 GPX 之后只看到图钉,没有线?
- 这份文件很可能装的是路点,而不是轨迹。App 靠把轨迹点按记录顺序连起来画线;一组路点没有固定的连接顺序,所以只能显示成一个个独立的图钉。
记录你自己的轨迹
TrailCam 是一款 iPhone 上的 GPS 轨迹记录 App,会把沿途拍的视频、照片和语音钉在你拍下它的那个位置,并支持导出成 GPX 1.1 或 CSV。免费下载。