Wie erstelle ich eine geografische Datenbank mit GPS-Protokollen?


13

Bei unseren Luftaufnahmen von Wildtieren generieren wir in der Regel Dutzende von GPX-Dateien und wandeln die meisten davon in Shapefiles für die Anzeige in einer GIS-Anwendung um. GPX-Dateien sind eine hervorragende Möglichkeit, alle (oder fast alle) GPS-Daten an einem Ort zu speichern - es handelt sich um XML-Dateien, in denen Tracklog-, Wegpunkt- und Routeninformationen in einem praktischen Format gespeichert sind. Sie speichern mehrere Titel, sogar alte gespeicherte Titel von einem Garmin.

Ich möchte all diese Streckendaten in einer Spatialite-Datenbank zusammen mit anderen Tabellen speichern, die Punktbeobachtungsdaten aus derselben Erhebung enthalten.

Mit ogr2ogr kann ich den Track in eine Spatialite-Datenbank konvertieren:

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'

Dabei wird jedoch jede gespeicherte Spur als Linie importiert, wodurch die Zeit- / Ortsinformationen für jeden Spurpunkt verloren gehen!

Kennt jemand clevere Möglichkeiten zum Erstellen einer Tracklog-Datenbank, die diese Informationen speichert?

EDIT :

Tracklogs sind nicht nur eine Linie - sie sind Sammlungen von aufeinanderfolgenden Punkten, die jeweils ein Höhen- und ein Zeitattribut aufweisen. Jeder Punkt gehört zu einem Spursegment, das wiederum zu einer bestimmten Spur gehört, und Punkte innerhalb jedes Spursegments wurden ohne Unterbrechung aufgenommen und können als verknüpft angenommen werden. Beispielsweise:

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

Um ein Tracklog zu speichern, müssen Sie diese Punktesammlung mit den zugehörigen Daten speichern.

Eine Lösung könnte darin bestehen, diese Tracks als Punkte mit zusätzlichen Spalten für Trackname, Segment, Höhe und Zeit zu laden. Ich denke nicht, dass Ogr die Tracks als Punkte konvertieren wird.

Lösung

Dank @scruss der darauf hinwies, gpx2spatialite , die ich installiert (OS X 10.9) mit sudo easy_install gpx2spatialite. Diese Tools sind für das Projekt 'drawinglife' konzipiert (und enthalten daher einige 'Stadt'-Informationen, die für die meisten von uns wahrscheinlich nicht erforderlich sind). Die Hauptseite von gpx2spatialite erklärt nicht viel, aber das Wiki von drawinglife ist besser. Trotzdem viele undokumentierte Funktionen - wie das Entfernen von Duplikaten!

Erstellen Sie eine Spatialite-Datenbank für GPX-Dateien, die Track-Segmente, Tracks, Trackpoints und Waypoints enthält. Es wurden auch "Benutzer" eingerichtet (was seltsam erscheint, da sqlite kein Benutzerzugriffssystem ist, sondern für das Zeichnen gedacht ist), um die verschiedenen Spuren zu kennzeichnen:

gpx2spatialite create_db MyGPXArchive.db

Laden Sie einen ganzen Ordner mit GPX-Dateien, einschließlich aller Unterordner, und überprüfen und entfernen Sie dabei doppelte Dateien:

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

Optionen:

  • -s= überprüfe nicht, ob die Trackpoints in der Stadtdatenbank sind (beschleunigt die Suche um ein Vielfaches)
  • -d MyGPXArchive.db = zu verwendende Datenbank;
  • -u SL25 = füge den Benutzer SL25 hinzu (nur eine Bezeichnung, die ich für die gesammelten Titel verwendet habe);
  • Selous2013 = der Ordner (mit Unterordnern), der die Tracks enthält, die mich interessieren.

Bugs:

  • Wenn Sie Tracks auf einem älteren Garmin gespeichert haben, der Zeitstempelinformationen verwirft, stürzt der Import ab (entfernen Sie diese gespeicherten Tracks mit einem Dienstprogramm wie GPSU). Wenn Sie gpsbabel haben , filtern Sie die Datei zuerst mit etwas wie:

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


Wir verwenden FME safe.com/fme/fme-technology/fme-desktop/features und es speichert alle gewünschten Zuordnungen in einer Oracle-Datenbank
Mapperz

1
@Mapperz - Verfügt FME über eine spezielle Methode zum Speichern von GPX-Dateien? Ich bin wirklich nach einer FOSS-Lösung.
Simbamangu

Antworten:


6

