Fotos mit Geotags versehen

Geotags in Piwigo

Ich habe mich schon das eine oder andere Mal versucht zu erinnern, wo ich just das Foto X eigentlich geschossen habe. Gerade wenn ich im Urlaub – wie jetzt 😉 – fotografiere, möchte ich hinterher doch gern noch einmal wissen, wo das eigentlich war. Mit ein paar Open Source Tools habe ich mir Skripte gebaut, die mir nun dabei helfen.

Digitale Fotos im JPEG- oder TIFF-Format enthalten einen Bereich zum Abspeichern von Metadaten im Exif-Format [1]. Hier speichern Kameras und auch Smartphones Daten wie zum Beispiel die exakte Zeit der Aufnahme, die Blende, die Belichtungszeit oder auch den Namen des Objektivs ab. Bildbetrachtungsprogramme werten diese Meta-Daten aus und zeigen sie an, wenn das Foto geöffnet wird. Und genau in diesen Metadaten gibt es auch optionale Datenfelder fĂŒr Geo-Koordinaten, die Geotags. Erweiterungen fĂŒr digiKam oder Piwigo zeigen mit deren Hilfe auf Karten an, wo das Bild aufgenommen wurde.

Einfachstes Geotagging mit GPX-Dateien

Das Geotagging ist sehr einfach, wenn man folgende Zutaten zur Hand hat:

  • Die exakte Uhrzeit, zu der das Bild aufgenommen wurde
  • Einen GPX-Track, also die Aufzeichnung eines GPS-GerĂ€tes ĂŒber den zu einer gewissen Zeit zurĂŒckgelegten Weg
  • Einen Exif-Editor

Als passionierter Geocacher habe ich sehr oft mein GPS-GerĂ€t beim Wandern dabei. Darin wird die Uhrzeit mit einer GPS-Position verknĂŒpft und meine Kamera verknĂŒpft dieselbe Uhrzeit mit dem aufgenommenen Foto. Ein Standardwerkzeug zum Bearbeiten von Exif-Informationen ist das ExifTool. Dieses gibt es eigentlich in allen Linux-Derivaten. Windows- und Mac-Benutzer können sich unter UmstĂ€nden unter [2] helfen lassen. Der folgende Befehl …

