2011-05-27 6 views
5

Comment calculer la distance entre 2 places en utilisant les coordonnées GPS?Mesure de distance par les coordonnées GPS

+1

Duplication de http://stackoverflow.com/questions/1420045/how-to-find-distance-from-the-latitude-and-longitude-of-two-locations –

+0

Vous utilisez peut-être cet algorithme dans un environnement intégré mais il n'y a rien dans la question pour le lier à l'informatique embarquée. Question re-étiquetée. –

Répondre

9

Vous devez utiliser la formule Haversine: formule Haversine:

R = rayon de la terre (rayon moyen = 6371 km)

Δlat = lat2- lat1

Δlong = long2- long1

a = sin² (Δlat/2) + cos (LAT1) cos (LAT2) .sin² (Δlong/2)

c = 2.atan2 (√a, √ (1-a))

d = Rc

Où d est la distance (solution) et tous les angles doivent être en radians

Rechercher la bibliothèque Haversine et en 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

Note: cela ne vous donnera qu'une estimation très approximative. La terre n'est pas une sphère parfaite (ce qui explique pourquoi [WGS84] (http://en.wikipedia.org/wiki/WGS84) existe) et le calcul ne tient pas compte de la hauteur. – GrahamS

Questions connexes