怎麼把 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。免費下載。