studio que manager example developer current android gps location distance

que - Android: valores erróneos distanciaA()



gps android developer (2)

Estoy escribiendo una aplicación para rastrear mi ruta. Estoy solicitando actualizaciones del GPS cada minuto y funciona bien. Me muestra mi punto exacto. Cuando quiero calcular la distancia entre el punto actual y el anterior funciona bien, pero de vez en cuando calcula la distancia totalmente incorrecta (me moví unos 200 my me devolvió un valor de más de 10 km). ¿Alguien sabe por qué esto podría pasar?

Aquí está la función que uso:

iRoute += myGPSLocation.distanceTo(prevLocation);

¡Gracias por adelantado!


distanceTo () funciona correctamente.
El error está de tu lado, el algoritmo más probable, por ejemplo, si no hay una solución de GPS disponible, y el teléfono toma una ubicación basada en una célula GSM, esto por supuesto puede estar desactivado en 1000m.

Para su aplicación que probablemente quiera resumir la distancia recorrida, solo tome correcciones de GPS, ¡no use otro LocationProvider que GPS!


Deja de usar las funciones Location.distancebetween & location.distanceto de google. No funcionan consistentemente.

En su lugar, use la fórmula directa para calcular la distancia:

double distance_between(Location l1, Location l2) { //float results[] = new float[1]; /* Doesn''t work. returns inconsistent results Location.distanceBetween( l1.getLatitude(), l1.getLongitude(), l2.getLatitude(), l2.getLongitude(), results); */ double lat1=l1.getLatitude(); double lon1=l1.getLongitude(); double lat2=l2.getLatitude(); double lon2=l2.getLongitude(); double R = 6371; // km double dLat = (lat2-lat1)*Math.PI/180; double dLon = (lon2-lon1)*Math.PI/180; lat1 = lat1*Math.PI/180; lat2 = lat2*Math.PI/180; double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); double d = R * c * 1000; log_write("dist betn "+ d + " " + l1.getLatitude()+ " " + l1.getLongitude() + " " + l2.getLatitude() + " " + l2.getLongitude() ); return d; }