que mit inventor español entrar descargar como appinventor app android google-maps math navigation

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!