GPX 檔案裡的 extensions(擴充)元素是什麼?
extensions 是 GPX 檔案裡的一個可選區塊,可以掛在某個軌跡點上,也可以掛在整條路線或整份檔案上,專門用來放某個特定裝置或軟體想額外記下來、但 GPX 規範本身沒有替它留位置的東西。規範只規定「這裡可以有個容器」,容器裡究竟裝什麼,完全由寫出這份檔案的那個程式自己決定——這也是為什麼同一份 GPX 檔案一旦離開寫出它的那個 App,extensions 部分的表現會和檔案其他部分完全不一樣。
先說結論
GPX 1.1 替軌跡點定死了一份公開的欄位清單:經緯度、海拔、時間戳記,再加上名稱、定位類型之類的少數幾項。這份清單是故意鎖死的——一個要在許多不同軟體之間流通的格式,必須讓所有讀它的程式對同一個欄位的含義有一致的理解,才談得上真正通用。extensions 是規範裡唯一故意留著開口的地方:一個帶標籤的容器,裝置或 App 不用等格式的維護者先幫它加一個正式欄位,就能把自己想要的額外資料塞進去。
標準欄位裝不下的東西
軌跡點的基本欄位管的是你在哪裡、多高、什麼時候——這是幾乎所有 GPS 用途都需要的三樣東西,也是 GPX 從最初公開就帶著的三樣東西。除此之外,不少硬體和軟體還想在同一個點上多記一點別的:某個特定裝置內建感測器讀到的數值、某個 App 用來替不同定位打分、判斷可信度用的內部標記,或是只有寫出這份檔案的程式自己才認得的一組編號。這些東西在規範裡都沒有正式位置,因為規範一旦定型,不可能每次有哪家廠商想多記一樣東西就跟著加一個新欄位。
裡面實際裝的是什麼
實際情況是,extensions 區塊裡裝的,是寫出這份檔案的軟體自己覺得值得留下來的東西。一台具備氣象觀測功能的戶外裝置,可能會在某個點上附一個環境讀數。某個 App 可能會替點標上一個內部的精確度標記,用來在自己的地圖上畫出不同的信賴度顏色。一個允許把路線重新上傳的網站,可能會埋一組只有它自己用得到的參考編號,方便下次收到同一份檔案時比對帳號。這些都不是 GPX 的正式欄位,各自活在發明它的那一方自己的命名空間裡,掛在軌跡點上,而不是內建進格式本身。
為什麼 extensions 換個 App 就不太經得起折騰
這是最容易讓人摸不著頭緒的地方。一個 GPX 讀取程式,只有義務理解規範裡的基本欄位;至於用它不認識的命名空間寫的 extensions 內容,它完全可以直接跳過不管。這不算接收方出了問題——遇到不認識的 extensions 就跳過去,本來就是一個守規矩的 GPX 讀取程式該做的事,這樣才能保證某一家的私有附加內容,不會拖累另一個完全不相關的程式去讀大家都認的經緯度、海拔和時間。實際發生的事就是:extensions 裡的一個數值,在寫出它的那個 App 裡看起來好好的,換一個地方打開同一份檔案,它就悄悄不見了,而檔案本身其實完全沒壞。
這也代表,extensions 不是放「換個工具也要留住」的資料的好地方。如果一個數值重要到你希望它在 Strava、Garmin Connect、Komoot 和試算表軟體裡看起來都一樣,它就該放進這幾家都已經認可的欄位裡,而不是一個只有寫出它的那個 App 才保證能正確讀回來的容器裡。
TrailCam 在這裡做了什麼
從 TrailCam 匯出的路線是一份普普通通的 GPX 1.1 檔案:軌跡點上帶著位置、海拔和時間,都是所有讀取程式早就認得的欄位,沒有附帶一個只有 TrailCam 自己才能正確讀回來的私有 extensions 區塊。這是有意為之的取捨——不附加任何別的 App 不一定認識、也可能被悄悄丟掉的專有資料,這份檔案不管拿到哪裡,表現都是一樣的。GPX 匯出是可選的 TrailCam Pro 裡的功能,App 本身免費下載。
常見問題
- 是不是每份 GPX 檔案都帶 extensions?
- 不是,它完全是可選的。一份只需要位置、海拔和時間的普通軌跡匯出檔,本來就沒有理由帶上它。
- 把 GPX 檔案裡的 extensions 區塊刪掉安全嗎?
- 對軌跡本身沒影響。位置、海拔和時間各自是獨立的欄位,刪掉 extensions 區塊不會動到它們,丟掉的只是那個區塊裡存的 App 或裝置自己的資料。
- 為什麼一個數值在這個 App 裡看得到,換一個 App 打開同一份檔案卻不見了?
- 很可能它本來就存在那個 App 自己命名空間下的 extensions 裡。讀取的一方對看不懂的資料可以直接跳過,不用去猜它的意思,所以只存在 extensions 裡的東西,就會出現在這個地方看得見、到另一個地方卻看不見的情況。
記錄你自己的軌跡
TrailCam 是一款 iPhone 上的 GPS 軌跡記錄 App,會把沿途拍下的影片、照片與語音釘在你拍它的那個位置,並支援匯出成 GPX 1.1 或 CSV。免費下載。