dimanche 7 février 2010

Transformer des coordonnées GPS en une distance

Les données enregistrées dans la base de données sont une longitude et une latitude données en degrés.
Évidemment la comparaison des coordonnées GPS ne fournit pas des distances en kilomètres !!
Ainsi, déterminer la proximité d'un amis par rapport à une coordonnée GPS n'est pas un calcul trivial. Nous avons utiliser un calcul que nous avons trouvé sur un forum après recherches sur google et qui se révèle être; après quelques tests; plutôt proche de la réalité.
Voici le calcul utilisé:
d = R * (pi/2 - asin ( sin x1 * sin x2 + cos ( y1 - y2 ) * cos x1 * cos x2 ));
avec
d distance entre les 2 points
R rayon de la Terre
x1 lattitude en radians du 1er point
x1 lattitude en radians du 2eme point
y1 longitude en radians du 1er point
y1 longitude en radians du 2eme point

On voit qu'il faut encore transformer les données puisque le calcul utilise les radians alors que nous fournissons des degrés. Encore une fois une recherche rapide sur google fournit ces informations:

radians = degres * PI / 180
Implémenter ceci en java est relativement simple:

/**
*
* @author Yann Loiseau
*/
public class GPS {
public static float degres2radians(float degres){
return (float) (degres * Math.PI / 180);
}

static float getKilometers(float lattitude1, float lattitude2, float longitude1, float longitude2) {
return (float) (6378 * (Math.PI / 2 - Math.asin(Math.sin(GPS.degres2radians(lattitude1)) * Math.sin(GPS.degres2radians(lattitude2)) + Math.cos(GPS.degres2radians(longitude1) - GPS.degres2radians(longitude2)) * Math.cos(GPS.degres2radians(lattitude1)) * Math.cos(GPS.degres2radians(lattitude2)))));
} //d = R * (pi/2 - asin ( sin x1 * sin x2 + cos ( y1 - y2 ) * cos x1 * cos x2 ));
}





Aucun commentaire:

Enregistrer un commentaire