mit - Creando un método usando Haversine Formula, Android V2
que es app inventor 2 (3)
No soy muy bueno con las matemáticas, pero necesito calcular la distancia de dos ubicaciones diferentes de los marcadores. Algo como esto:
public double CalculationByDistance(double initialLat, double initialLong, double finalLat, double finalLong){
return distance;
}
¿O hay alguna forma alternativa de calcular la distancia de dos marcadores, también traté de buscar respuestas en google ... pero no pude encontrar ninguna.
Referencia: http://en.wikipedia.org/wiki/Haversine_formula
Los comentarios son apreciados :) ¡Gracias!
¡Prueba esto, mucho más simple que Haversine!
Location me = new Location("");
Location dest = new Location("");
me.setLatitude(myLat);
me.setLongitude(myLong);
dest.setLatitude(destLat);
dest.setLongitude(destLong);
float dist = me.distanceTo(dest);
Desde su enlace de wikipedia, aplicando la fórmula directamente puede hacer lo siguiente:
public double CalculationByDistance(double initialLat, double initialLong, double finalLat, double finalLong){
/*PRE: All the input values are in radians!*/
double latDiff = finalLat - initialLat;
double longDiff = finalLong - initialLong;
double earthRadius = 6371; //In Km if you want the distance in km
double distance = 2*earthRadius*Math.asin(Math.sqrt(Math.pow(Math.sin(latDiff/2.0),2)+Math.cos(initialLat)*Math.cos(finalLat)*Math.pow(Math.sin(longDiff/2),2)));
return distance;
}
Si quieres quedarte con Haversine, algo como esto:
public double CalculationByDistance(double initialLat, double initialLong,
double finalLat, double finalLong){
int R = 6371; // km (Earth radius)
double dLat = toRadians(finalLat-initialLat);
double dLon = toRadians(finalLong-initialLong);
initialLat = toRadians(initialLat);
finalLat = toRadians(finalLat);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(initialLat) * Math.cos(finalLat);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
return R * c;
}
public double toRadians(deg) {
return deg * (Math.PI/180)
}
Además, necesita crear un método paraRadians () que convierta valores de grados a radianes, lo cual es bastante fácil. ¡Espero eso ayude!