TODOPIC

FORO TÉCNICO => Telefonía, GPS y Microcontroladores => Mensaje iniciado por: scientist en 17 de Diciembre de 2010, 21:08:17

Título: como saber cuando pase por un punto especifico en gps
Publicado por: scientist en 17 de Diciembre de 2010, 21:08:17
Hola amigos, tengo una duda, estoy leyendo las tramas de un gps, y solo busco leer el comando
gpgga
el cual me da
$GPGGA,160920.807,1947.5139,N,09037.3225,W,0,05,2.3,81.1,M,-9.7,M,,*6D
en este ejemplo, me encuentro en la escuela, y saco el valor de latitud y longitud, los guardo en una variable double, la pregunta es

¿como puedo saber que pase por un punto o cerca de un punto que haya guardado anteriormente, vamos a suponer que quiero guardar la coordenada 1948.51 y 09038.32 en latitud y longitud respectivamente, y estoy en la trayectoria de un vehiculo, en ese momento paso por ahi otra vez, y quiero guardar la hora que pase por ahi, una de mis soluciones fue la simplemente sacar la distancia entre el punto guardado y el punto actual, con la formula

d=sqrt((x2-x1)^2+(y2-y1)^2)) y una vez que tengo esa distancia compararla con un radio de tolerancia aproximado, el problema viene, cuando me pregunto, en que unidaddes esta esto???? que fue lo que saque??? por que mi idea es despues comparar esa "distancia" con 50 metros, alguien me puede hechar una mano de que formula utilizar? saludos
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: Felixls en 17 de Diciembre de 2010, 22:07:22
d=sqrt((x2-x1)^2+(y2-y1)^2)) y una vez que tengo esa distancia compararla con un radio de tolerancia aproximado, el problema viene, cuando me pregunto, en que unidaddes esta esto???? que fue lo que saque??? por que mi idea es despues comparar esa "distancia" con 50 metros, alguien me puede hechar una mano de que formula utilizar?

Hola scientist, esa fórmula no te va a servir, busca el método de Haversine o SLC (Spherical Law of Cosines)


Por haversine es así:

Código: [Seleccionar]
def havDistance(lat1, lon1, lat2, lon2):
    dLat = lat2 - lat1
    dLon = lon2 - lon1
    a = math.sin(dLat / 2) * math.sin(dLat / 2) \
        + math.cos(lat1) * math.cos(lat2) \
        * math.sin(dLon / 2) * math.sin(dLon / 2);
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
    return R * c

por SLC
Código: [Seleccionar]
def slcDistance(lat1, lon1, lat2, lon2):
    return math.acos(math.sin(lat1) * math.sin(lat2)
                     + math.cos(lat1) * math.cos(lat2)
                     * math.cos(lon2 - lon1)) * R

links
http://en.wikipedia.org/wiki/Haversine_formula
http://mathworld.wolfram.com/SphericalTrigonometry.html
http://www.deanandara.com/Argonaut/Sensors/Gps/GettingData.html

saludos.
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: scientist en 17 de Diciembre de 2010, 22:15:39
muchas gracias Felixls, de hecho, eso estaba tratando de entender en esta pagina

http://www.movable-type.co.uk/scripts/latlong.html (http://www.movable-type.co.uk/scripts/latlong.html)

veo que defines la funcion como una especie de macro, para que lenguaje es ese? saludos!!! y Gracias de nuevo

Se me olvidaba, veo en la pagina que postee, que la longitud y latitud la convierten a radianes, en la formula que pones es igual, los valores de latitud y longitud los tomo igual que como los saca el GPS en gpgga ???

o los convierto como en esta pagina?

http://u3x.net/al-karem/?p=63 (http://u3x.net/al-karem/?p=63)
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: Felixls en 17 de Diciembre de 2010, 22:22:45
El código es python, está sacado de uno de los links, en realidad son conceptos muy simples, de trigonometría esférica, algo muy útil para los navegantes (antes, ahora está el GPS  :lol:)

saludos
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: drm.electronic en 01 de Marzo de 2011, 14:54:53
Por lo que he visto hasta ahora una diferencia de latitud de 0.000500 es aproximadamente 50 mts(eso por la latitud +-12), si necesitas programar en PIC, donde creo q es más dificil hacer el cálculo real, por las funciones, intenta con esa aproximación y para hacerlo más fácil no es necesario que sea circular sólo un cuadrado, osea si la diferencia de latitudes es menor a tu tolerancia y lo mismo ocurre en la longitud, estás cerca de tu punto.
Sólo son dos restas y un operador AND.
Título: Como Crear Geocerco
Publicado por: beatAurex1 en 29 de Marzo de 2011, 19:20:14
Hola a todos, me preguntaba si este metodo que publican, me podria servir para programr un geocerco, en un pic, o alguien tednra la teoria  de como hacerlo, he buscaod en el foro peor no encuentro algo al respecto.  gracias
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: jeremylf en 26 de Septiembre de 2011, 03:08:53
por SLC
Código: [Seleccionar]
def slcDistance(lat1, lon1, lat2, lon2):
    return math.acos(math.sin(lat1) * math.sin(lat2)
                     + math.cos(lat1) * math.cos(lat2)
                     * math.cos(lon2 - lon1)) * R