exiftool -geotag ‚<GPX-Ordner>/*.gpx‘ *.jpeg

… verbindet nun die GPS-Positionen aus einer ganzen Menge von GPX-Dateien mit allen auf .jpeg-endenden Bildern im aktuellen Ordner. 

Das Programm berichtet beim Durchlauf, in wie viele Bilder ein Geotag eingefĂŒgt werden konnte. Es gibt hier nicht viel, was schief gehen kann. Wenn aber der letzte GPX-Fix (also die letzte genaue Position, die das GPS gemeldet hat) zu lange her gewesen sein sollte, so wird das exiftool diesen ignorieren. Dann kann/muss man sich mit Parametern wie -geosync weiterhelfen – im Manual kann man das nachlesen.

Du brauchst Orte und keine Koordinaten?

Die Koordinaten sind fĂŒr Bildbetrachtungsprogramme schön und gut, doch möchte man vielleicht alle Bilder aus der Stadt Delft in den Ordner ‚Delft‘ sortieren. DafĂŒr muss das Bild mit dem Ort ‚Delft‘ verknĂŒpft werden. Hier hilft OpenStreetMap (OSM) weiter, genauer gesagt dessen Suchmaschine Nominatim [3]. WĂ€hrend Google seine Daten nur gegen komplexe RegistrierungsvorgĂ€nge herausrĂŒckt, ist OSM als Open Data Projekt hier deutlich freundlicher zu bedienen.

Das Vorgehen ist eigentlich sehr einfach. ZunÀchst benötigt man die GPS-Daten. Diese liefert mir mein mit einem Geotag versehenes Bild. Weil ich es spÀter so benötigen werde, lasse ich mir die Ausgabe gleich formatieren:

exiftool -n -p ‚lat=$GPSLatitude&lon=$GPSLongitude‘ bild.jpeg

Die Ausgabe dieses Befehls nenne ich der Einfachheit halber $GPS und benutze sie wie folgt in einer JSON-Abfrage an Nominatim:

curl -s „http://nominatim.openstreetmap.org/reverse?\
format=json&$PGS&addressdetails=1&limit=1“

Ausgabe von Nominatim fĂŒr Koordinaten aus Delft

Die Ausgabe des Befehls kann ĂŒber ‚| python -m json.tool‚ so formatiert werden, dass sie wie oben im Bild aussieht. Die Pipe ‚| jq ‚.address.city‘ | sed -es/“^\“\(.*\)\“$“/“\1″/‚ extrahiert daraus dann den Namen der Stadt. Unter [4] habe ich ein Skript dafĂŒr hinterlegt.

Kein GPS? Big Brother hilft …

Das ich Big Brother mal als hilfreich betitel, hĂ€tte ich auch nie gedacht ;-). Hier ist er es aber. Android-Telefone haben die Angewohnheit, ihre Position stĂ€ndig zu Google zu berichten. Wenn kein GPS-Signal empfangen wird, dann nutzen sie dafĂŒr die umstehenden Mobilfunkmasten. Diese Information ist ungenau, aber meist noch immer besser als gar keine Information zu haben. Unter [5] kann man sich seinen persönlichen Standortverlauf herunterladen. Dazu muss das DropDown von JSON auf KML umgestellt und auf ‚weiter‘ geklickt werden. Nach kurzer Zeit kann man sich dann ein ZIP herunterladen, in dem sich eine Datei namens ‚Standortverlauf.kml‘ befindet.

Diese Datei bringt jedoch zwei Probleme mit sich:

  • Sie ist sehr groß, weil sie die gespeicherten Positionen mehrere Jahre enthĂ€lt
  • Sie ist ungenau, weil einige WLANs falsche GPS-Koordinaten angeben

Hier helfe ich mir mit dem Tool GPSBabel [6], mit dem man GPS-Tracks editieren kann. Das Tool kennt den Parameter -x, der Filter anwendet. Ich rufe folgenden Befehl auf:

gpsbabel -i kml -f standortverlauf.kml \ 
-x track,start=$DATE,stop=$DATE1 \
-x transform,wpt=trk,del \
-x radius,distance=1oK,lat=$LAT,lon=$LON,nosort \ 
-x transform,trk=wpt,del \
-o gpx -F output.gpx

In der ersten Zeile wird die Standortverlauf-Datei im KML-Format ĂŒbergeben. In der letzten Zeile wird die Ausgabe im GPX-Format erstellt. Die Zeilen dazwischen sind Filter:

  • track: extrahiert nur die Wegpunkte zwischen den beiden angegebenen Daten im Format YYYYMMDD
  • transform: generiert Wegpunkte aus dem Track, weil der folgende Filter nur auf Wegpunkte wirkt
  • radius: entfernt alle Wegpunkte jenseits eines 10km-Radius um die angegebenen GPS-Koordinaten
  • transform: macht aus den Wegpunkten wieder einen Track

Ein Skript fĂŒr diesen Aufruf habe ich unter [7] hinterlegt.

 

[1] https://de.wikipedia.org/wiki/Exchangeable_Image_File_Format
[2] https://sno.phy.queensu.ca/~phil/exiftool/install.html
[3] https://nominatim.openstreetmap.org/
[4] Skript: reverse-gpx.sh
[5] https://takeout.google.com/settings/takeout/custom/location_history?hl=de&gl=DE&expflags
[6] https://www.gpsbabel.org/
[7] Skript: create-gpx.sh

Keine Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darĂŒber, wie deine Kommentardaten verarbeitet werden.