2011-05-27 286 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