Ver Mensaje Individual
  #6  
Viejo 13/05/13, 05:08:09
Array

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
 Cita: Originalmente Escrito por hectorhctr1 Ver Mensaje
-Guarde la ubicacion cuando me bajo del coche, (osea cuando el bluetooth, se desconecta del manos libres del coche) -Se desconecte el bluetooth. -Cuando salga de casa y al activar los datos maviles, que se abra el google maps, y que me muestre donde esta el coche, y cuando este cerca de esa posicion que active el bluetooth.
Hector, las dos primeras partes son algo ya conocido y no tienen problema. La tercera parte es un planteamiento muy ingenioso y novedoso, te felicito por la brillante idea.

Creo que puede hacerse aunque exige una tarea complicada porque no es nada sencillo calcular la distancia entre dos ubicaciones. Voy a intentarlo, al menos en la teoría. El asunto es tan complejo que creo que debemos empezar con un apartado de variables, explicando lo que representa cada una.

%Posi1 es la posición1 obtenida del GPS al salir del coche: latitud y longitud (en grados).
%posi2 es la posición2 GPS mientras vamos andando hacia el coche.
%lat1 y %lat2 son las latitudes de %Posi1 y posi2, norte-sur.
%lon1 y %lon2 son las longitudes, este-oeste.
%distalat es la distancia norte-sur entre %lat1 y %lat2.
%distalon es la distancia este-oeste entre %lon1 y %lon2.
%dista es la distancia absoluta entre las posiciones 1 y 2, en metros.
%crono guarda el momento en que se inicia la segunda tarea para buscar el coche (en segundos)

Otra cosa que hay que tener en cuenta es que la ubicación viene en grados (latitud y longitud) y cada grado equivale a 111 kilómetros con 189 metros. Personalmente prefiero convertir primero a metros y hacer todos los cálculos en metros; eso se me hace más comprensible que hacer los cálculos en grados. Empecemos ya.

Primer perfil, que podría llamarse "Coche".
Contexto: conectado al bluetooth del coche.
Tarea de entrada: yo no pondría nada porque ya estamos conectados al bluetooth, pero aquí se pueden añadir cosas del tipo Activar-el-navegador-GPS, abrir-Google-Maps, volumen-al-máximo, etc.

Tarea de salida
- Bluetooth, establecer apagado.
- GPS, establecer encendido.
- Establecer variable %Posi1 a 0 (cero).
- Obtener ubicación, fuente GPS, cuenta atrás de 60 segundos.
- Establecer variable %Posi1 a %LOC (%LOC es la variable de ubicación obtenida por GPS).
- GPS, establecer apagado
- Si %Posi1 = 0
- . Decir "No se ha podido guardar la posición del coche, que fastidio". Si se puede, ponerle la voz de Sheldon Cooper, ayuda bastante.
- Else
- . Decir "Posición guardada"
- Finsi (Endif)

Eso guardará la posición en la que hemos dejado el coche. Luego, cuando queramos volver al coche hay que activar otra tarea. Podemos crear un segundo perfil que se active automáticamente cuando salgamos de casa/oficina y perdamos la cobertura de nuestra red wifi, o bien podemos activar la tarea pulsando un Widget. Recomiendo implementar ambos sistemas, no son excluyentes.

La tarea tendría las siguientes acciones:
- Si %Posi1 = 0
- . Decir "No se ha guardado ninguna posición, ayer yo estaba borracho y no sé donde dejé el coche"
- . Detener Tarea.
- Finsi (Endif)
- Establecer variable %crono a %TIMES (momento en que comenzamos a buscar el coche, en segundos)
- GPS, establecer encendido
- Abrir mapa, modo Navegar a, Latitud-Longitud %Posi1

Hasta aquí no tiene problema, era la parte que ya estaba conocida de sobra. Ahora vamos a calcular los datos de la ubicación del coche (%Posi1) en metros, tanto en latitud como en longitud.

- Divide %posi1 por la coma (para separar latitud y longitud en dos sub-variables)

- Establece %lat1 a %posi11 (obtenemos la latitud)
- Establece %lat1 a %lat1 * 111189 (conversión a metros)
- Establece %lat1 a floor(%lat1) (redondeo para quitar decimales)

