Come creare un database geografico di registri GPS?


13

Nei nostri sondaggi sulla fauna selvatica aerea generiamo in genere dozzine di file GPX e di solito li convertiamo in file di forma per la visualizzazione in un'applicazione GIS. I file GPX sono un modo formidabile per conservare tutti (o quasi tutti) i tuoi dati GPS in un unico posto: sono file xml che memorizzano informazioni su tracklog, waypoint e rotte in un unico comodo formato. Memorizzano più tracce, anche vecchie tracce salvate da un Garmin.

Vorrei archiviare tutti questi dati di traccia in un database spazialite, parallelamente ad altre tabelle che contengono dati osservativi puntuali dello stesso sondaggio.

ogr2ogr mi permetterà di convertire la traccia in un database spazialite:

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'

Tuttavia, questo importa ogni traccia salvata come una linea - perdendo le informazioni sul tempo / posizione per ogni punto della traccia!

Qualcuno sa di eventuali modi intelligenti di creare un database tracklog che conserverà tali informazioni?

MODIFICA :

I tracklog non sono solo una linea: sono raccolte di punti sequenziali, ciascuno con un attributo di elevazione e tempo. Ogni punto appartiene a un segmento di traccia, che a sua volta appartiene a una determinata traccia, e i punti all'interno di ciascun segmento di traccia sono stati rilevati senza interruzione e si può presumere che siano collegati. Per esempio:

<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>

Pertanto, per salvare un tracklog è necessario salvare questa raccolta di punti con i relativi dati associati.

Una soluzione potrebbe essere quella di caricare queste tracce come punti, con colonne aggiuntive per nome, segmento, altezza e tempo della traccia; Tuttavia, non credo che ogr convertirà le tracce in punti.

Soluzione

Grazie a @scruss che ha sottolineato gpx2spatialite , con cui ho installato (OS X 10.9) sudo easy_install gpx2spatialite. Questo set di strumenti è progettato per il progetto "drawinglife" (e quindi contiene alcune informazioni sulla "città" che probabilmente non sono necessarie per la maggior parte di noi); la pagina principale di gpx2spatialite non spiega molto, ma la wiki di drawinglife è migliore. Tuttavia, molte funzionalità non documentate, come la rimozione di duplicati!

Crea un database spazialite per i file GPX che conterrà segmenti di traccia, tracce, trackpoint e waypoint. Ha anche impostato "utenti" (che sembra strano, dal momento che sqlite non è un sistema di accesso per l'utente, ma era pensato per il disegno) progettato per etichettare le varie tracce:

gpx2spatialite create_db MyGPXArchive.db

Carica un'intera cartella di file GPX, comprese tutte le sottocartelle, controllando e rimuovendo i duplicati lungo il percorso:

gpx2spatialite -s -d MyGPXArchive.db -u SL25 Selous2013/ 

Opzioni:

  • -s= non controllare se i trackpoint sono nel database della città (velocizza MOLTO)
  • -d MyGPXArchive.db = database da utilizzare;
  • -u SL25 = aggiungi l'utente SL25 (solo un'etichetta che ho usato per il set di tracce raccolte);
  • Selous2013 = la cartella (con le sottocartelle) che contiene le tracce che mi interessano.

bugs:

  • Se hai salvato tracce su un Garmin più vecchio che scarta le informazioni sul timestamp, si bloccherà l'importazione (rimuovi quelle tracce salvate utilizzando un'utilità come GPSU). Se hai gpsbabel , filtra prima il file con qualcosa del tipo:

    gpsbabel -w -r -t -i gpx -f [INPUT.gpx] -x track, start = 20000101 -o gpx -F [OUTPUT.gpx]


Utilizziamo FME safe.com/fme/fme-technology/fme-desktop/features e mantiene tutte le attribuzioni desiderate in un database Oracle
Mapperz

1
@Mapperz - FME ha un metodo specifico per salvare i file GPX? Sono davvero alla ricerca di una soluzione FOSS.
Simbamangu,

