Calcular GPS App Inventor 2

Este artículo ha surgido tras la petición de un lector que tras leer el artículo de cómo crear un Podómetro en App inventor nos preguntaba cómo podíamos Calcular distancias con el GPS de App Inventor o medir la distancia recorrida con el GPS. Bien vamos a explicar cómo se puede hacer esto.

image - Calcular GPS App Inventor 2

Calcular la distancia entre dos puntos sobre un plano podría llegar a ser relativamente sencillo.

Tendríamos un punto de origen A y un punto de destino B, pero esto nos daría como resultado una línea recta.

dW0TQ4sXCnKdiLOsNbrGNS25JIv8Kvzwzxn Z3i9RCK0UcUhK5N6yVhsqB D9lHH2ThfbEAcgvUlOkTJwoWlye5HMcdYch3WzQlCdTNtxx6vmMD5zDjS3nj Ts7L LsWfgRJJcIT - Calcular GPS App Inventor 2

Cómo en nuestro caso queremos medir la distancia total de un trayecto A, D pasando por B y C y este no es en línea recta, la distancia resultante entre dos puntos no nos servirá. En este caso tendremos que ir calculando la distancia de A y B y sumarla a la distancia de B y C y el resultado sumarlo a la distancia de C y D.

FwnZehKlVB8CgMZ5oSe6 uDNXDyEaJCDtuM7ytPMcGVlbllBaXaFqYocjpq3B 24F2G9Tmgzgh4ba4tz YJpUleTB8IWckfZleAXGcOiBoct4FCYCP1tktIpKcTtOOS29XIrKpTu - Calcular GPS App Inventor 2

De esta manera dará como resultado la distancia total recorrida.

En segundo lugar cuando estos dos puntos los ubicamos sobre la esfera terrestre, (latitud + longitud), la cosa se complica. Ya que para calcular la distancia sobre una esfera no es lo mismo que sobre un plano. Pero tranquilos que también le daremos solución, y es aquí donde utilizaremos la fórmula de Haversine.

Creando el diseño para calcular distancias con el GPS de App Inventor.

El diseño de la pantalla se a creado utilizando dos DisposiciónVertical y una DisposiciónHorizontal, en la primera meteremos dos DisposiciónHorizontal  una contendrá dos etiquetas una con el texto «Latitud» y otra con cero esta última nos valdrá para mostrar los datos de nuestro GPS, en la segunda etiqueta pondremos  el texto Longitud y otra con cero esta última nos valdrá para mostrar los datos de Longitud de nuestro GPS.

En la segunda DisposiciónVertical meteremos cuatro etiquetas las dos primera mostraran la longitud y latitud del punto de partida y las dos últimas mostraran la longitud y latitud del punto de destino, estos datos los iremos actualizando programáticamente.

la última DisposiciónHorizontal tendrá en su interior tres etiquetas la primera contendrá el texto distancia, la segunda la utilizaremos para mostrar los kilómetros recorridos y la tercera contendrá la siglas Km para referirse a la unidad de distancia con la que estamos midiendo. Y por último necesitaremos un componente no visible posicionamiento, que dejaremos su configuración por defecto.

arwipIhvw8W7n48UN2uBW6vbtCbEkhTpOd3DHkFgdenX9IJRuu2OiA6d6orJaikbK1iV4 Ci9eFFlxzeP9RiAT7jv3xNjcLTUiVs841gWd0U3fQ5xU9XxgJhvUedWamN dJ6HfQQ - Calcular GPS App Inventor 2
qW5bbrxF1IPrm8hTOLHQnWTRieCHW G9o ebDNYGy2j4KOtqx4Otd5U1MVq8foqAFrvspWR5Uxk9oaOTyYg7o0if3DtVWGFC574SSIADIwDCrM8XGkR5mbbpBlARbMQT4Zh 6S7M - Calcular GPS App Inventor 2

Podrás descargar al final de este artículo el proyecto AIA para ver como se ha diseñado más detenidamente

Agregar un título 1 - Calcular GPS App Inventor 2

Programando la aplicación.

Vamos a utilizar la fórmula de Haversine para calcular la distancia entre dos puntos en una esfera terrestre

Sin entrar en demasiados detalles en términos matemáticos, la Fórmula del Haversine es:

R = radio de la Tierra

Δlat = lat2− lat1

Δlong = long2− long1

a = sin²(Δlat/2) + cos(lat1) * cos(lat2) * sin²(Δlong/2)

c = 2 * atan2(√a, √(1−a))

d = R * c

Para utilizar la Fórmula del Haversine necesitamos, además de las dos posiciones (latitud + longitud), el radio de la Tierra, que es 6371, pero este dato lo usaremos más adelante.

