GPS如何計算兩點座標的距離

如何計算兩點經緯度座標距離.

  好久沒寫GPS相關的東西了,前一段時間一直在忙東忙西的,之前有寫兩篇跟GPS相關的文章,主要是在如何從GPS取得目前所在座標,最近在MSDN Magazine看到一篇如何計算兩點座標的範例,剛好是我前一段時間一直在找的答案,當時卡在的一個問題點是如果兩點是直線,那就很好算了,但地球是圓的,所以就不是算兩點直線,需使用球面余弦定率,探討的愈深入,我會愈想睡.....所以MSDN Magazine真是佛心來的,這次就有這個範例,我也不用去想破腦子,不過Magazine上的範例並不完整,有個Function沒提供,所以根本不知道它呼叫這個Function還有做什麼,所以在這補上那個未加入的Function (如果有誤,也請指正).

Magazine上的範例 :

01         public double GetDistance(double Lat1, double Long1, double Lat2, double Long2)
02         {
03             double Lat1r = ConvertDegreeToRadians(Lat1);
04             double Lat2r = ConvertDegreeToRadians(Lat2);
05             double Long1r = ConvertDegreeToRadians(Long1);
06             double Long2r = ConvertDegreeToRadians(Long2);
07
08             double R = 6371; // Earth's radius (km)
09             double d = Math.Acos(Math.Sin(Lat1r) *
10                 Math.Sin(Lat2r) + Math.Cos(Lat1r) *
11                 Math.Cos(Lat2r) *
12                 Math.Cos(Long2r-Long1r)) * R;
13             return d;
14         }

15

補充 Function :

1         private double ConvertDegreeToRadians(double degrees)
2         {
3             return (Math.PI/180)*degrees;
4         }

 

  之前一直想做這個,因為可以做出像"龍珠雷達"的東西(太迷七龍珠了...),用途咧,可以用來玩尋寶遊戲,還有我每年都會痛一次的掃墓,因為很多墓地不是放在靈骨塔,都是在很偏僻的地方,每年都花很多時間在找墓地,如果用Papago之類的導航程式都會亂跳(顯靈了嗎?),所以直接儲存墓地的座標,下次再找的時候,就可以知道目前位置與目的點的距離.

 

參考資料 :

MSDN Magazine : 使用Mappoint和GPS的位置感知應用程式