¿Cómo construir una base de datos geográfica de registros GPS?

13

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]

Simbamangu
fuente
Utilizamos FME safe.com/fme/fme-technology/fme-desktop/features y mantiene toda la atribución que desea en una base de datos Oracle
Mapperz
1
@Mapperz: ¿FME tiene un método específico para guardar archivos GPX? Sin embargo, realmente estoy buscando una solución de software libre.
Simbamangu

Respuestas:

6

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:

gpx2spatialite_create_db db.sqlite

Agregue un solo archivo gpx:

gpx2spatialite -d db.sqlite -u user file.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 / :

gpx2spatialite -d db.sqlite -u user folder/

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:

Registros GPS de Toronto

Al utilizar líneas con un 75% de transparencia, las rutas más frecuentes se vuelven más oscuras.

scruss
fuente
¡Ajá, no me había dado cuenta de que en easy_install gpx2spatialiterealidad lo instalaría como un script accesible desde la línea de comandos! La useropción también era confusa, no la explican en la página principal, y spaceialite es un sistema sin acceso restringido.
Simbamangu
La useropció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 .
scruss
1
Para su información, la sintaxis de gpx2spatialite ha cambiado. Comando de importación típico ahoragpx2spatialite import -u user -s -d db.spatialite file1.gpx …
scruss
3

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. ingrese la descripción de la imagen aquí

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/

Mapperz
fuente
2

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?).

Stev_k
fuente
1

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.

tmcw
fuente
-1

Intenta agregar

-lco GPS_USE_EXTENSIONS=YES

a su comando ogr2ogr

Micha
fuente
Intenté esto en una nueva tabla, sin ningún efecto en los campos o datos resultantes. ¿Qué esperas que haga?
Simbamangu
Esperaba obtener los atributos extendidos. Volviendo a leer su pregunta, no creo que haya de todos modos obtener cada punto de seguimiento individual, aparte de exportar el seguimiento como puntos en sí.
Micha