Estoy buscando una biblioteca gratuita para Python que pueda calcular su dirección y su velocidad a partir de las coordenadas GPS y tal vez pueda calcular si se encuentra en algunos límites o cosas como esta.

¿Hay bibliotecas que conoces y que funcionaron bien para ti?

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 especial para hablar solo con el dispositivo. Lo que estoy buscando es el código de Python haciendo algunos cálculos básicos con los datos. Como comparar las últimas posiciones y calcular la velocidad y la dirección.

8
Janusz 5 jun. 2009 a las 04:01

3 respuestas

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

3
Eli Bendersky 5 jun. 2009 a las 07:53

Las oraciones 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, en realidad tuve que hacer algo así 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 

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

Por ejemplo, para obtener la distancia aproximada entre dos puntos, puede usar la Haversine Formula:

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 su 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 revise el división operador, es posible que desee hacer "desde futuro importar división".

Además, lat1, lat2, long1 y long2 deben 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 usé 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 letrero es 1 para Norte y Este, y -1 para Sur y Este. De nuevo, cuidado con la división.

Verificar 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 lat y hacer lo mismo para la longitud.

Escribe un contenedor alrededor de todo, y tendrás tu biblioteca GPS :)

3
Adrian Mester 5 jun. 2009 a las 08:48

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 esta información ya se está enviando o si se puede habilitar dicho mensaje. En mi experiencia, estos datos generalmente son parte de la telemetría estándar que un receptor le dará.

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

Si realmente desea un paquete que haga todo esto, creo que pyEphem es bastante bueno, aunque creo que puede ahorrar un poco de tiempo buscando y obtener un buen conocimiento al escribirlo usted mismo.

(Lo siento si no es útil, póster por primera vez, todavía estoy aprendiendo cómo apilar el desbordamiento)

1
tracker 23 oct. 2015 a las 19:18