Estoy queriendo usar esta formula para lograr esto, pero me doy cuenta que los valores que tengo son con decimales (-12.86026,-76.4891467, despues de haberlos pasado a radianes). Y las funciones del math.h del CCS solo admiten en sus argumentos de sin, cos, etc. variables de 32 bits solamente, mas no floats. No habria algun prolblema con esto? Se podria?

Gracias, un saludo.
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: jeremylf en 26 de Septiembre de 2011, 03:15:56
Vaya, debe ser por el sueño pero si que se puede en ccs hacer cos, sin o tan con argumento de float y hasta de 64 bits... seguro vi mal. Losiento =D


Porcierto, como lo resolviste scientist?

Saludos :D
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: jeremylf en 03 de Octubre de 2011, 03:30:36
Hola. Habra alguna forma de crear una zona amplia de varios puntos y que el pic sepa si esta dentro de toda esa area o no? Sera que con varios radios o hay alguna otra forma mas conveniente? Gracias.
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: Suky en 03 de Octubre de 2011, 10:33:01
Podes tener un punto especifico y darle un tolerancia de aprox. +/-11m modificando el 4º decimal. O sea:

Longitud: xxx.xxx_    -> Latitud 0º:11m | 45º:7.8m | 70º:3.7m
Latitud: xx.xxx_   -> 11 m

El problema está para latitudes mayores a 60º donde la longitud comienza a reducirse bastante. Si eso no fuera problema poder armar un sector a controlar mediante un punto.

Saludos!
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: jeremylf en 04 de Octubre de 2011, 21:46:15
Gracias Suky. Veras, quisiera que el area que el PIC pudiese controlar sea asi mas o menos:

(http://)

Entonces, como hago esas verificaciones de acuerdo a esta area que tiene varios puntos...?
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: Suky en 04 de Octubre de 2011, 21:50:07
En ese caso los juegos que ha propuesto en su momento jgpeiro06 pueden ayudarte, hay un par de algoritmos  :)

http://www.todopic.com.ar/foros/index.php?topic=25639.msg209665#msg209665


Saludos!
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: jeremylf en 05 de Octubre de 2011, 13:59:40
Uy, estaria algo dificil integrar eso en coordenadas de GPS y todo no?  gracias suky.
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: Suky en 05 de Octubre de 2011, 14:24:22
No, podes verlo como x,y.
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: jeremylf en 05 de Octubre de 2011, 15:28:41
Tu te refieres a la propuesto que dio BrunoF en su momento en ese juego? Pues, para el caso de GPS, son valores del tipo float...
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: Suky en 05 de Octubre de 2011, 16:49:52
Tu te refieres a la propuesto que dio BrunoF en su momento en ese juego? Pues, para el caso de GPS, son valores del tipo float...

Claro, para un float de 32 bits hasta el 5º/4º decimal de la latitud/longitud creo que es valido. Por ahí no vas apoder copiar/pegar y ejecutar el código, pero se puede estudiar el algoritmo y capaz es cambiar un int por float  :tongue: No lo he mirado, pero los algoritmos propuestos en el juego son para determinar si hay un punto dentro de un polígono


Saludos!
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: jeremylf en 05 de Octubre de 2011, 22:31:41
si, interesante esta. Gracias hombre
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: jeremylf en 06 de Octubre de 2011, 21:47:17
Estaba pensando... y que tal si enves de cambiar el programa para convertir a floats lo hacemos al revees, es decir, los valores que te da el gps (por ejemplos: 12.125487) multiplicarlos por 1,000,000 para tenerlo en entero y adecuar mejor la funcion con in int32 talves.
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: Suky en 06 de Octubre de 2011, 22:30:38
También, una opción.


Saludos!
Título: Re: como saber cuando pase por un punto especifico en gps
Publicado por: BrunoF en 07 de Octubre de 2011, 03:21:57
Hola!

Ya son floats en el algoritmo, no se donde viste jeremy enteros... Igualmente puede que necesites desplazar un poco la coma porque me parece que son demasiados decimales...