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