2014-11-25 88 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

相关问题