2014-11-25 270 views
-1

我的程序計算以千米爲單位的兩點之間的距離,給出兩個緯度和經度值。C++ - 緯度和經度距離計算器

#include<iostream> 
#include <cmath> 

#define pi 3.14159265358979323846 

using namespace std; 

double calculateDistance(double lat1, double long1, double lat2, double long2) { 
    double dist; 
    dist = sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(long1 - long2); 
    dist = acos(dist); 
    dist = (6371 * pi * dist)/180; 
    return dist; 
} 

int main() { 
    cout << calculateDistance(51.752021, -1.257726, 51.507351, -0.127758); 
    return 0; 
} 

這就是我想實現的公式:

enter image description here

,我使用來測試我的輸出,http://www.movable-type.co.uk/scripts/latlong.html,其中列明瞭答案應該是82.60公里計算器。 (我越來越33.6227公里)

+0

你應該先度轉換爲弧度。 – 2014-11-25 12:28:26

+0

「其中d用度表示」 – Cristy 2014-11-25 12:30:13

+0

可能的重複[如何計算兩個緯度 - 經度點之間的距離?](http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-在兩個緯度經度點之間) – Cristy 2014-11-25 12:32:59

回答

1

像這樣的東西應該工作(雖然沒有測試):

double toRad(double degree) { 
    return degree/180 * pi; 
} 

double calculateDistance(double lat1, double long1, double lat2, double long2) { 
    double dist; 
    dist = sin(toRad(lat1)) * sin(toRad(lat2)) + cos(toRad(lat1)) * cos(toRad(lat2)) * cos(toRad(long1 - long2)); 
    dist = acos(dist); 
//  dist = (6371 * pi * dist)/180; 
    //got dist in radian, no need to change back to degree and convert to rad again. 
    dist = 6371 * dist; 
    return dist; 
} 
+0

不幸的是,這不起作用,返回1.44168。 – user3371750 2014-11-25 12:37:30

+0

@ user3371750只是做了一個改變。 – 2014-11-25 12:38:06

相關問題