2011-05-27 160 views
5

如何使用GPS坐标计算2个地点之间的距离?GPS坐标距离测量

+1

重复http://stackoverflow.com/questions/1420045/how-to-find-distance-from-the-latitude-and-longitude-of-two-locations – 2011-05-27 07:49:28

+0

您可能会在嵌入式环境中使用此算法,但问题中没有任何东西将其与嵌入式计算联系起来。问题重新标记。 – 2011-05-31 15:01:41

回答

9

你必须使用haversine公式: haversine公式:

R =地球半径(平均半径= 6371公里)

Δlat= lat2- LAT1

Δlong= long2- long1

一个=sin²(Δlat/ 2)+ COS(LAT1)名为.cos(LAT2).sin²(Δlong/ 2)

C = 2.atan2(√A,√(1-a))的

d = RC

,其中d是距离(您的溶液)和所有的角度必须是弧度

外观为半正矢库,并且在C:

#include <math.h> 
#include "haversine.h" 

#define d2r (M_PI/180.0) 

//calculate haversine distance for linear distance 
double haversine_km(double lat1, double long1, double lat2, double long2) 
{ 
    double dlong = (long2 - long1) * d2r; 
    double dlat = (lat2 - lat1) * d2r; 
    double a = pow(sin(dlat/2.0), 2) + cos(lat1*d2r) * cos(lat2*d2r) * pow(sin(dlong/2.0), 2); 
    double c = 2 * atan2(sqrt(a), sqrt(1-a)); 
    double d = 6367 * c; 

    return d; 
} 

double haversine_mi(double lat1, double long1, double lat2, double long2) 
{ 
    double dlong = (long2 - long1) * d2r; 
    double dlat = (lat2 - lat1) * d2r; 
    double a = pow(sin(dlat/2.0), 2) + cos(lat1*d2r) * cos(lat2*d2r) * pow(sin(dlong/2.0), 2); 
    double c = 2 * atan2(sqrt(a), sqrt(1-a)); 
    double d = 3956 * c; 

    return d; 
} 
+0

注意:这只会给你一个非常粗略的估计。地球不是一个完美的球体(这就是为什么存在[WGS84](http://en.wikipedia.org/wiki/WGS84)),并且计算不考虑高度。 – GrahamS 2011-05-27 07:38:37