TrailCam

指南

为什么 GPX 文件上传会失败?

GPX 上传被拒是轨迹类软件里最让人窝火的失败之一:错误提示往往什么都没说清楚,文件本身用文本编辑器打开、或者换一个 App 打开又都好好的。绝大多数拒绝都能归到几种固定的原因上,而且大多数跟里面的坐标对不对没什么关系。

结论先说

上传被拒,多半不是坐标本身错了,而是文件的样子跟接收方期待的不一样:GPX 版本不对、扩展名被悄悄改掉、文件里压根没有轨迹,或者文件是空的、传输中断了。按这个顺序挨个查一遍,大多数情况都能找到原因。

GPX 1.0 和 1.1

GPX 有两个版本,区别在 XML 开头声明的命名空间不一样,只按其中一个版本严格写的解析器,遇到另一个版本的文件就可能直接拒收。GPX 1.1 是现在的主流版本,眼下大多数记录类 App 导出的、也是大多数服务默认接收的都是它;老一点的文件,或者出自比较冷门工具的文件,可能还停留在 1.0。人眼看两者几乎没区别,但对严格检查头部的解析器来说是两码事。

版本号写在文件最开头的 <gpx> 标签里,只出现一次。别的地方能打开、单单某个服务拒收的时候,值得先看这一眼。

扩展名被不知不觉改掉了

GPX 文件本质就是纯文本(XML),这正是问题的根源。有些邮件客户端和聊天软件,在转发附件的路上会把 .gpx 悄悄改写成 .xml 或 .txt,因为在它们看来那就是一段文字。接收方的上传表单一看扩展名不是 .gpx,还没读内容就先拒了。只要把扩展名改回 .gpx,内容一个字都不用动,这种情况就解决了。

文件里没有轨迹

GPX 能装三种东西:轨迹(实际走过的路,带时间戳,按顺序记录),路线(打算走的路,只是一串转向点,没有时间戳),还有单独存在的路径点。以上传活动记录为核心设计的服务,默认想要的是轨迹。出自规划类工具的文件常常只有路线或者几个路径点,这种文件被接收方怎么处理,完全看那个服务的严格程度:有的当成别的类型接受进去,有的直接拒收,有的会导入成一团看不懂的东西。

再排查几个常见原因

  • 0 字节文件,或者中途断掉的文件——导出过程网络断了,或者传输中手机睡过去了,文件在"文件"App 里看着好好的,打开却几乎没内容。
  • 手改出来的 XML 损坏——一个没关上的标签,或者名字里写了 & 这种字符却没转义,哪怕只动了一行,整个文件也会变成无效的。
  • 上传大小超限——把整段历史一次性导出,而不是单次徒步,文件可能大到撞上单日轨迹从来碰不到的上限。
  • 格式本来就不对——GPX、KML、TCX 都是记录轨迹数据的格式,但结构互不相通。只认一种格式的网站,看到另一种连读都不会读,直接拒。

怎么缩小范围

拿文本编辑器打开文件,只看两件事:开头 <gpx> 标签里的版本号,还有内容里除了 <rte>、<wpt> 之外,是不是真的有带轨迹点的 <trk>。把这两点跟文件大小对一遍,大多数被拒的原因就摆在眼前了,用不着从头重新导出。

TrailCam 在这里的角色

TrailCam 导出的是 GPX 1.1——如今大多数会读 GPX 的地图和活动类服务,默认接受的正是这个版本。可以单独导出一次徒步,也可以把整段历史一次性导出。导出功能属于可选的 TrailCam Pro,App 本身免费下载。

常见问题

同一个 GPX 文件在一个 App 里能打开,换一个就被拒,是为什么?
最常见的两个原因:一是 GPX 版本不一样(1.0 还是 1.1),二是那个 App 想要轨迹,文件里却只有路线或路径点。这两种情况都不是坐标错了,而是文件结构里装的东西不对。
被改成 .txt 或 .xml 的文件,改回 .gpx 就能上传了吗?
如果这就是真正的原因,改回来就行。有些邮件和聊天软件会在传输过程中把 .gpx 的扩展名换掉,只要不动内容、把扩展名改回来,文件就恢复成原来那个有效的样子。
GPX 文件越大,越容易被上传拒收吗?
有些服务确实对上传大小设了上限,把整段历史打包导出而不是单次徒步,文件可能大到撞上普通一天的轨迹碰不到的那个上限。这是服务端的限制,不是文件本身出了问题。

记录你自己的轨迹

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

在 App Store 下载