Risposte:


6

ptrv / gpx2spatialite lo fa straordinariamente bene, salvando i timestamp per tutti i punti e ricavando i dati di velocità e lunghezza per le tracce. Inoltre, non importerà tracce duplicate, quindi puoi alimentare una pila enorme per i file GPX e li tratterrà in modo appropriato.

Aggiornamento : esempi di utilizzo, come richiesto:

Inizializza nuovo database:

gpx2spatialite_create_db db.sqlite

Aggiungi un singolo file gpx:

gpx2spatialite -d db.sqlite -u user file.gpx

(Se l'utente nome utente non esiste nel database, verrà richiesto se si desidera crearlo. Il database è costruito con tracce / waypoint / rotte assegnate a uno o più utenti.)

Aggiungi tutti i file gpx nella cartella / :

gpx2spatialite -d db.sqlite -u user folder/

Utilizzo: è un database spaziale, con le linee di tracciamento della tabella che contengono le tracce come polilinee, punti di traccia contenenti i singoli punti (con tempo, elevazione, ecc.) E waypoint per tutti i waypoint definiti. Ci sono anche numerosi indici, alcune definizioni di città del mondo e forse anche informazioni di stile SLD incorporate che non ho ancora esplorato. A titolo di esempio banale, ecco una mappa di come la mia città natale (Toronto) viene definita attraverso ~ 7 anni di registri:

Registri GPS di Toronto

Usando le linee con il 75% di trasparenza, i percorsi più frequentemente percorsi diventano più scuri.


Ah, non avevo capito che lo easy_install gpx2spatialiteavrebbe effettivamente installato come uno script accessibile dalla riga di comando! Anche l' useropzione era confusa, non la spiegano nella pagina principale e spatialite è un sistema senza restrizioni di accesso.
Simbamangu,

L' useropzione ha senso per il progetto Drawinglife, in quanto consente a più partecipanti di aggiungere le loro tracce allo stesso database. Grazie per i suggerimenti sull'esclusione dell'etichettatura della città e per aver trovato i motivi degli arresti anomali. Se hai file GPX senza timestamp, puoi sintetizzare i dati temporali usando l' opzione faketime di GPSBabel .
scruss

1
Cordiali saluti, la sintassi gpx2spatialite è cambiata. Il tipico comando di importazione è oragpx2spatialite import -u user -s -d db.spatialite file1.gpx …
scruss il

3

Per ulteriori commenti: "FME ha un metodo specifico per salvare i file GPX?"

Sì, hai il pieno controllo di rotte, waypoint, tracce e metadati inserisci qui la descrizione dell'immagine

FME è uno strumento molto valido e potente per manipolare insieme dati gis e dati non spaziali.

vedi per maggiori dettagli http://evangelism.safe.com/fmeevangelist26/


2

Ci sono alcune idee qui per creare il tuo programma per estrarre i dati gpx in python o perl. Da qui non è troppo lungo per inserire i dati in un database spazialite. Dovrai pensare a uno schema adatto per l'archiviazione in spatialite: quali attributi vuoi conservare?).


1

Se si desidera seguire la rotta OGR, l'approccio migliore consiste nell'esportare prima in Shapefile, che esporterà più shapefile che rappresentano la distinzione waypoint / trackpoint / way / track e i metadati associati, quindi unire ogni set di file nel proprio SQLite principale Banca dati.


-1

Prova ad aggiungere

-lco GPS_USE_EXTENSIONS=YES

al tuo comando ogr2ogr


Ho provato questo su una nuova tabella, senza alcun effetto sui campi o sui dati risultanti. Cosa ti aspetti che faccia?
Simbamangu,

Mi aspettavo di ottenere gli attributi estesi. Rileggendo la tua domanda, non credo che ci sia modo di ottenere ogni singolo punto di traccia volte oltre all'esportazione della traccia come punti stessi.
Micha,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.