TrailCam

指南

怎么把 GPX 文件导入 QGIS

QGIS 打开 GPX 文件不需要转换,这点跟大多数 GIS 软件一样,但它打开文件的第一件事,是问你到底想要文件里的哪一部分——因为一个 GPX 文件其实不是一份数据,而是好几份数据打包在一起。航点、路线和轨迹是完全不同种类的地理数据,QGIS 有一条规矩正好会被记录下来的徒步数据撞上:一个图层,只能装一种数据。搞清楚这个拆分是怎么回事,导入本身也就十秒钟的事。

简单说

在 QGIS 里,依次点"图层"、"添加图层"、"添加矢量图层",找到那个 .gpx 文件;或者直接把文件拖到地图画布上,效果一样。这时 QGIS 会列出这一个文件里装着的几个子图层:waypoints(航点)、routes(路线)、route_points(路线上的点)、tracks(轨迹)、track_points(轨迹上的点)。如果是 GPS App 记录下来的一次徒步,该选的是 tracks,会把整趟徒步读成一条连起来的线;或者选 track_points,把记录下来的每一个点都单独读成一行数据。

这整个过程不需要插件,也不需要先转格式。读取 GPX 的能力是 QGIS 自带的,用的是它读取其他几十种地理数据格式的同一套底层机制。GPX 文件作为 XML 来说体积很小,就算是好几个小时的长记录,打开起来也几乎是瞬间的事。

为什么一个文件会变成五个图层

QGIS 里的矢量图层,跟大多数 GIS 软件一样,是围绕单一一种几何类型建起来的——要么是一张点的表,要么是一张线的表,不会在同一份数据里把两种混在一起。GPX 文件完全不管这条界线:同一个文件里可以同时装着一份独立的航点列表、一条或几条计划好的路线、一条或几条记录下来的轨迹,而航点是点,轨迹是线。QGIS 没有去猜你到底想要哪一种,也没有把这些性质完全不同的数据硬塞进一张让人看不懂的表里,而是把找到的每一种都列出来,让你自己挑出真正需要的那个。

这跟站内讲 GPX 轨迹与路线区别、讲航点与轨迹点区别的两篇指南说的是同一件事。QGIS 并没有凭空造出一个新的区分,它只是把本来就藏在文件里的区分摆到了台面上。

记录下来的徒步该选哪个图层

tracks —— 把徒步读成一条线

这个图层里,文件中每一个 <trk> 对应一条数据,画成一条按顺序连起来的线,串起所有记录下来的点。对一次徒步来说,通常就是一条线,形状跟你在徒步 App 地图上看到的一样。它的属性表里装的是这条轨迹整体的信息——名称、有时候还有描述——而不是每个点单独的一行数据,因为整条线本身就是一条数据。

track_points —— 把每个记录点单独拎出来

这个图层不是把整条线当成一条数据,而是每记录下来的一个点对应一条数据。每一行里存的都是 GPX 文件里给这个点留下的东西——经度、纬度,如果原始记录里有,还包括海拔和时间戳。如果你要的不是线的形状,而是每一个读数本身——比如把海拔自己拉出来做张图,查两个具体点之间隔了多久,或者只截出记录里的某一段——就该用这个图层。

waypoints 和 routes

这两个图层也会出现在同一份文件清单里,但基本用不上记录下来的徒步。航点不是连续的记录,是单独标出来的一个地点;路线也不是实际走过的轨迹,而是计划好要经过的一串停靠点。徒步 App 导出的 GPX 文件几乎全部由轨迹构成,所以这两个图层通常是空的,就算有内容,往往也只是零星几个点。

哪些会带过来,哪些不会

位置信息,以及文件里有的话,海拔和时间戳,导入之后都会原样保留——QGIS 不会对格式本身带着的东西做四舍五入或者丢弃。海拔和每个点的时间戳具体存在 track_points 图层里,不在 tracks 图层里,因为一条线作为一条数据,没办法在每个顶点上分别存一个不一样的值。有人打开 tracks 图层想看时间那一列,结果发现表格里几乎是空的,通常就是把线图层当成点图层用了。

不管选哪个图层,带不过来的都是 GPX 这个格式压根没有字段去装的东西。徒步路上拍的照片、视频片段、语音,都是独立于 GPX 之外的文件,这个格式本身只装坐标、海拔和时间戳。把徒步导入 QGIS,拿到的是线的形状和背后的数字,拿不到路上实际看到什么、听到什么的那份记录。

容易搞错的地方

  • 打开 tracks 图层,发现属性表里既没有海拔也没有时间,感到奇怪——那些数据在 track_points 那边。一整条线作为一条数据,没法在每个点上分别存不一样的值。
  • 本该是一条线的轨迹,看起来断成了好几截——这通常是因为原始 GPX 里有不止一段轨迹分段,多半是记录中途暂停过。QGIS 没有硬把这些分段接成一条不间断的线,而是照记录本来的样子忠实画出来。
  • 海拔的数值整体看着都偏差了一大截——查一下原始文件存的海拔单位是米还是英尺。QGIS 只是原样显示文件里的内容,自己不做任何单位换算。
  • 本来期待看到整趟徒步,结果只冒出来几个零星的点——这多半是选了 waypoints 或 route_points 图层,而不是 tracks 或 track_points。那是完全不同、也稀疏得多的另一种数据。

TrailCam 在这里的位置

TrailCam 在 iPhone 上把徒步、步行、骑行记成一条不间断的 GPS 轨迹,能导出成 GPX 1.1——可以是一次徒步,也可以是整个历史记录一次性导出——也能导出 CSV 摘要。这份 GPX 文件,正是 QGIS 这类工具生来要读的东西,适合那些不满足于地图和几个总数、想再往下做点自己的分析,或者自己动手拼一张地图的人。至于用不上这种 GIS 操作的场合,App 本身已经会显示距离、行进时长、配速和累计爬升,也能把路上拍的照片、视频片段和语音一起钉在轨迹上回放。导出功能属于可选的 TrailCam Pro 升级,App 本身免费下载。

常见问题

在 QGIS 里打开之前,需要先把 GPX 转换成别的格式吗?
不需要。QGIS 通过内建的矢量数据支持直接读取 GPX,跟它读取其他很多地理数据格式用的是同一套机制,不需要转换,也不需要装插件。
为什么把 GPX 文件导入 QGIS,会冒出来五种不同的图层?
一个 GPX 文件里可能同时打包着航点、路线、路线上的点、轨迹和轨迹上的点,这些是点和线两种不同的地理数据,没法塞进同一张表里。QGIS 没有去猜你要哪一种,而是把找到的每一种都列出来。
徒步每个点的海拔和时间戳,在 QGIS 的哪个图层里?
在 track_points,不在 tracks。tracks 图层把整趟徒步画成一条连起来的线,只带着这条轨迹整体的信息;每个点的海拔和时间戳存在 track_points 图层里,每个记录点对应一行。

记录你自己的轨迹

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

在 App Store 下载