TrailCam

指南

兩個 GPS 座標之間的距離要怎麼算

兩個 GPS 座標說到底就是兩組數字——各自一個經度、一個緯度,很容易就想把它們當成平面網格上的兩個點來處理:把經緯度分別相減,平方,加起來,再開根號。這個捷徑是錯的,而且錯得不只是差一點四捨五入那麼簡單。經緯度是量在一個球面上的角度,不是平面上的位置,真正的距離計算從第一步起就得把這一點考慮進去。

先講結論

把兩組經緯度換算成距離,標準做法是用一個大圓距離公式——多數健行和地圖類軟體實際用的是 haversine 公式——把兩個點當成球面上的點,先算出沿著這個球面走過去的最短弧長,再乘以地球的半徑得到實際距離。這個公式先把兩個座標都轉成弧度,接著按固定的順序跑一串三角函數,最後回傳的是兩點之間的直線距離——不是沿著某條步道或某條路走過去的距離,只是一個地點到另一個地點之間最直接的那段間隔。

為什麼平面捷徑行不通

緯度 1 度在地球上任何地方對應的距離大致相同,大約 111 公里。經度 1 度就不是這樣了:在赤道附近同樣是 111 公里左右,但越靠近南北極就越縮小到接近零,因為經線是向兩極收攏的。要是不管三七二十一,把緯度和經度的一度都當成同一回事來算,離開熱帶地區之後算出來的結果就會開始偏離真實距離——緯度低的地方偏差小一點,往南北極去偏差就越來越大。用畢氏定理走捷徑,前提是假設有一張方格網,網格裡不管哪個方向 1 度都是 1 度,但經緯度本來就不是照這個假設長出來的。

大圓距離公式繞開了這個問題,因為它根本沒把座標當成網格上的位置來處理。它直接在座標本來所在的那個曲面上,用角度本身來計算,所以不需要再另外根據緯度高低做一次修正。

這個計算實際需要什麼

不管是哪個版本的公式,起點都是同樣的四個數字:第一個點的經緯度,第二個點的經緯度——在一切開始之前,先把它們從角度換算成弧度。接下來是一串固定順序的正弦、餘弦、反正切運算,算出一個角度:從地心看過去,這兩個點之間張開的角度。把這個角度乘以地球的平均半徑,就得到一個實際距離,單位隨半徑給定的單位而定。

這個計算只需要這兩組座標本身,別的什麼都不需要。不需要知道中間還有哪些點,不需要海拔,也不需要知道兩點之間的地面上有什麼——它純粹是球面上兩個位置之間的一個函數。

兩個點靠得很近時,用簡化算法就夠了

完整的球面三角學在長距離時才真正要緊,因為那種情況下兩點之間地球的彎曲程度已經大到不能忽略。步道上相鄰的兩個點——相隔幾公尺,間隔幾秒鐘記錄——彼此靠得夠近,實際上可以把它們之間那一小片地表當成平的來看待。只針對當下所在緯度修正一下經度 1 度實際對應的距離,用這樣一個簡單的平面近似算法算出來的答案,跟大圓距離公式的結果之間的差距,比 GPS 接收器本身的誤差還要小。不少健行記錄軟體在點與點之間實際跑的正是這個簡化版本,因為算起來更省,而在健行這個距離尺度上又不會丟掉任何有意義的東西。

一趟健行的總距離說到底就是這個

一條記錄下來的軌跡並不是一次距離計算的結果——它是把這同一個兩點間計算,在軌跡裡每一對相鄰的點之間各跑一遍,再把所有結果加起來。一趟每秒記錄一次、走了一個小時的健行,大概有 3600 個點,也就差不多有這麼多個首尾相連的小段距離計算,每一段只涵蓋幾公尺。健行結束時顯示的總距離,就是把它們全部加起來的結果,這也是為什麼它是一個不斷累加的數字,而不是一次測出來的數值——要等每一對相鄰的點都跑完了這個計算,這個總數才算存在。

同樣的道理,這也是一段水平距離,而不是沿坡面走過的距離,因為公式用的只有經度和緯度,從頭到尾都沒看過海拔這一欄。同樣的座標,走一段陡坡和走一段平路算出來的距離是一樣的,因為這個計算本來就沒有任何一步會去讀海拔。

容易搞混的地方

  • 把兩個座標直接相減當成距離——座標的差是一個角度,不是距離,要把它正確換算成距離,還得知道這兩個點具體在地球上的什麼位置。
  • 直接對經緯度用畢氏定理——這只在平面上成立,而經緯度描述的是球面上的位置,離赤道越遠,這樣算出來的誤差就越大。
  • 跑三角函數之前忘了把角度換算成弧度——多數公式的實作都預設輸入是弧度,直接餵進去角度的原始數值,算出來的結果看起來像那麼回事,實際上並不是真正的距離。
  • 以為結果裡包含了海拔差——大圓距離量的是沿地表的距離,跟健行總距離用的是同一套水平方向的算法,所以同樣兩點之間,陡坡和平路量出來的距離完全一樣。

TrailCam 在這裡做的事

TrailCam 在記錄一段路線的整個過程中,會持續跑這同一個兩點間的計算,把每一小段距離不斷加進健行進行中顯示的那個總距離裡。GPX 1.1 匯出檔裡保留了每個記錄點未經四捨五入的原始經度、緯度和海拔,所以如果你想自己核對,完全可以拿著這份檔案把同一個距離重新算一遍。GPX 匯出屬於可選的 TrailCam Pro,App 本身免費下載。

常見問題

GPS 距離計算最常用的公式是什麼?
多數健行、地圖和 GIS 軟體用的是 haversine 公式。它把兩個座標都當成球面上的點,回傳的是大圓距離——沿地表走的最短路徑,而不是穿過地面的直線距離。
能不能直接把兩組經緯度相減得到距離?
不能。兩個座標的差是一個角度,要把這個角度換算成實際距離,還得看這兩個點具體在地球上的哪個位置,因為經度 1 度對應的實際距離離赤道越近越大,離得越遠越小。
兩個 GPS 座標之間的距離計算,有算進海拔變化嗎?
預設沒有。標準的大圓距離計算只用經度和緯度,這也是為什麼一趟健行記錄下來的總距離是一個水平方向的數字,不會因為爬了一段陡坡就跟著變大。

記錄你自己的軌跡

TrailCam 是一款 iPhone 上的 GPS 軌跡記錄 App,會把沿途拍下的影片、照片與語音釘在你拍它的那個位置,並支援匯出成 GPX 1.1 或 CSV。免費下載。

在 App Store 下載