Entonces lo primero que haremos es crear cuatro variables globales a las que llamaremos LongitudA, LatitudA, LongitudB, LatitudB, y las inicializamos a cero. Como lo que queremos es medir dos puntos las dos primeras guardarán la longitud y latitud del punto de partida y las segundas guardarán la latitud y longitud del punto de destino.

UpQW1faUsfEq3HlFFdgzv7 fnYLRjEYCMJ VXuEn8CcxUSfsyrHsD90fdAlKCb svPQZ9xcKt47Co6LitoUgcJhRM vZdqLhldbmP1UEcwW 9VOyIzNtxLsziZsrv6EEZ6S3OO v - Calcular GPS App Inventor 2

Seguido crearemos otra variable global a la que llamaremos PrimeraLocalización y que contendrá un valor lógico, en este caso cierto, está variable se encargará de que no comencemos la aplicación con una de nuestras coordenadas a cero ya que esto daría como resultado una distancia enorme y errónea. También crearemos una variable global que más adelante guardará la distancia recorrida y que inicializamos a cero.

jER2OyHospgZ4RQrIiH9JPieAG4VfgMp 185RRdcFbJzbS3w3AV54Dew8wbdxa1yWPdNUNLGkUkotRQIO1EKKYeiYDByzJ7Bct5A6VXostQHikZ6sGkSFcyCkO5M 6iXJT2dkqhq - Calcular GPS App Inventor 2

Lo segundo que haremos es que al iniciar la aplicación pondremos el intervalo de tiempo del sensor de ubicación en 3000, esto hará que solo compruebe que se ha cambiado de posición cada 3 segundos.

nGy75mdGxVog7 o5lPcg9KqBzM4zLXN5472zV7CD0RoS9N5dvD53FGHOGmOjGoBRAkVHasvq6XCoY65ltZ1HcAHfTKErPxmweLqiwO1iQZm797orn2K oZYC7JZsSQTn4WDsJhZB - Calcular GPS App Inventor 2

Bien lo tercero es comprobar un cambio de localización y si es la primera vez que esto sucede, para lo que entra en juego la variable global PrimeraLocalización, que comprobando con un bloque IF que el valor de nuestra variable sea cierto, sabremos  que es la primera vez que obtenemos una ubicación y guardaremos las coordenadas de Longitud y Latitud de nuestro GPS que nos devolverá el bloque cuando SensorDeUbicación.CambioEnUbicación en nuestras variables globales LongitudA, LongitudB y LatitudA, LatitudB que ya creamos, y por supuesto justo después pondremos a falso la variable PrimeraLocalizacion. De esta manera lo que conseguiremos es que en el siguiente cambio de ubicación ya no sea la primera vez y por tanto cada vez que haya un cambio de posición, lo que antes era la posición de destino ahora sea la posición de origen y así sucesivamente, esto lo lograremos solo si nuestra condición es falsa, es decir el valor de la variable PrimeraLocalizacion es falso, si es así daremos el valor de la LatitudB a la LatituA y el valor de la LongitudB a la LongitudA. Con esto conseguimos que la posición de destino se convierta en la posición de origen.

En este punto aprovecharemos para mostrar los datos de nuestras cuatro variables en su correspondientes etiquetas.

1IPtYsLZRrXU3dlOq8PSilwIVvBg52pSYQM9ymOMTqq 0mbVHaKiRlyvZcblJE4FLda 1ovqoWEl nin8J37GXVlxt9kd5WhD2u F9eMVpn5e4iOfYHzlhtbvADdE3W74wiHNWZH - Calcular GPS App Inventor 2

Lo cuarto será calcular en base a los datos de nuestras variables globales la distancia, para ello vamos a crear en App inventor 2 un procedimiento que devuelva un resultado al que llamaremos  Haversine, el cual tendrá la responsabilidad de calcular la distancia entre ambas posiciones; en definitiva, contendrá la Fórmula del Haversine.

Dentro de este procedimiento inicializamos cuatro variables locales a las que inicializamos a 0, a las dos primeras las llamaremos NLatitud y NLongitud, y a las segundas las llamaremos A y C.

Ahora pasamos ya a las operaciones matemáticas. Pero antes deberemos arrastrar el bloque ejecutar resultado situado en bloquescontrol, sin él no podríamos obtener el resultado de la operación. El primer cálculo que debemos hacer es obtener la diferencia entre las latitudes y longitudes de ambas posiciones, dividiendo entre dos y a ese resultado sacar el coseno elevando al cuadrado. Si NLatitud con Lat1 y Lat2 y NLongitud con Lon1 y Lon2, entonces tendremos algo así:

