recorrida - ¿Cómo calcular la distancia mientras se camina en Android?
app para medir kilometros recorridos en auto (7)
Estoy desarrollando una demostración para mi aplicación, en la que hay dos botones nombrados como "START" y "STOP". Cuando el usuario toca "START", comenzará a caminar. Lo que quiero hacer es hacerlo para que cuando los usuarios toquen "STOP" y luego la demostración calcule su distancia entre "START" y "STOP". Si el usuario presionó "START" y presionó "STOP" sin dar un solo paso, entonces debe mostrar 0km o 0m. No tengo ni idea de cómo debería empezar esto; por favor haga una sugerencia
Comentario a "Hay un problema con esta solución. Si viajas a una velocidad constante, la aceleración es 0, por lo que el acelerómetro no detectará ninguna lectura. - jnovacho hace 16 segundos" (lo siento, no tengo suficiente reputación para comentar directamente)
cuando se acelere, guarde la aceleración y luego calcule la velocidad a la que camina. Detenga el cálculo de velocidad cada vez que cambie la aceleración y comience de nuevo. Si deja de hacerlo, debería recibir una acentuación negativa, entonces tendría que calcular si simplemente redujo la velocidad o se detuvo por completo. Pero eso es simplemente matemáticas :)
Hay maneras diferentes de hacer esto:
- GPS : siga agregando la distancia GPS entre 2 puntos cada X segundos (por ejemplo, 10 segundos). Compruebe Android Location.distanceTo or distanceBetween. La aplicación Check My Tracks , es de código abierto. El GPS no está disponible en interiores y podría tener un error si el usuario cambia de dirección con mucha frecuencia (lea cada 1-2 segundos)
- Acelerómetro : busque el código / biblioteca para la detección de pasos usando el acelerómetro. La distancia viene de la doble integración de la aceleración, los errores pueden sumarse muy rápidamente aquí.
- Detector de pasos : incorporado en Nexus 5 . Google debe haberse ocupado de los errores del acelerómetro en la medida de lo posible. Esta es una computación basada en hardware, consume menos batería pero no está disponible en la mayoría de los teléfonos a la fecha.
También se puede comprobar el cómputo muerto peatonal.
Intente usar sensores para esto, creo que no debería usar GPS, ya que puede no ser tan preciso. Consulte el siguiente proyecto de podómetro de código abierto para ver de qué está hablando.
Actualizaré esta respuesta con un código más específico si desea ir con el sensor.
Me había ido con el método gps. Con los siguientes pasos: con el clic del botón de inicio, la latitud y la longitud del punto de inicio se obtuvieron y almacenaron en mi dto con un TripId adecuado.
en el clic del botón de parada:
TripDto dto = service.GetStartLatLong(TripIdA);
double lat = Double.valueOf(dto.getStartLati());
double lon = Double.valueOf(dto.getStartLongi());
Location locationa = new Location("point A");
locationa.setLatitude(lat);
locationa.setLongitude(lon);
double distance = location.distanceTo(locationa);
La distancia devuelta por el método location.distanceTo () está en metros.
Solicite los permisos de GPS en su aplicación. Cuando se toca el inicio, grabar las coordenadas del GPS. Haz lo mismo para parar. Ahora tienes dos coordenadas. A continuación, puede aplicar la fórmula de distancia para obtener la distancia total recorrida.
Editar:
En cuanto al caso aclarado en los comentarios, creo que lo que hay que tener en cuenta son los sensores de movimiento de Android. Puede que tenga que hacer muchas suposiciones o pedir a sus usuarios que calibren su aplicación antes del uso real.
Supongamos que conoce el factor de ritmo de su usuario. Con el sensor de movimiento, el tiempo que el usuario está "caminando" (obviamente, no hay una manera fácil de determinar si el usuario está caminando o simplemente agitando el teléfono). Multiplique esto con el factor de ritmo de su usuario y obtendrá una idea bastante aproximada de cuánto ha caminado su usuario.
Una forma de hacerlo es utilizando los datos del acelerómetro. Su aplicación debe registrar continuamente los datos del acelerómetro después de que el usuario presione el botón Iniciar. Observará un pico en sus datos cada vez que el usuario dé un paso. Aplique un filtro a estos datos, y podrá detectar la cantidad de pasos tomados con una precisión razonable. Multiplíquelo por la longitud del paso y obtendrá una aproximación de la distancia recorrida. Tome la altura del usuario como un argumento de entrada. La longitud del paso es alrededor de 0.45 * Altura de una persona. Dado que este enfoque es independiente del GPS, también funcionará en interiores. EDITAR: necesitará usar los valores del acelerómetro para los tres ejes para que sea bastante independiente de la orientación del dispositivo. Puede ir con x ^ 2 + y ^ 2 + z ^ 2
public double getDistance(double lat1, double lon1, double lat2, double lon2)
{
double latA = Math.toRadians(lat1);
double lonA = Math.toRadians(lon1);
double latB = Math.toRadians(lat2);
double lonB = Math.toRadians(lon2);
double cosAng = (Math.cos(latA) * Math.cos(latB) * Math.cos(lonB-lonA)) +
(Math.sin(latA) * Math.sin(latB));
double ang = Math.acos(cosAng);
double dist = ang *6371;
return dist;
}