ptrv / gpx2spatialite erledigt dies bemerkenswert gut, indem es Zeitstempel für alle Punkte speichert und Geschwindigkeits- und Längendaten für Tracks ableitet. Es werden auch keine doppelten Tracks importiert, so dass Sie einen großen Stapel für GPX-Dateien einspeisen können und diese entsprechend mingen können.

Update : Verwendungsbeispiele, wie gewünscht:

Neue Datenbank initialisieren:

gpx2spatialite_create_db db.sqlite

Fügen Sie eine einzelne GPX-Datei hinzu:

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

(Wenn der Benutzername user nicht in der Datenbank vorhanden ist, werden Sie gefragt, ob Sie ihn erstellen möchten. Die Datenbank besteht aus Tracks / Wegpunkten / Routen, die einem oder mehreren Benutzern zugewiesen sind.)

Fügen Sie alle gpx-Dateien im Ordner / hinzu :

gpx2spatialite -d db.sqlite -u user folder/

Verbrauch: es ist eine räumliche Datenbank, mit einem Tisch tracklines die Spuren als Polylinien halten, Wegpunkten , die einzelnen Punkte , die (mit der Zeit, Höhe, usw.) und Wegpunkten für alle definierten Wegpunkten. Es gibt auch zahlreiche Indizes, einige Weltstadtdefinitionen und möglicherweise auch eingebettete SLD-Stilinformationen, die ich noch nicht untersucht habe. Als einfaches Beispiel ist hier eine Karte, wie meine Heimatstadt (Toronto) durch ~ 7 Jahre Track-Logs definiert ist:

Toronto GPS-Protokolle

Durch die Verwendung von Linien mit 75% Transparenz werden die am häufigsten befahrenen Routen dunkler.


Aha, hätte nicht gedacht, dass easy_install gpx2spatialitees tatsächlich als Skript installiert wird, das von der Kommandozeile aus erreichbar ist! Die userOption war auch verwirrend, sie wird auf der Hauptseite nicht erklärt, und Spatialite ist ein System ohne Zugangsbeschränkung.
Simbamangu

Die userOption ist sinnvoll für das Drawinglife Projekt, da es mehrere Teilnehmer ermöglicht , ihre Spuren zu derselben Datenbank hinzuzufügen. Vielen Dank für die Hinweise zum Ausschließen des City-Tags und zum Auffinden der Gründe für die Abstürze. Wenn Sie GPX-Dateien ohne Zeitstempel haben, können Sie die Zeitdaten mithilfe der Option faketime von GPSBabel synthetisieren .
Scruss

1
Zu Ihrer Information, die gpx2spatialite-Syntax hat sich geändert. Ein typischer Importbefehl ist jetztgpx2spatialite import -u user -s -d db.spatialite file1.gpx …
scruss

3

Um Ihren Kommentar zu erweitern: "Verfügt FME über eine spezielle Methode zum Speichern von GPX-Dateien?"

Ja, Sie haben die volle Kontrolle über Routen, Wegpunkte, Tracks und Metadaten Bildbeschreibung hier eingeben

FME ist ein sehr wertvolles und leistungsfähiges Werkzeug, um GIS-Daten und nicht räumliche Daten zusammen zu bearbeiten.

Weitere Details finden Sie unter http://evangelism.safe.com/fmeevangelist26/


2

Es gibt einige Ideen hier für Ihr eigenes Programm zu extrahieren GPX - Daten in Python oder Perl zu schaffen. Von hier aus ist es nicht allzu schwierig, die Daten in eine Spatialite-Datenbank zu stellen. Sie müssen über ein geeignetes Schema zum Speichern in Spatialite nachdenken - welche Attribute möchten Sie beibehalten?).


1

Wenn Sie die OGR-Route einschlagen möchten, exportieren Sie am besten zuerst nach Shapefile. Dabei werden mehrere Shapefiles exportiert, die den Unterschied zwischen Wegpunkt / Trackpoint / Weg / Track und den zugehörigen Metadaten darstellen. Anschließend werden die einzelnen Dateisätze in Ihrer SQLite zusammengeführt Datenbank.


-1

Versuchen Sie das Hinzufügen

-lco GPS_USE_EXTENSIONS=YES

zu Ihrem Befehl ogr2ogr


Ich habe dies in einer neuen Tabelle versucht - ohne Auswirkungen auf die resultierenden Felder oder Daten. Was erwarten Sie davon?
Simbamangu

Ich hatte erwartet, die erweiterten Attribute zu bekommen. Wenn Sie Ihre Frage noch einmal durchlesen, gibt es meines Erachtens sowieso keinen anderen Weg, um die einzelnen Wegpunkte zu ermitteln, als den Weg selbst als Punkte zu exportieren.
Micha
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.