Fotosammlung nach GPS-Daten auswerten, nach Aufnahmeort gruppieren und nach Jahr filtern – auch auf Netzlaufwerken.
Autor: Bernhard Lickert, entwickelt mit Claude (Anthropic)
Copyright © 2026 Bernhard Lickert
Version 1.2 bringt den neuen Namen, ein eigenes Programmsymbol und zwei Aenderungen, die vor allem auf einem neu eingerichteten Rechner wichtig sind.
| Neu | Was sich aendert |
|---|---|
| Neuer Name: GeoLocation BL | Das Programm hiess bis Version 1.1 Foto-GeoLocation. Umbenannt
wurden auch alle Dateien: GeoLocation-BL.exe,
geolocation_bl.py, geoloc_core.py,
geoloc_orte.py, start_GeoLocation-BL.bat,
build_GeoLocation-BL.bat, GeoLocation-BL.spec.
Vorhandene Daten gehen dabei nicht verloren (siehe unten). |
| Eigenes Programmsymbol | Weltkugel mit rotem Stecknadel-Faehnchen – als Fenster- und
Taskleistensymbol, als Symbol der EXE und als Datei
GeoLocation-BL.ico fuer eigene Verknuepfungen. Das Symbol ist
zusaetzlich fest im Programm eingebettet, damit es auch dann erscheint,
wenn die EXE allein weitergegeben wird. |
| Daten liegen jetzt neben dem Programm | Index, Ortsdatenbank und Vorschaubilder liegen im Unterordner
Daten neben der EXE, sofern dieser Ordner beschreibbar ist.
Damit zieht beim Kopieren des Programmordners alles mit – auf einem
neuen PC ist kein erneuter Download der Ortsdatenbank noetig. Liegt das
Programm in einem geschuetzten Ordner (z. B. C:\Programme),
weicht es auf das Benutzerprofil aus. Siehe
Wo liegen die Daten? |
| Hinweis, wenn die Ortsdatenbank fehlt | Frueher fiel das Programm stillschweigend auf die eingebaute Notfallliste (wenige hundert Orte) zurueck – man bekam grobe oder falsche Ortsnamen, ohne es zu merken. Jetzt fragt das Programm beim Start einmal nach, ob die Ortsdatenbank geholt werden soll, warnt vor dem Einlesen und zeigt die fehlende Datenbank rot in der Statuszeile an. |
Version 1.1 war eine Fehlerbehebung nach den ersten Praxistests von Version 1.0.
| Behoben | Was war los |
|---|---|
| Absturz beim Anklicken eines Ortes | Beim Wiederherstellen der Auswahl nach dem Neuaufbau des Ortsbaums loeste das Programm erneut sein eigenes Auswahlsignal aus und rief sich dadurch endlos selbst auf. Ergebnis: Absturz ohne Meldung. Behoben durch korrekte Reihenfolge der Signalsperre und einen zusaetzlichen Rekursionsschutz; ein Regressionstest verhindert den Wiedereinbau. |
| Dunkelmodus unlesbar | Menueleiste, Menues, Spaltenkoepfe, Kurzhinweise und Bildlaufleisten behielten die hellen Windows-Farben, waehrend die Schrift hell war – also weiss auf weiss. Behoben: Das Programm setzt jetzt den Fusion-Stil und eine vollstaendige Qt-Farbpalette, nicht nur einzelne Stylesheet-Regeln. |
| Abstuerze blieben unsichtbar | PyQt beendet den Prozess, sobald in einer Signalbehandlung ein unbehandelter Fehler auftritt – bei der EXE ohne jede Meldung. Jetzt wird jeder Fehler protokolliert, angezeigt, und das Programm laeuft weiter (siehe Fehlerbericht). |
| Anzeige gegen Datenfehler gehaertet | Bilderliste, Ortsbaum und Einzelheiten fangen Fehler einzeln ab. Sonderzeichen in Datei- und Ortsnamen werden korrekt dargestellt. |
GeoLocation-BL.exe.
Es gibt zwei Wege, das Programm zu starten. Sie tun dasselbe, unterscheiden sich aber deutlich in Voraussetzungen und Bequemlichkeit:
| Fassung | Start | Voraussetzung | Wofuer gedacht |
|---|---|---|---|
| EXE-Fassung (empfohlen) |
dist\GeoLocation-BL.exeper Doppelklick |
keine – Python und alle Pakete stecken in der EXE | taeglicher Gebrauch; laesst sich auf jeden Windows-Rechner kopieren, auch auf einen USB-Stick |
| Python-Fassung | start_GeoLocation-BL.bat |
installiertes Python 3.10+ mit PyQt6 und Pillow | Entwicklung, Fehlersuche, Anpassungen am Quelltext |
dist mit EXE und
Handbuch.html laesst sich vollstaendig kopieren.Erzeugt wird die EXE einmalig mit build_GeoLocation-BL.bat
(siehe Abschnitt 10). Danach wird sie nur noch benutzt.
Beim ersten Start warnt Windows ("SmartScreen") moeglicherweise vor einer unbekannten Anwendung, weil die EXE nicht digital signiert ist. „Weitere Informationen“ → „Trotzdem ausfuehren“.
Ein Foto enthaelt nur Koordinaten (z. B. 47.9990 / 7.8421), keinen Ortsnamen. Den Namen ermittelt das Programm auf zwei Wegen:
Eine Ortsliste von GeoNames
wird einmalig heruntergeladen und in eine lokale Datei orte.sqlite
umgewandelt. Danach laeuft die Zuordnung ohne Internet und sehr schnell
(mehr als 20.000 Zuordnungen pro Sekunde). Drei Umfaenge stehen zur Wahl:
| Variante | Orte | Download | Geeignet fuer |
|---|---|---|---|
| cities1000 | ca. 150.000 | ca. 11 MB | genaueste Zuordnung, auch kleine Doerfer |
| cities5000 (empfohlen) | ca. 55.000 | ca. 5 MB | guter Mittelweg |
| cities15000 | ca. 26.000 | ca. 3 MB | nur groessere Staedte |
Zugeordnet wird immer der naechstgelegene Ort. Liegt er weiter als 30 km entfernt (z. B. Aufnahme auf hoher See oder im Gebirge), steht die Entfernung in Klammern dabei: Zermatt (58 km entfernt).
Extras → Ortsnamen online nachschlagen fragt fuer die aktuell angezeigte Auswahl den Dienst Nominatim (OpenStreetMap) ab und liefert die tatsaechliche Adresse statt der naechsten Stadt – also z. B. den Ortsteil.
| Schaltflaeche | Wirkung |
|---|---|
| Ordner hinzufuegen | Lokalen Ordner waehlen und einlesen (samt Unterordnern) |
| Netzwerkordner | UNC-Pfad oder Laufwerksbuchstaben eingeben,
z. B. \\NAS\Fotos |
| Neu einlesen | Alle hinterlegten Ordner erneut durchsuchen. Unveraenderte Dateien werden uebersprungen – der zweite Durchlauf ist daher sehr viel schneller als der erste. |
| Abbrechen | Laufenden Durchlauf beenden. Das bereits Eingelesene bleibt erhalten. |
| Suchfeld | Filtert nach Dateiname, Ordner oder Ortsname |
| Hell / Dunkel | Farbschema umschalten (wird gemerkt) |
| Handbuch | Oeffnet diese Datei |
Jahres- und Ortsfilter wirken zusammen: Jahr 2024 und Ort Rom zeigt nur die Rom-Fotos aus 2024. Der Ortsbaum passt seine Anzahlen an den gewaehlten Jahresfilter an.
Zum gewaehlten Foto: Ort, Region, Land, Koordinaten, Hoehe, Aufnahmedatum (mit Quelle: EXIF, Dateiname oder Dateidatum), Kamera, Bild- und Dateigroesse sowie der vollstaendige Pfad. Ueber die Schaltflaechen lassen sich der enthaltende Ordner im Explorer und der Aufnahmeort in OpenStreetMap oeffnen.
Netzlaufwerke werden auf zwei Arten unterstuetzt:
\\NAS\Fotos\Urlaub (UNC-Pfad, empfohlen) Z:\Bilder (verbundenes Netzlaufwerk)
Beide Schreibweisen funktionieren mit Netzwerkordner in der Werkzeugleiste. Ist der Pfad nicht erreichbar, meldet das Programm dies sofort, statt in einen langen Wartezustand zu laufen.
Im Reiter Karte erscheint jeder Aufnahmeort als Kreis; seine Groesse richtet sich nach der Anzahl der Fotos. Ein Klick auf einen Kreis springt zurueck zur Bilderansicht und filtert auf diesen Ort. Der Jahresfilter wirkt auch auf die Karte.
PyQt6-WebEngine
voraus. Fehlt es, bleibt der Reiter leer – die Schaltflaeche
Karte im Browser oeffnen funktioniert aber immer und zeigt dieselbe
Karte im Standardbrowser.Alle vom Programm erzeugten Dateien liegen ausserhalb Ihrer Fotosammlung. Seit Version 1.2 neben dem Programm:
<Ordner der EXE>\Daten\ index.sqlite Index der Fotos (Pfade, Koordinaten, Orte, Datum) orte.sqlite heruntergeladene Ortsdatenbank vorschau\ zwischengespeicherte Vorschaubilder
Der Vorteil: Kopieren Sie den Programmordner auf einen anderen Rechner oder einen USB-Stick, ziehen Index und Ortsdatenbank mit. Auf dem neuen Rechner muss nichts erneut heruntergeladen und nichts neu eingelesen werden.
Ist der Programmordner nicht beschreibbar – etwa bei einer Installation
unter C:\Programme –, legt das Programm die Daten
stattdessen hier ab:
%LOCALAPPDATA%\GeoLocation-BL\
Das entspricht in der Regel
C:\Users\<Name>\AppData\Local\GeoLocation-BL. Welcher Ordner
gerade benutzt wird, steht im Fenster Hilfe → Ueber.
Beim ersten Start sucht das Programm nach Daten der Vorgaengerversion
(%LOCALAPPDATA%\Foto-GeoLocation) und verschiebt sie in den neuen
Datenordner. Der Index und die heruntergeladene Ortsdatenbank bleiben also
erhalten; ein Vermerk uebernommen_aus.txt haelt fest, woher die
Daten stammen. Enthaelt der neue Ordner bereits Daten, wird nichts angetastet.
Eine leere Datei namens portabel.txt neben der EXE erzwingt den
Ordner Daten auch dann, wenn ein Schreibversuch scheitert.
| Formate | Stand |
|---|---|
| JPG / JPEG | vollstaendig, auch GPS und Aufnahmedatum |
| PNG, TIFF, WEBP | gelesen; GPS nur, sofern die Datei EXIF enthaelt |
| HEIC / HEIF (iPhone) | nur mit dem Zusatzpaket pillow-heif
(py -m pip install pillow-heif). Fehlt es, erscheinen die
Dateien mit einem Hinweis in der Fehlerliste. |
| RAW (CR2, NEF, ARW, ORF, RW2, DNG) | eingeschraenkt – ohne Zusatzpaket meist nicht auswertbar |
| Videos (MP4, MOV) | in Version 1.0 nicht ausgewertet |
Fehlt in einem Bild das Aufnahmedatum, versucht das Programm zuerst, es aus
dem Dateinamen zu lesen (Muster wie IMG_20230715_... oder
2023-07-15...), und nimmt sonst das Dateidatum. Welche Quelle benutzt
wurde, steht in den Einzelheiten rechts.
| Beobachtung | Ursache und Abhilfe |
|---|---|
| Fast alle Fotos landen unter „Ohne GPS-Daten“ | Die Kamera hat keine Koordinaten gespeichert. Bei Smartphones muss die Standortermittlung fuer die Kamera-App aktiviert sein. Aeltere Digitalkameras haben in aller Regel kein GPS. Auch bearbeitete Bilder verlieren oft die GPS-Daten, ebenso Fotos aus Messengern (WhatsApp entfernt sie). |
| Ortsnamen sind ungenau | Es ist noch die Notfallliste aktiv oder eine kleine GeoNames-Variante. Groesseren Umfang laden (cities1000) und Orte neu zuordnen, oder einzelne Orte online nachschlagen. |
| Reiter „Karte“ bleibt leer | Kein PyQt6-WebEngine installiert oder kein Internet.
Karte im Browser oeffnen benutzen. |
| Netzwerkordner wird nicht angenommen | Erst im Explorer oeffnen und anmelden, dann erneut versuchen. Bei UNC-Pfaden beide Backslashes am Anfang schreiben. |
| Vorschaubilder erscheinen nur langsam | Normal beim ersten Anzeigen, besonders ueber Netz. Sie werden gespeichert und sind beim naechsten Mal sofort da. |
| Programm startet gar nicht (Python-Fassung) | Auf der Eingabeaufforderung py geolocation_bl.py --selftest
ausfuehren. Der Selbsttest baut die Oberflaeche einmal auf, schaltet beide
Farbthemen durch, waehlt einen Ort aus und meldet jeden Fehler mit
Zeilennummer. |
| Programm verhaelt sich unerwartet | Hilfe → Fehlerbericht anzeigen – siehe unten. |
Tritt im Programm ein Fehler auf, erscheint seit Version 1.1 ein Hinweisfenster mit der vollstaendigen Meldung, und das Programm laeuft weiter. Zusaetzlich wird alles gespeichert:
<Datenordner>\Fehlerbericht.txt (Fehler mit Zeilennummern) <Datenordner>\Absturzbericht.txt (harte Abstuerze, z. B. in Qt)
Der Datenordner ist in der Regel Daten neben der EXE, sonst
%LOCALAPPDATA%\GeoLocation-BL – der genaue Pfad steht unter
Hilfe → Ueber.
Beide Dateien lassen sich ueber Hilfe → Fehlerbericht anzeigen oeffnen. Wenn etwas nicht funktioniert, ist dieser Text die entscheidende Information – besonders bei der EXE-Fassung, die kein Konsolenfenster hat.
build_GeoLocation-BL.bat per Doppelklick starten.PyQt6-WebEngine beantworten:
j = eingebettete Karte, EXE etwa 130 MB groesser;
n = schlanke EXE, Karte oeffnet sich im Browser.dist\GeoLocation-BL.exe samt
Handbuch.html. Den Ordner dist an den gewuenschten
Platz kopieren und eine Verknuepfung anlegen.Der Bauvorgang ruft py -m PyInstaller auf – nicht
pyinstaller, weil dessen Scripts-Ordner unter dem Python Install
Manager nicht im PATH liegt.
| Datei | Inhalt |
|---|---|
geolocation_bl.py | Bedienoberflaeche (PyQt6) |
geoloc_core.py | gesamte Fachlogik: EXIF, Geocoding, Datenbank, Ordnerdurchlauf – ohne jede GUI-Abhaengigkeit |
geoloc_orte.py | eingebaute Notfall-Ortsliste, deutsche Laendernamen |
test_geoloc.py | automatisierte Tests der Fachlogik
(py test_geoloc.py) – 43 Tests |
PORTIERUNG.md | Notizen fuer eine spaetere Android-Fassung |
Die Ortsliste wird in ein Gitter aus 1-Grad-Zellen einsortiert. Zu einer Koordinate wird zunaechst die eigene Zelle durchsucht, dann ringfoermig nach aussen, bis kein naeherer Ort mehr moeglich ist. Die Entfernung wird nach der Haversine-Formel auf der Kugel berechnet. Das Verfahren kommt ohne Zusatzpakete aus und liefert nachweislich dasselbe Ergebnis wie ein vollstaendiger Vergleich mit allen Orten – nur um den Faktor 1.700 schneller.
Datenquellen:
Hinweis zum Datenschutz: GPS-Daten aus Fotos sind personenbezogene Daten. Das Programm sendet Koordinaten nur dann ins Internet, wenn Sie die Online-Abfrage ausdruecklich starten oder die Karte oeffnen. Der Index bleibt auf Ihrem Rechner.