如何減少 GPX 軌跡裡的點數
減少 GPX 軌跡裡的點數,通常叫做「簡化」軌跡,這件事一般是交給專門的 GIS 或 GPS 工具來做,不是記錄 App 內建的功能。用靠譜的簡化工具處理過後,軌跡在地圖上看起來幾乎沒變,畫出同樣的線卻用不了那麼多點。要是用粗暴的做法——按固定間隔一個一個刪點——反而會把讓這條路線之所以是這條路線的急轉彎給磨平。
簡單說
減少點數的標準做法是簡化演算法,大多數 GIS 和 GPS 工具實際採用的是 Ramer–Douglas–Peucker 演算法:線條轉向的地方保留點,已經接近直線的路段就把點刪掉。一段很陡的之字形彎道,因為線條在那裡轉得厲害,大部分點會留下來;一條又長又直的林道,就算原本有幾百個點,用幾個點就能畫出同樣的形狀,所以大部分會被刪掉。這種處理屬於專門用來編輯地理資料的通用工具的工作,不是記錄這趟健行的那個 App 該做的事——因為這是對一條已經錄完的軌跡做的一次性整理,不是記錄過程中需要當場決定的事。
為什麼會有人想這麼做
檔案大小其實很少是真正的理由。GPX 是純文字格式,就算是一整天的長途健行,軌跡本身跟同一趟健行留下的照片、影片片段比起來,依然是個不大的檔案,光靠點數本身很難把檔案撐大到寄不了郵件、傳不上去的地步。比較常見的理由是接收端有限制:有些匯入工具、比較舊的專用 GPS 裝置,或是某個工作流程裡的某一步,對單條軌跡能接受多少個點設了上限,密度太高的檔案就直接被拒收。另一個理由是顯示效果:點密度特別高的時候,在某些縮放層級下線條看起來會有點毛躁、抖動,簡化之後的版本在不改變實際路線的前提下,看起來能乾淨不少。
仔細簡化和粗暴抽稀的差別
用哪種方法來減點很重要。靠譜的簡化演算法會看整條線的形狀,只保留維持這個形狀所必需的點,所以轉彎的地方還是轉彎,筆直的路段能縮到只剩兩端兩個點。相較之下,每隔三個、五個點機械式地刪一個,或是不管線條實際怎麼走、每隔固定距離只留一個點,這種粗暴的做法會把軌跡的每一段都一視同仁。
- 按固定間隔刪點,可能會把一個急轉彎的角削掉,因為機械式的刪除根本不知道正是那一個點撐住了這個彎。
- 一小段原路折返的路線,也可能被這樣刪到去程和回程兩條線糊成一條模糊的線,因為固定間隔的刪除完全沒有機制去特別照顧掉頭那個點。
靠譜的簡化工具不會給所有點套用同一條機械規則,而是根據軌跡實際的形狀來決定留下哪些點,所以能避開這些問題。
隨點數一起變薄的東西
GPX 裡的一個點通常不只帶著位置,一般還掛著時間戳記和海拔值。刪掉一個點,連帶這些資訊也一起沒了,不只是地圖上少了一個位置。簡化得比較狠的軌跡,留下的時間戳記也會變少,要是後續有什麼地方要從檔案重新算配速或行進時間,而不是直接讀已經存好的總數,這種影響就會更明顯。海拔也是同樣的道理:為了在地圖上畫出乾淨線條而做的簡化,優化的是位置,不是海拔,原始記錄裡那些小起伏,只要恰好落在一段近似直線的路段中間,就可能被整段抹平。
TrailCam 在這裡扮演什麼角色
TrailCam 按實際走過的密度記錄路線,匯出成標準 GPX 1.1 檔案之前不會先幫你抽稀,匯出的就是記錄下來的那趟健行本身,而不是已經被誰按自己的需求減過點的版本。如果要傳去的地方需要的點數比這更少,那是匯出之後另外找專門做簡化的工具來處理的一步,不是 TrailCam 裡的一個設定。GPX 匯出是可選的 TrailCam Pro 裡的功能,App 本身免費下載。
常見問題
- 減少點數會不會改變軌跡顯示的距離?
- 仔細簡化過的軌跡形狀基本沒變,距離也幾乎不會變,因為演算法本來就是按保留線條形狀的原則來挑點。按固定間隔機械式刪點的粗暴做法,因為會削掉仔細的方法本該留住的轉角,距離的偏差往往會更明顯一些。
- 匯出之前,能不能請記錄 App 先幫我簡化軌跡?
- 這要看是哪一款 App,但一般來說這不是記錄 App 匯出時會自動做的事,而是由專門做軌跡編輯的 GIS 或 GPS 軟體另外處理的一步。按完整密度匯出的 GPX 檔案,之後隨時都能交給專門的簡化工具處理。
- GPX 軌跡有沒有一個「點太多了」的明確標準?
- 沒有統一標準,完全取決於檔案最終要去的那個工具或裝置的上限。同樣密度的軌跡,某個匯入工具能順利接受,換成上限更低的舊款 GPS 裝置或別的工作流程,就可能被判定為密度太高。
記錄你自己的軌跡
TrailCam 是一款 iPhone 上的 GPS 軌跡記錄 App,會把沿途拍下的影片、照片與語音釘在你拍它的那個位置,並支援匯出成 GPX 1.1 或 CSV。免費下載。