Trazar información de GPS con Ruby
plot spatial (6)
Respuesta a la primera pregunta
Como usted declaró que "le gustaría hacer esto en Ruby ... si esa es una herramienta aceptable ", me voy de las manos y supongo que podría estar abierto a una solución que no sea de Ruby si cumple con todos sus requisitos. otros requerimientos.
Yo recomendaría Python principalmente porque en el primer capítulo de Beginning Python Visualization , Shai Vaingast -el autor- analiza un ejemplo de lectura en datos GPS de un receptor GPS y luego traza los resultados. Si está abierto a una solución basada en Python, este libro sería un gran recurso.
Aquí están los paquetes de Python que se utilizan para leer y trazar los datos de GPS:
- pySerial para leer los datos del GPS desde el puerto serie
- matplotlib para trazar los datos. " matplotlib es una biblioteca para hacer trazados 2D de matrices en Python. Aunque tiene sus orígenes en la emulación de los comandos gráficos de MATLAB®, es independiente de MATLAB y se puede utilizar de forma Pythonic orientada a objetos".
Aquí hay una figura de ejemplo creada por Shai Vaingast mostrando algunas de las diferentes capacidades de matplotlib para trazar datos de GPS.
Si no está abierto a una solución de Python, y preferiría Ruby, por cualquier razón, lo entiendo. Traté de buscar un equivalente de matplotlib en Ruby, pero no encontré un paquete equivalente.
Respuesta a la última pregunta
Aquí hay otro ejemplo , ¿alguna idea de cómo construyes cosas como esta?
Al mirar la esquina inferior derecha, parece que se utilizó DISLIN para crear esa imagen. Aunque DISLIN está disponible para varios lenguajes de programación, la página de requisitos del software DISLIN no muestra que Ruby sea compatible.
De acuerdo con el sitio web de DISLIN ,
DISLIN es una biblioteca de trazado de alto nivel para mostrar datos como curvas, gráficos polares, gráficos de barras, gráficos circulares, gráficos en 3D, superficies, contornos y mapas.
El software está disponible para varios compiladores C, Fortran 77 y Fortran 90/95 en los sistemas operativos UNIX, Linux, FreeBSD, OpenVMS, Windows, Mac OSX y MS-DOS. Los programas DISLIN son muy independientes del sistema, pueden trasladarse de un sistema operativo a otro sin ningún cambio.
Para algunos sistemas operativos, los lenguajes de programación Perl, Python, Java y el intérprete C / C ++ Ch también son compatibles con DISLIN. El intérprete DISLIN DISGCL está disponible para todos los sistemas operativos admitidos. Vea una lista completa de los sistemas operativos y compiladores compatibles.
Estoy buscando maneras de convertir programáticamente mis registros de GPS a imágenes y me gustaría hacer esto en Ruby ... si esa es una herramienta aceptable. No tengo antecedentes GIS en absoluto, pero como programador, creo que es un problema interesante a tener en cuenta.
Esto es lo que se me ocurrió hasta ahora. Primero necesitarás algún tipo de biblioteca gráfica. Fui por gnuplot porque encontré un enlace de Ruby para esa, pero R parece estar caliente en estos días. Creé un pequeño script que convierte un archivo GPX y alimenta los datos a gnuplot, dando como resultado algo como esto: alt text http://dl.dropbox.com/u/45672/gpslog.png
Esto se ve bien, pero gnuplot parece ser una herramienta para crear gráficos, no datos espaciales. ¿Es esta la manera de hacerlo o hay mejores soluciones disponibles?
Aquí hay otro ejemplo , ¿alguna idea de cómo construyes cosas como esta?
¿Realmente quieres imágenes o solo una forma de visualizar los datos? ¿Qué le parece usar la API de Google Maps?
Mira este enlace:
http://google-dox.net/O.Reilly-Google.Maps.Hacks/0596101619/googlemapshks-CHP-4-SECT-10.html
Creo que usar gnuplot desde cualquier lenguaje de programación es un buen enfoque inicial.
Sin embargo, sugiero que se agregue el comando de set size ratio -1
gnuplot en algún lugar de tu código, ya que esto hará que los ejes xey sean iguales en la gráfica, lo cual es extremadamente importante.
También podría aumentar la línea con marcadores de puntos muy pequeños espaciados por igual en el tiempo (suponiendo que tiene información de tiempo en sus datos, o al menos sabe que las filas se muestrean en intervalos de tiempo regulares), para que tenga una idea de la velocidad del movimiento, que de lo contrario se pierde (es decir, los marcadores de puntos de gran espaciado en la línea significan un movimiento más rápido). Obviamente, debe elegir un intervalo de tiempo entre los marcadores de puntos que los hace espaciados apropiadamente, o calcular dicho intervalo de tiempo automáticamente: es decir, calculando la longitud de su curva, convirtiéndola en unidades de píxeles y dividiendo por cualquier cosa entre 10 y 100, para obtener el número total de puntos que desea colocar El intervalo de tiempo está dado por el tiempo total de la pista dividido por dicho número de puntos. Esto debería funcionar de manera robusta para movimientos razonablemente regulares.
Otra opción es usar un sistema de gráficos diferente de gnuplot, que es potente pero un poco viejo. Las opciones que conozco incluyen:
- brusco , que es para ruby pero parece pasar por alto las habilidades de trazado 2D (que es un requisito obvio).
- Gráficos XML / SWF , que es poderoso y flexible, pero comercial. En este caso, usaría Ruby o cualquier otro lenguaje de programación para generar un archivo XML que luego se interprete en un gráfico interactivo.
- Google Chart API , que puede devolver imágenes de gráficos a través de la web, forjando una solicitud GET o POST apropiada en su código. En este caso, está
lxy
en el tipo de gráficolxy
, posiblemente compuesto con un diagrama de dispersión para los marcadores de punto.
La tercera opción parece ser la más divertida.
Quizás ya hayas oído hablar de Processing, pero ¿has oído hablar de Ruby-Processing ?
Del readme de Ruby-Processing :
Ruby-Processing es un contenedor de Ruby para el marco de trabajo de código de procesamiento.
...
Si algún momento de calidad con Ruby es su idea de una tarde agradable, o usted
abrigar la ambición de entrar en el acelerado mundo de Code Art, no del todo despiadado, entonces Ruby-Processing es probablemente algo que deberías probar para el tamaño....
Processing es un framework desarrollado por MIT para crear pequeños artefactos de código, animaciones, visualizaciones y similares, desarrollado originalmente por Ben Fry y Casey Reas, respaldado por un pequeño ejército de contribuidores de código abierto.
El procesamiento se ha convertido en una especie de estándar para la programación orientada visualmente, que influye fuertemente en los diseños de Nodebox, Shoes, Arduino y otros proyectos afines.
Si quieres ver más en R, también hay enlaces Ruby para eso, pero no ha habido actividad en el proyecto durante más de un año:
GDAL es un kit GIS Open Source muy popular, hay enlaces GDAL Ruby . Si desea datos de mapas, abrir un mapa de calles es muy útil. El trazado combinado de OSM y el GPS dará buenos resultados. GDAL / OGR Api tutorial está aquí.