Con eso ya tenemos en %lat1 la latitud en metros. A continuación repetimos los mismos cálculos y ajustes para la longitud)

- Establece %lon1 a %posi12
- Establece %lon1 a %lon1 * 111189
- Establece %lon1 a floor(%lon1)

Lo pesado viene ahora: cada poco rato hay que obtener la posición y calcular la distancia, y -mientras esa distancia sea grande- repetir el proceso una y otra vez.

- Etiqueta POSICIONAR (aquí empieza el bucle y esta etiqueta es el destino de los saltos, más abajo queda claro, supongo)
- Establecer variable %Posi2 a 0 (cero).
- Obtener ubicación, fuente GPS, cuenta atrás de 60 segundos.
- Establecer variable %Posi2 a %LOC
- Ir a (etiqueta) NOESTOYCERCA Si %Posi2 = 0

Ahora haremos cálculos equivalentes para obtener latitud y longitud en metros, de nuestra ubicación (mientras caminamos hacia el coche).

- Divide %posi2 por la coma

- Establece %lat2 a %posi21
- Establece %lat2 a %lat2 * 111189
- Establece %lat2 a floor(%lat2)

- Establece %lon2 a %posi22
- Establece %lon2 a %lon2 * 111189
- Establece %lon2 a floor(%lon2)

Ahora calculamos las distancias parciales.

- Establece %distalat a abs(%lat1-%lat2) (distancia norte-sur, en metros)
- Establece %distalon a abs(%lon1-%lon2) (distancia este-oeste, en metros)

Y finalmente usamos el teorema de pitárogras para calcular la distancia real total entre los dos puntos. Raiz cuadrada de sumar (un cateto al cuadrado) y (el otro cateto al cuadrado).

- Establece %dista a sqrt((%distalat * %distalat)+( %distalon * %distalon))

El resto está chupao...
Voy a considerar 100 metros como distancia mínima, aunque esto puede cambiarse.

- Si %dista > 100

Todavía estamos lejos, pero hay que reconsiderar si debemos continuar la búsqueda. Si llevamos más de 30 minutos con la tarea es preferible abortarla. Puede ser que mientras íbamos al coche nos hemos encontrado con un amigo que nos va a invitar a diez cubatas, mejor no seguir buscando el coche. Seguir con la tarea supondría un gasto inútil de batería, sobre todo por el uso repetitivo del GPS.

- Etiqueta NOESTOYCERCA
- . Si %TIMES - %crono > 30 * 60 (datos en segundos).
- . . Decir "Abortando la búsqueda del coche por agotamiento del time"
- . . Ir a (etiqueta) APAGARYTERMINAR
- . Fin si (Endif)

Si llegamos aquí es que estamos lejos del coche pero a tiempo de seguir buscándolo.

- . Esperar 1 minuto
- . Ir a (etiqueta) POSICIONAR
- Finsi (Endif)

Aquí llegamos cuando ya estamos cerca del coche.

- Encender bluetooth
- Etiqueta APAGARYTERMINAR
- GPS, establecer apagado

Fin, acabose, the end.

La espera de un minuto también puede cambiarse o incluso eliminarse. Si se reduce, eso supondrá más ubicaciones GPS y por tanto mayor consumo de batería. La distancia (100 metros o lo que sea) debería ser proporcional al espacio que podemos caminar a pie en ese tiempo de espera. También hay que probar a ver cómo influye el tiempo del GPS (que yo he propuesto en otros 60 segundos) pero creo que a veces el GPS puede acabar antes de que ese tiempo termine. Habría que probarlo.

Sobre los cálculos y la variable %TIMES, hay más información en el siguiente hilo: Matemáticas en Tasker, http://www.htcmania.com/showthread.php?t=571609

Tened en cuenta que solo es un proyecto, no lo he probado. Tal vez contenga errores. En todo caso, creo que es una base para probar y/o proponer alternativas o otras mejoras adicionales.

Queridos dummies, eso es todo por hoy.
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker

Última edición por Caravantes Día 16/05/13 a las 13:14:35.
Responder Con Cita
Los siguientes 4 usuarios han agradecido a Caravantes su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]