Programm zum Durchsuchen mehrerer GPX-Dateien

Kennt jemand ein Programm, mit dem ich meine Sammlung von GPX-Dateien durchsuchen und diejenigen finden kann, die einen Trackpoint aus einem bestimmten Bereich enthalten? Also eine Art grep, dem ich eine Koordinate und einen Radius übergebe und das dann alle GPX-Dateien auflistet, die mindestens einen Trackpoint enthalten, der innerhalb des angegebenen Kreises liegt. (Es muss nicht unbedingt ein Kreis sein, wahrscheinlich sind die Abmessungen eines Rechtecks einfacher zu implementieren.)

Hintergrund ist, dass sich bei mir eine ganze Menge an GPX-Tracks angesammelt haben und ich manchmal herausfinden will, wann ich an einem bestimmten Punkt vorbeigekommen bin. Dann würde ich gern ein solches Programm aufrufen und ihm sagen: Welche GPX-Dateien enthalten Trackpoints, die ca. 30 Meter rund um diese Straßenecke aufgezeichnet wurden?

Ideal wäre ein Programm, das unter Linux läuft. Gern auch nur auf Kommandozeile.

Ist wahrscheinlich nicht schwierig zu programmieren, aber bevor ich mich ans Werk mache, wollte ich nachfragen, ob jemand etwas fertiges in der Art kennt.

Lade dir doch alle Tracks z.B. nach QLandkarte … oder sind das zuviele?

Gruß Klaus

Es sind einige Hundert, die jeweils in separaten Unterverzeichnissen liegen; ich erstelle für jede Wanderung, Radtour usw. ein eigenes Verzeichnis, in das dann die GPX-Dateien, Fotos und evtl. eine Videodatei kommen.

QLandkarte habe ich bisher nicht benutzt. Laut der Beschreibung scheint es ähnlich zu funktionieren wie GpsPrune oder Viking, d.h. dass ich jeweils eine GPX-Datei laden muss. Das ginge zwar im Prinzip, aber weil ich die Dateien gern in ihren Unterverzeichnissen belassen würde, suche ich eine simple Lösung, die automatisch all meine Dateien durchnudelt, ohne dass ich jedes Mal die gewünschten Dateien auswählen muss.

Trotzdem Danke für den Hinweis, ich sehe mir das Programm gelegentlich genauer an.

JOSM kann viele GPX-Spuren gleichzeitig anzeigen.
Du kannst einen ganzen Schwung GPX-Dateien auf einmal laden. Leider kannst du keine Ordner laden, da JOSM nicht weis, wie die darin enthaltenen Dateien zu behandeln sind.

Eventuell kannst du ja eine Liste mit den Pfadnamen erstellen, und die an JOSM übergeben.

Edbert (EvanE)

Hi,

für JOSM gibt es ein “openvisible” plugin. Das geht in die Richtung. Es wird allerdings augenscheinlich die bounding box der Tracks benutzt, so dass man einige Tracks mehr angezeigt bekommt als bei Deinen Bedingungen.

Ich habe auch noch ein Programm rumliegen, dass so ziemlich das gewünschte tut:

