TrailCam

指南

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

在 App Store 下載