Filtrar los datos de AntiMap Log

4 de Julio de 2013

AntiMap Log es una app Android (es disponible también para IPhone) poco conocida que permite grabar rapidamente et facilmente datos GPS con su celular. Me gusta mucho (su diseño es muy agradable) y la uso a menudo. Lo que hace es crear un archivo CSV que contiene los datos de localización (lat, long), pero también la orientación respecto al Norte, la velocidad (en kilómetros por hora), la distancia (en kilómetros) desde el inicio del registro y el tiempo, también desde el incio de la grabación.

Como es una app muy simple, no hay opción para por ejemplo, grabar datos todos los X segundos o no guardar la información sobre la orientación. AntiMap Log graba los datos aproximadamente cada 30 milisegundos, lo que significa muchos dobletes, los cuales hacen el archivo CSV mucho mas pesado que lo necesario.
A continuación, son las 10 primeras lineas de un archivo CSV creado por AntiMap Log. La anteúltima columna contiene las distancias desde el inicio de la grabación. Vemos que todos los valores son iguales (entonces las Lat, Long también).

Una otra cosa que se puede cambiar también es el tiempo (la última columna). Esta expresado en milisegundos desde el inicio del registro. En vez de eso, prefiero tener para cada punto la fecha y el horario en el cual ha sido tomado. Eso se puede obtener a partir del nombre del archivo CSV creado (En Android estos archivos se encuentran en una carpeta llamada "AntiMap"). El nombre de un archivo AntiMap Log sigue este formato: 130912_0924_24.csv. Significa que la grabación ha empezado a las 09:24:24 el día 13 de setiembre de 2012. Una última cosa que me falta es un header, es decir nombres para mis columnas.
Así que al final quiero obtener un archivo así (con tabulaciones en vez de comas para delimitar mis columnas):
Entonces, escribí un pequeño script que hace todo eso. Lo que hago es copiar mi archivo CSV en mi laptop y luego ejecuto el script. No modifico el archivo inicial (lo guardo por si acaso), creo un nuevo archivo CSV (con el sufijo '_filtrado') que no contiene dobletes y que esta formateado como lo explique anteriormente.

A continuación, el código, es simple y lo he comentado bastante así que se debe entender facilmente.

El filtro es muy eficaz. Por ejemplo en el caso de un trayecto de unos 50 minutos en carro dentro de la ciudad (con mucho tráfico, entonces muchos dobletes), paso de uno archivo inicial de unas 90 000 lineas y que pesa 4 Mo a un archivo filtrado de 1300 lineas y que pesa 80 ko. Ahora puedo crear una capa vector al toque con la herramienta "Añadir capa de texto delimitado" de QGIS.

Twittear