Note: cette solution ne fonctionne que pour de courtes distances.
J'ai essayé d'utiliser la formule postée par dommer pour une application et j'ai trouvé qu'elle fonctionnait bien pour de longues distances mais dans mes données, j'utilisais uniquement de très courtes distances et le post de dommer s'en sortait très mal. J'avais besoin de vitesse, et les calculs géographiques plus complexes fonctionnaient bien mais étaient trop lents. Donc, dans le cas où vous avez besoin de vitesse et que toutes les calculs que vous réalisez sont courts (peut-être < 100m ou ainsi). J'ai trouvé cette petite approximation très efficace. Elle suppose que le monde est plat, donc ne l'utilisez pas pour de longues distances, elle fonctionne en approximant la distance d'une seule latitude et longitude à la latitude donnée et en renvoyant la distance de Pythagore en mètres.
public class FlatEarthDist {
//retourne la distance en mètres
public static double distance(double lat1, double lng1,
double lat2, double lng2){
double a = (lat1-lat2)*FlatEarthDist.distPerLat(lat1);
double b = (lng1-lng2)*FlatEarthDist.distPerLng(lat1);
return Math.sqrt(a*a+b*b);
}
private static double distPerLng(double lat){
return 0.0003121092*Math.pow(lat, 4)
+0.0101182384*Math.pow(lat, 3)
-17.2385140059*lat*lat
+5.5485277537*lat+111301.967182595;
}
private static double distPerLat(double lat){
return -0.000000487305676*Math.pow(lat, 4)
-0.0033668574*Math.pow(lat, 3)
+0.4601181791*lat*lat
-1.4558127346*lat+110579.25662316;
}
}