ki4Oo3rF70mWqf0l2OT8V2BbGDwoaw3i0gtT2Is1ctL7cBVDWDpjiX8AzdqZY6hRlANukvOnuWk6cPPWBw4L2EgB59S0Z4XXe11lnilEAU2tuv0 elYKD PMxgQUkP ZLCeb1QJx - Calcular GPS App Inventor 2

El segundo paso es calcular la mitad del cuadrado de la distancia en línea recta (acorde a la longitud) entre los dos puntos y que vamos a representar en la variable “A” y la raíz cuadrada de “A” representada por “C” y por último el resultado será la del diámetro de la tierra  multiplicado por el valor de “C” pasado a radianes elevado al cuadrado.

6iutZdefslDCP xHYU8rG btnEizPs2ATBjw160hcop7kTdayOOxuwE17AU7BQhUfrAYm6gVd1yFWJhV5NLMOgD9XOd 2kqB17WNVb6WaiZOezQzIjOYEaNptluvMI1PP0Tmxwli - Calcular GPS App Inventor 2

Solo nos queda llamar a nuestro procedimiento y mostrar el resultado en nuestra etiqueta correspondiente, para ello nos ayudaremos de una nueva variable global a la que llamaremos DistanciaTotal y que inicializamos a cero.

7KtisdvV Bdc VBTdJnq4lRTHp0GBYbpubm0E7TRU0 jFUvyVh4 aBfUYRx 4dbgFTfzCTlFt JjpyZIvT8naLZnOlLT74FySqTwJ2HWIlR50XuuNxcb0ig5pW 68Uiw46unEbyK - Calcular GPS App Inventor 2

Seguido asignaremos a nuestra variable global distancia el resultado del cálculo de nuestro procedimiento y a la variable global DistanciaTotal le daremos el valor de la suma de la DistanciaTotal más Distancia, todo ello metido al final de el bloque cuando SensorDeUbicación.CambioEnUbicación.  Después solo nos faltara mostrar el resultado en nuestra etiqueta, quedará de la siguiente manera.

aYNRsAKFVZWgcufpw0iAXpC9nhhMsWDmWq r6f bfxf4Kdha6N vGSe2tbnymUFy A gKRlz95lCPMrUg3U is1avMyyVC6NjUJA6bsbfwaDyL7Kh2iRZ5TXwDy68Y2HInJID78e - Calcular GPS App Inventor 2

A tener en cuenta

Pese a que la Fórmula del Haversine es de las más utilizadas para el cálculo de distancias entre dos puntos. La fórmula asume que la Tierra es completamente redonda, con lo que cabe esperar una tasa de error que se podría llegar a asumir.

Bueno solo queda instalar en nuestro dispositivo la aplicación para calcular distancias con el GPS de App Inventor, y salir a dar una vuelta para probarla. No olvides encender el GPS en tu teléfono o de lo contrario no funcionara bien.

Me gustaría que participarán en este blog dejando un comentario, también puedes compartir este artículo en las redes sociales y seguirnos en las mismas un saludo.

Descarga el proyecto AIA de la aplicación.



11 comentarios en «Calcular GPS App Inventor 2»

    • Hola Luis gracias, intento que sea de ayuda todo los artículos de la página.
      A tu pregunta, se me ocurre que podrias crear un botón que al pulsar, pusiera la variable global «distanciaTotal» a cero,
      Un saludo.

      Responder
    • Con el móvil bloqueado no funciona. De momento App inventor 2 no permiteejecutar aplicaciones en segundo plano es decir cuando tu dispositivo tenga la pantalla bloqueada o apagada la aplicación dejará de funcionar, se quedará pausada. y de momento te decía el principio porque se supone que app inventor está en el desarrollo para poder crear aplicaciones que se ejecutan en segundo plano. De momento te tendremos que esperar.

      Responder
  1. Felicidades muchas gracias por el aporte una pregunta como podria sacar el angulo de dirección de un punto a otro

    gracias por tu ayuda

    Responder
  2. Saludos, me he desplazado 5 metros y pues para que cambien los valores desde el punto cero (0) se demora demasiado. Le he añadido al Resultado de la distancia en Km, otro Label para distancia en metros (simplemente multiplicando por 1000) pero la diferencia en los 5 metros reales el programa me muestra 0,35m (35cm) lo cual no es cierto. Que puede estar ocurriendo??

    Responder
    • Gracias por tu comentario tendría que ver como haces esa multiplicación y donde.
      ¿Estas multiplicando antes de el resultado final que muestra los kilómetros?. Fijate bien que despues no tengas ninguna conversion de decimales.

      Responder

Deja un comentario

error: Content is protected !!