En nuestras encuestas aéreas de vida silvestre, generalmente generamos docenas de archivos GPX, y generalmente convertimos la mayoría de ellos en archivos shape para mostrar en una aplicación SIG. Los archivos GPX son una excelente manera de mantener todos (o casi todos) sus datos GPS en un solo lugar: son archivos xml que almacenan información de registros de ruta, puntos de referencia y rutas en un formato conveniente. Almacenan múltiples pistas, incluso viejas pistas guardadas de un Garmin.
Me gustaría almacenar todos estos datos de seguimiento en una base de datos espacial, en paralelo con otras tablas que tienen datos de observación puntual de la misma encuesta.
ogr2ogr me permitirá convertir la pista en una base de datos espacial:
ogr2ogr -append -f "SQLite" -dsco SPATIALITE=yes # add to table with Spatialite filetype
-dsco INIT_WITH_EPSG=yes -t_srs epsg:4326 # using WGS84
SURVEYDATA.sqlite GPXFILE.gpx tracks -nln tracktable; # adding tracks to 'tracktable'
Sin embargo, esto importa cada pista guardada como una línea, ¡perdiendo la información de tiempo / ubicación para cada punto de pista!
¿Alguien sabe de alguna manera inteligente de construir una base de datos de tracklog que conserve esa información?
EDITAR :
Los tracklogs no son solo una línea, son colecciones de puntos secuenciales, cada uno con un atributo de elevación y tiempo. Cada punto pertenece a un segmento de pista, que a su vez pertenece a una pista dada, y los puntos dentro de cada segmento de pista se tomaron sin interrupción y se puede suponer que están vinculados. Por ejemplo:
<trk><name>ACTIVE LOG</name>
<trkseg>
<trkpt lat="-13.471403" lon="31.382982"><ele>467.818725585938</ele><time>2009-09-09T03:53:38Z</time></trkpt>
<trkpt lat="-13.471403" lon="31.382982"><ele>468.780029296875</ele><time>2009-09-09T03:53:50Z</time></trkpt>
<trkpt lat="-13.471403" lon="31.382982"><ele>465.896118164063</ele><time>2009-09-09T03:54:43Z</time></trkpt>
</trkseg>
Por lo tanto, para guardar un tracklog, debe guardar esta colección de puntos con sus datos asociados.
Una solución podría ser cargar estas pistas como puntos, con columnas adicionales para el nombre de la pista, segmento, elevación y tiempo; Sin embargo, no creo que ogr convierta las pistas como puntos.
Solución
Gracias a @scruss que señaló gpx2spatialite , que instalé (OS X 10.9) con sudo easy_install gpx2spatialite
. Este conjunto de herramientas está diseñado para el proyecto 'drawinglife' (y por lo tanto tiene información de 'ciudad' que probablemente sea innecesaria para la mayoría de nosotros); la página principal gpx2spatialite no explica mucho, pero el wiki de drawinglife es mejor. Aún así, muchas características no documentadas, como eliminar duplicados.
Cree una base de datos espacial para archivos GPX que contendrá segmentos de pista, pistas, puntos de ruta y puntos de referencia. También tiene una configuración de 'usuarios' (lo cual parece extraño, ya que sqlite no es un sistema de acceso de usuarios, sino que estaba destinado a dibujar life) diseñado para etiquetar las diferentes pistas:
gpx2spatialite create_db MyGPXArchive.db
Cargue una carpeta completa de archivos GPX, incluidas todas las subcarpetas, verificando y eliminando duplicados en el camino:
gpx2spatialite -s -d MyGPXArchive.db -u SL25 Selous2013/
Opciones:
-s
= no verifique si los puntos de seguimiento están en la base de datos de la ciudad (lo acelera MUCHO)-d MyGPXArchive.db
= base de datos a utilizar;-u SL25
= agregar el usuario SL25 (solo una etiqueta que usé para el conjunto de pistas recopiladas);Selous2013
= la carpeta (con subcarpetas) que tiene las pistas que me interesan.
Loco:
Si ha guardado pistas en un Garmin anterior que descarta la información de la marca de tiempo, bloqueará la importación (elimine esas pistas guardadas utilizando una utilidad como GPSU). Si tiene gpsbabel , primero filtre el archivo con algo como:
gpsbabel -w -r -t -i gpx -f [INPUT.gpx] -x track, start = 20000101 -o gpx -F [OUTPUT.gpx]
Respuestas:
ptrv / gpx2spatialite hace esto notablemente bien, guardando marcas de tiempo para todos los puntos y derivando datos de velocidad y longitud para pistas. Tampoco importará pistas duplicadas, por lo que puede alimentarlo con una gran cantidad de archivos GPX y los eliminará adecuadamente.
Actualización : ejemplos de uso, según lo solicitado:
Inicializar nueva base de datos:
Agregue un solo archivo gpx:
(Si el usuario de nombre de usuario no existe en la base de datos, le preguntará si desea crearlo. La base de datos está construida con pistas / puntos de referencia / rutas asignados a uno o más usuarios).
Agregue todos los archivos gpx en la carpeta / :
Uso: se trata de una base de datos espaciales, con mesa transectos la celebración de las pistas como polilíneas, trackpoints que contienen los puntos individuales (con el tiempo, la elevación, etc), y puntos de referencia para los waypoints definidos. También hay numerosos índices, algunas definiciones de ciudades del mundo y posiblemente también información de estilo SLD incorporada que aún no he explorado. Como ejemplo trivial, aquí hay un mapa de cómo se define mi ciudad natal (Toronto) a través de ~ 7 años de registros de seguimiento:
Al utilizar líneas con un 75% de transparencia, las rutas más frecuentes se vuelven más oscuras.
fuente
easy_install gpx2spatialite
realidad lo instalaría como un script accesible desde la línea de comandos! Lauser
opción también era confusa, no la explican en la página principal, y spaceialite es un sistema sin acceso restringido.user
opción tiene sentido para el proyecto Drawinglife, ya que permite que varios participantes agreguen sus pistas a la misma base de datos. Gracias por las sugerencias sobre excluir el etiquetado de la ciudad y por encontrar las razones de los bloqueos. Si tiene archivos GPX sin marcas de tiempo, puede sintetizar los datos de tiempo utilizando la opción de faketime de GPSBabel .gpx2spatialite import -u user -s -d db.spatialite file1.gpx …
Para ampliar su comentario: "¿FME tiene un método específico para guardar archivos GPX?"
Sí, tiene control total sobre las rutas, waypoints, tracks y metadatos.
FME es una herramienta muy valiosa y poderosa para manipular datos gis y datos no espaciales juntos.
ver para más detalles http://evangelism.safe.com/fmeevangelist26/
fuente
Hay algunas ideas aquí para crear su propio programa para extraer datos GPX en Python o Perl. A partir de aquí, no es demasiado difícil poner los datos en una base de datos espacial. Tendrá que pensar en un esquema adecuado para almacenar en espacial; ¿qué atributos desea mantener?).
fuente
Si desea seguir la ruta OGR, el mejor enfoque es exportar primero a Shapefile, que exportará múltiples shapefiles que representan la distinción waypoint / trackpoint / way / track y los metadatos asociados, y luego fusionar cada conjunto de archivos en su SQLite principal base de datos.
fuente
Intenta agregar
a su comando ogr2ogr
fuente