online exifread python gps gpsd

exifread - ¿Qué biblioteca de gps recomendarías para Python?



exifread online (5)

Estoy buscando una biblioteca gratuita para Python que pueda calcular tu dirección y tu velocidad a partir de las coordenadas GPS, y tal vez puedas calcular si estás en algunos límites o cosas como esta.

¿Hay bibliotecas que usted conoce y que funcionaron bien para usted?

Editar: Ok, parece que tengo que especificar esto un poco. Estamos usando python en una máquina Linux y obteniendo los datos del gpsd. Así que espero que no haya necesidad de una biblioteca speciel solo para hablar con el dispositivo. Lo que estoy buscando es código python haciendo algunos cálculos básicos con los datos. Como comparar las últimas posiciones y calcular la velocidad y la dirección.


El libro "Beginning Python Visualization" incluye solo un ejemplo: analizar los datos GPS e inferir la velocidad y la ubicación a partir de él. Su código fuente está disponible en línea en http://www.apress.com/


Las oraciones de GPS que recibe de un dispositivo GPS son bastante fáciles de decodificar, y esto parece un proyecto divertido. No estoy seguro de lo que obtienes de gspd, pero si son estas oraciones, realmente tuve que hacer algo como esto para la escuela hace unas semanas (pero en LabView):

$GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx hhmmss.ss = UTC of position llll.ll = latitude of position a = N or S yyyyy.yy = Longitude of position a = E or W x = GPS Quality indicator (0=no fix, 1=GPS fix, 2=Dif. GPS fix) xx = number of satellites in use x.x = horizontal dilution of precision x.x = Antenna altitude above mean-sea-level M = units of antenna altitude, meters x.x = Geoidal separation M = units of geoidal separation, meters x.x = Age of Differential GPS data (seconds) xxxx = Differential reference station ID

Así que podrías hacer un gpsstring.split ('','') y obtendrás una matriz de todos los elementos que luego podrás analizar. Para ver más sobre estas oraciones (hay otras, creo que para la velocidad y la dirección), haga clic aquí .

Por ejemplo, para obtener la distancia aproximada entre dos puntos, puede usar la fórmula Haversine :

distance=R*2*asin(sqrt((sin((lat1-lat2)/2))**2 +cos(lat1)*cos(lat2)*(sin((long1-long2)/2))**2))

Donde R es el radio de la Tierra en la unidad de medida en la que desea obtener el resultado (por ejemplo, R = 6372 km). Esa línea real está tomada del programa LabView que tenía por ahí, pero la sintaxis es bastante similar a la de Python (tal vez verifique el operador de la división , es posible que desee hacer "de la futura división de importación".

Además, lat1, lat2, long1 y long2 tienen que expresarse en radianes. El formato en el que los está obteniendo es bastante extraño (hhmm.ff, donde ff son fracciones de minutos, por lo que van de 0 a 99 en lugar de 0 a 59 (como segundos)).

El código que utilicé para eso es:

h=floor(x/100); m=floor(x-(h*100)); s=(x-floor(x))*60; deg=sgn*(h+(m/60)+(s/3600)); rad=deg*pi/180;

Donde el signo es 1 para Norte y Este, y -1 para Sur y Este. De nuevo, ten cuidado con la división.

Revisar los límites es, creo, la parte más fácil. Si ya tiene las posiciones en radianes o grados, puede verificar si la latitud está entre dos límites de latitud y hacer lo mismo para la longitud.

Escribe un envoltorio alrededor de todo, y tienes tu biblioteca de GPS :)


La mayoría de las buenas unidades de GPS (utilizamos Oncore M12M) realmente le darán, como salida, su velocidad y rumbo. Primero verificaría la documentación de su receptor GPS para ver si ya se está enviando esta información, o si dicho mensaje se puede habilitar. En mi experiencia, estos datos generalmente son parte de la telemetría estándar que te dará un receptor.

Si eso no funciona, creo que su mejor opción es usar los detalles del WGS-84 (el sistema de coordenadas del GPS) para obtener una coordenada real (x, y, z) y luego diferenciarla con la siguiente para encontrar su rumbo. y tome la magnitud de la diferencia en el intervalo de tiempo para encontrar su velocidad. Algunos detalles aquí: http://topex.ucsd.edu/geodynamics/14gravity1_2.pdf

Si realmente quieres un paquete que haga todo esto, creo que pyEphem es bastante bueno, aunque creo que podrías ahorrar un poco de tiempo buscando y obtener un buen conocimiento al escribirlo tú mismo.

(Disculpe si no fue útil, cartel de primera vez, sigue aprendiendo cómo acumular desbordamiento)


No estoy seguro de entender sus requisitos exactos, pero, según su dispositivo & c, parece haber muchos posibles candidatos, como:

Si lo que quieres decir es que ya has obtenido la salida de la unidad GPS y solo tienes que analizarla & c, sospecho que uno o más de los ejemplos anteriores (que desafortunadamente no he probado) contendrán módulos bien aislados para ese tarea, que, dependiendo de las condiciones de licencia, puede reutilizar; esta pregunta SO también podría ayudar si eso es lo que estás haciendo.


Aparentemente, el módulo de python que viene con gpsd es el mejor módulo para nosotros. Para una mirada de inicio aquí (el sitio redirige al correo no deseado).

El módulo gps que viene con el gpsd tiene algunas funciones muy útiles. El primero es obtener los datos de gpsd y transformarlos en una estructura de datos utilizable. Luego, los módulos te dan acceso a tu velocidad y tu rumbo actual en relación con el norte. También se incluye una función para calcular la distancia entre dos coordenadas en la tierra teniendo en cuenta la naturaleza esférica de la tierra.

Las funciones que faltan para nuestro caso especial son:

  • Cálculo del encabezado entre a puntos. Significa que estoy en un punto orientado al norte, al cual debo girar para encarar el punto al que quiero llegar.

  • Tomando los datos de la primera función y nuestro rumbo actual para calcular un giro en grados que tenemos que hacer para enfrentar un punto deseado (no es un gran problema porque básicamente es solo una resta)

El mayor problema para trabajar con esta biblioteca es que es principalmente un contenedor para el gpsd, por lo que si está programando en un sistema operativo diferente, entonces gpscode debería funcionar como Windows o MacOS, no puede ejecutar el código o instalar el módulo .