2012年3月22日 星期四

將GPS經緯度座標轉換成直線距離

我在網路上找到別人寫好,疑似是C#的版本:

http://www.dotblogs.com.tw/jeff-yeh/archive/2009/02/04/7034.aspx

我改成C/C++的版本:

#define M_PI 3.14159265358979323846
double ConvertDegreeToRadians(double degrees)
{
    return (M_PI/180)*degrees;
}
double GetDistance(double Lat1, double Long1, double Lat2, double Long2)
{
    double Lat1r = ConvertDegreeToRadians(Lat1);
    double Lat2r = ConvertDegreeToRadians(Lat2);
    double Long1r = ConvertDegreeToRadians(Long1);
    double Long2r = ConvertDegreeToRadians(Long2);

    double R = 6371; // Earth's radius (km)
    double d = acos(sin(Lat1r) *
    sin(Lat2r) + cos(Lat1r) *
    cos(Lat2r) *
    cos(Long2r-Long1r)) * R;
    return d;
}

想要使用這個function很簡單
例如想要得知24.797254,120.969189到24.803545,120.979038的距離,就這樣呼叫:

cout<<GetDistance(24.797254,120.969189,24.803545,120.979038)<<endl;

function回傳的單位是公里。

3 則留言:

  1. 你好
    我試了一下您的程式,發現結果為2128191391。
    可以幫我解決一下為什麼會是這個數字嗎?
    我帶入兩個經緯度
    12133.6063,2505.0892
    12133.6001,2505.0914

    回覆刪除
    回覆
    1. 你的單位不對吧,應該是帶入121.336063,25.050892,小數點點錯地方。

      刪除