Hier wird ein Verfahren beschrieben, mit dem man unter Linux eine Sammlung geocodierter Fotos mit QGis auf einer Karte darstellen kann. Die Fotos können in beliebig geschachtelten Unterverzeichnissen liegen. Ausgewertet werden die EXIF-Tags GPSLongitude und GPSLatitude. In einem ersten Schritt werden die Fotos analysiert und eine SQLite/SpatiaLite-Datenbank erstellt. Im zweiten Schritt wird diese Datei in einen QGis-Layer geladen und der Layer so konfiguriert, dass beim Überfahren der Position eines Fotos mit der Maus das Foto angezeigt wird.
Die Anleitung wurde mit QGIS 3.4 unter Linux Debian getestet.
Schritt 1: Erstellen einer SpatiaLite-Datenbank
In diesem Schritt wird das integrierte Werkzeug zum Import geogetaggter Fotos verwendet:
- QGIS ab Version 3.4
- Plugin Processing muss installiert sein (Stand 2024: nicht mehr nötig, da in QGIS integriert)
- Über den Menüpunkt Verarbeitung-Werkzeugkiste wird die Seitenleiste Verarbeitungswerkzeuge geöffnet.
- Unter Vektorerzeugung wählt man das Werkzeug Geogetaggte Fotos Importieren aus
- Im Dialog gibt man den Pfad an, in dem sich die Fotos befinden. Das Ergebnis speichert man in einer Spatialite-Datenbank.
Wurde in Schritt 1 die Option Öffne Ausgabedatei nach erfolgreicher Ausführung gewählt, werden die importierten Daten in einem neuen Layer angezeigt. Sinnvollerweise wird noch ein Kartenlayer angelegt. Im Beispiel wird dafür mit der Erweiterung QuickMapServices Rasterkarte von openstreetmap.org verwendet. Dabei ist darauf zu achten, dass die Projektion des Projekts auf EPSG:3857 gesetzt wird.
Schritt 2: Anzeigen der Fotos
Nach dem Import werden die Positionen der Fotos als Punkte auf der Karte angezeigt. Wird in der Werkzeugleiste das Sprechblasensymbol (Kartenhinweise) aktiv gesetzt und streicht man mit der Maus über einen dieser Punkte, wird die beim Import vergebene Id des Fotos angezeigt.Der Layer wird jetzt so konfiguriert, dass beim Überstreichen mit der Maus nicht die Id sondern ein Popup mit dem verkleinerten Foto angezeigt wird. Hierzu öffnet man den Eigenschaftsdialog des Layers und geht in das Tab Anzeigen und trägt dort einen Ausdruck ein, der den HTML-Code für die Anzeige des Fotos erzeugt:
[% concat('<img src="file://',"photo", '" width=300>') %]
Öffnen des Fotos in einer Anwendung
Diese Funktion wird im Tab Aktionen des Eigenschaftendialog des Layers eingerichtet. Hierzu drückt man auf Voreingestellte Aktion hinzufügen, löscht alle Aktionen außer Datei öffnen und trägt dort als Aktion "[% “photo” %]" ein.
Damit die Aktion beim Klicken auf die Position eines Fotos ausgeführt wird, muss diese in der Werkzeugleiste aktiviert werden:
Ein Klick auf die Position eines Fotos ruft jetzt die Standardanwendung für JPG-Dateien aus.
Alternative Lösung
Mit der QGis-Erweiterung ImportPhotos können ebenfalls geocodierte Fotos auf einer Karte angezeigt werden. Die Erweiterung hat neben Vorteilen gegenüber der beschriebenen Methode leider auch einige gravierende Nachteile (Stand 07/2024). Insbesondere ist es nicht möglich, Unterverzeichnisse zu berücksichtigen, d.h. alle Fotos müssen in einem Verzeichnis liegen.