Nota: esta solución solo funciona para distancias cortas.
Traté de usar la fórmula publicada de dommer para una aplicación y encontré que funcionaba bien para largas distancias, pero en mis datos estaba usando todas las distancias muy cortas, y la publicación de dommer hizo muy mal. Necesitaba velocidad, y los geocalcos más complejos funcionaban bien pero eran demasiado lentos. Entonces, en el caso de que necesite velocidad y todos los cálculos que está haciendo son cortos (quizás < 100m más o menos). Encontré esta pequeña aproximación para que funcione bien. asume que el mundo es plano, así que no lo use para largas distancias, funciona al aproximar la distancia de una sola Latitud y Longitud a la Latitud dada y devolver la distancia pitagórica en metros.
public class FlatEarthDist {
//returns distance in meters
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;
}
}
¿Por qué no Math.toRadians() en lugar de deg2rad()? Sería realmente autosuficiente. –
@DavidG: ¿Cuál es la unidad de la salida? –
@Bala - Es malo, está en el comentario sobre el código en mi computadora pero falta aquí. Distancia en metros –