GPX 文件说到底是不是 XML 文件?
是的。GPX 不是和 XML 并列的另一种独立的二进制格式,它是搭在 XML 之上的一套固定结构,目的是让不同设备、不同 App 写出来的 GPS 坐标,最后都落在同一批标签下面。每一个 GPX 文件,拆开看都是合法的 XML。反过来才是需要理清楚的地方——不是所有 XML 文件都是 GPX 文件,而套在外面的 .gpx 后缀,做的事其实没有看上去那么多。
先说结论
用普通文本编辑器打开一个 .gpx 文件,第一行通常是 XML 声明,紧接着是一个 <gpx> 标签把后面的内容整个包起来——和任何其他 XML 文档一样,都是标签嵌套加属性这套写法。GPX 更准确地说是一份「模式(schema)」:一套公开的规则,规定 <gpx> 这个元素里面能放哪些标签、一个轨迹点长什么样、时间戳和海拔该放在哪儿。底层的文件格式从头到尾都是普通 XML,GPX 只是叠在它上面的一套词汇。
也就是说,.gpx 这个后缀是标签,不是原料。它的作用是在程序打开文件之前先告诉它该期待什么,但没有往里面的字节添加任何东西;后缀丢了或者写错了,里面的内容也不会因此少掉什么。
真正让一个文件算作「GPX 文件」的是什么
解析文件的程序不管文件叫什么名字,它看的是结构:有没有一个带 version 和 creator 属性的 <gpx> 根元素,里面嵌着 <trk>、<rte>、<wpt> 中的某一种或几种,装着实际的坐标。一份文件够不够格叫「GPX 文件」,靠的是它包不包含这套结构,跟磁盘上那个名字无关。一个叫 export.gpx、里面却没有 <gpx> 根元素的文件,不是「名字对但内容不对」的 GPX 文件,它就是套了个错误后缀的别的东西。
这一点值得和后缀分开来看,因为两者通常一致,但说的不是一回事。后缀是写在文件名本身里的,关于这份文件的元数据;<gpx> 这套结构,才是这份文件本身。
既然如此,后缀为什么在实际使用中还是有影响
后缀既然对内容没有任何添加,那为什么光凭它就能把一个文件挡在外面,这个疑问很合理。答案是速度。看一眼文件名几乎不花时间,程序只要看末尾那几个字符,就能立刻判断这个文件值不值得打开。真要解析整份文件、确认里面是不是有效的 GPX 结构,才是真正花力气的事,大多数上传工具都不愿意对每一个递过来的文件——包括那些明显不对路的——都花这个功夫。所以网站或 App 通常会先按后缀做一轮机械筛选,只有过了这一关的文件,内容才会被真正读进去。
这第一轮筛选,正是内容完全正确的 GPX 轨迹,却因为和内容无关的原因被挡下来的地方。文件叫 export.xml,或者叫 track.txt,还没轮到看它实际的结构,就已经在文件名这一关被先拦住了。
改后缀能解决什么、解决不了什么
因为后缀在格式本身里没有任何分量,把 .xml 改成 .gpx 不会动里面的任何一个字节——改变的只是这份文件之后能通过哪些按文件名筛选的关卡。如果下载下来的文件叫 something.xml,用文本编辑器打开,开头附近能看到 <gpx> 这个根元素,那它已经是一条 GPX 轨迹了;把它改名成 something.gpx 是安全的,而且往往正好解决了某个上传工具单纯因为名字不对而拒收的问题。
改名做不到的是,把本来不存在的 GPX 数据凭空造出来。规定一份文件是不是 GPX 的,是里面的标签,不是文件名,所以一份恰好也用 XML 语法、但用途完全不同的无关文档——一段网页订阅源、某个 App 的配置文件——就算把后缀改成 .gpx,也不会因此多出一个 <gpx> 根元素或者任何轨迹点。真正会解析内容而不是只信后缀的程序,不管文件叫什么名字,最后还是什么熟悉的东西都找不到。
为什么有的导出一开始就是 .xml
这通常和数据本身没问题,问题出在导出走的是一条通用路径。一些比较老的系统,还有一些本来就不是专门为 GPX 设计、只是用来大范围传递地理数据的流程,会走一个通用的「导出为 XML」步骤——里面写出来的确实是正确的 GPX 结构,但没有顺手把文件名也改成配套的样子。浏览器的「网页另存为」,对着它没有特别识别出是 GPX 的内容,有时也会做类似的事。不管哪种情况,实际保存下来的内容都没受影响,变得笼统的只是外面那层名字。
TrailCam 在这里扮演什么角色
TrailCam 导出一条路线时,写出来的就是带着 .gpx 后缀的 GPX 1.1 文件,不用在传给 Strava、Garmin Connect、Komoot 或者其他任何认 GPX 轨迹的地方之前先改名。GPX 导出是可选的 TrailCam Pro 里的功能,App 本身免费下载。
常见问题
- 把 .gpx 文件直接改成 .xml,还能打开吗?
- 能。文本编辑器或浏览器不管后缀是哪个,显示出来的都是同样的标签,后缀对它们来说只影响打开方式的判断,不影响别的。不过专门分流 GPX 上传的程序,可能要等后缀改回 .gpx 才认得出来。
- 把 .xml 文件改成 .gpx,能不能修好之前被拒收的上传?
- 如果这份文件本身已经包含有效的 GPX 结构,被拒的原因又只是文件名,那改名就能解决。先用文本编辑器打开看看开头附近有没有 <gpx> 这个标签——有的话,改名是安全的,而且通常正好解决这个问题。
- GPX 1.0 和 1.1 这两个版本,在「算不算 XML」这一点上有区别吗?
- 没有。这两个版本的 GPX 都是 XML 文档,版本号改变的是模式允许放哪些标签、某些值该放在哪个位置,而不是底层文件的语法本身。
记录你自己的轨迹
TrailCam 是一款 iPhone 上的 GPS 轨迹记录 App,会把沿途拍的视频、照片和语音钉在你拍下它的那个位置,并支持导出成 GPX 1.1 或 CSV。免费下载。