bin/find_tracks 51.183388 51.184419 6.933639 6.935424 ~/gps/data/tracks/tours/*.gpx
…/data/tracks/tours/20100427_2_sw_sv-obi.gpx
…/data/tracks/tours/20100507_1_s_gps12_reh.gpx
…/data/tracks/tours/20111226_1_sw_monitor.gpx

Linien, die das Gebiet durchlaufen, reichen auch aus (also ohne dass Punkte im Gebiet liegen) … wenn ich mich recht erinnere. Falls Du das Programm haben willst, kann ich Dir die Quellen schicken (Ada).

frohes Mappen
Wilhelm

Danke, das klingt ziemlich perfekt. Selbst falls ich es nicht direkt verwenden kann, wäre es bestimmt eine nützliche Vorlage. Ich habe dich über das OSM-Nachrichtensystem mit einer Kontaktadresse angemailt.

Die JOSM-Lösungen und andere GUI-Programme, bei denen ich Hunderte von Dateien laden müsste, sind zwar mögliche Wege, scheinen mir aber letztlich zu aufwendig. Ein simples Befehlszeilenprogrämmchen wäre mir am sympathischsten.

Ist unterwegs.

frohes Mappen
Weide

Ich vermute, es ist ein Skript, das in alle GPX-Dateien schaut, ob es eine vorgegebene Koordinate in der Nähe eines Tracks liegt.
Ist es ein freies quelloffenes Programm?
Wenn ja, hättest du Lust, es zu veröffentlichen?

Nein, es ist Ada.

Nein. Es sieht nach, ob ein Segment eines Tracks durch das angegebene “rechteckige” Gebiet führt. Verbindungen zwischen den Segmenten eines Tracks zählen nicht; also etwa Verbindungslinien von “GPS-Empfang verloren” nach “Empfang wieder OK”. Bei Segmenten aus einem Punkt wird die Position des Punktes geprüft.

Ja, GPL.

Eigentlich nicht, aber jeder kanns haben. Man braucht aber einen Ada-Compiler und die Laufzeitumgebung und freie Bibliotheken. Bei Debian Linux ist das einfach, woanders einschließlich Windows etwas Arbeit.

Es war nur eine kleine Fingerübung, um zu sehen wie die eine Art des Gnat XML Interfaces funktioniert. Das sind nur ein paar Zeilen.

frohes Mappen
Wilhelm

Ich hole dieses Thema nach über fünf Jahren mal wieder hoch, weil die eingangs gestellte Frage exakt meinen funktionalen Anforderungen entspricht. Nur bin ich mit meinen Datensammlungen (über 15 Jahre Motorrad und Wandern) auf Windows und nicht auf Linux unterwegs.
Hat sich die Welt der handlichen Werkzeuge inzwischen schon weiter entwickelt? Kann ich meine kläglichen Versuche in C vielleicht einstellen und auf bewährtes zurückgreifen? Ich freue mich über jede Unterstützung.

Schau dir mal RouteConverter an.

Vielen Dank,
mit diesem Programm kann ich prima gpx Dateien visualisieren.
Aber ich habe leider keinen Weg gefunden damit einige tausend Dateien am Stück danach zu durchsuchen, ob ein darin gespeicherter Track oder Wegpunkt im Umkreis einer vorgegebenen Koordinate (oder in einer vorgegebenen Box) liegt.

Im Prinzip benötigst du eine Datenbank oder Anwendung, welche die “geospatiale Suche” unterstützt. MongoDB kann so etwas zum Beispiel. Vermutlich geht das aber einfacher. Warten wir mal auf weiteres Feedback.

Das Programm gibt es noch. Der Quelltext ist betriebssystemneutral. Ich hab es gerade mal unter Windows kompiliert und ausprobiert. Ich kann Dir den Quelltext, das Win-Exe und das Linux-Binary schicken. Wenn Du mir per OSM eine PM schickst kann ich (hoffentlich immer noch) per Mail mit Attachments antworten.

Da das Ding nur Text-IO macht, braucht man aber ein … wie hieß das in Windows … äh … “Dos-Fenster”.

Das sieht dann im Prinzip so aus:

Eingabe: find_tracks 51.7 51.8 7.3 7.4 *.gpx
Ausgabe:
dideldum.gpx
humtata.gpx
humtata2.gpx

Die Quellen verändern und ein neues Exe machen kann man mit der kostenlosen Ada-Entwicklungsumgebung von Adacore. Die gibts bei https://www.adacore.com/community

Auch wenn es für Hunderte oder gar Tausende Tracks wohl nicht einsetzbar ist, möchte ich noch auf QMapShack hinweisen. Dort kann man eine Bbox aufziehen und alle Tracks selektieren, welche die Box schneiden.

Danke für die weitere Empfehlung.
Ich habe hier tatsächlich hunderte bis tausende GPX-Dateien mit Aufzeichnungen meiner Touren und kann diese trotz einigermaßen sprechender Namen von Dateien, Tracks und Wegpunkten oft nur mühsam nach bestimmten Positionen durchsuchen. Das Laden in eine Karte ist bei der Menge der infrage kommenden Dateien immer sehr mühselig, so dass ich eine Vorsortierung vornehmen möchte. Das Suchen bestimmter Wörter in den GPX ist dafür ein passabler Weg, aber sowohl in Osteuropa als besonders in Asien aufgrund unbestimmter Transkription/Schreibweisen sehr fehleranfällig.
So kam der Bedarf auf nach bestimmten Positionen suchen zu können.

Das GDAL-Werkzeug ogrinfo kann mit GPX-Dateien umgehen und mit der SQLite-Syntax für die SQL-Befehle kann man geographische Filter bauen.

Zum Beispiel

ogrinfo -sql "SELECT name from tracks where Distance(Geometry, MakePoint(9.44, 54.71), 1)<1000" -dialect SQLITE MeineDatei.gpx

gibt die Tracks aus der GPX-Datei zurück, die innerhalb vom 1000m von 9.44E 54.71N liegen. Man kann auch “tracks” durch “routes” oder “waypoints” ersetzen, je nachdem was man durchsuchen will.

Es ist aber keine fertige Lösung für das Problem, weil man damit immer nur eine Datei durchsucht. Um ganze Verzeichnisse durchzusuchen, müsste man es irgendwie in einem Skript verpacken…

Das Thema ist zwar erledigt … in einem anderen Kontext habe ich jetzt ein ähnlich gelagertes CLI-Programm erstellt. Ermittelt werden kürzester und längster Abstand der gpx-Punkte zu einem vorgegebenen Punkt.