Meine Projekte: Geolog

„Wo waren Sie am Freitag, dem 5. Juli 2013 um 14:20 Uhr und 58 Sekunden?“

Man kennt die Frage aus so ungefähr jedem Krimi. Und wundert sich, wie man soetwas denn wissen soll. Immerhin weiß ich ja jetzt schon nicht mehr, was ich gestern zum Abendessen hatte… (Nach etwas Nachdenken: Currymilchreishähnchen. Sehr lecker.)

Aber ich weiß, wo ich es nachgucken kann. An dem genannten Zeitpunkt war ich genau hier:

Der Screenshot ist aus meinem Tool Geolog, von dem ich euch mal ein bisschen erzählen möchte.

Eines vorweg, damit ich es nicht vergesse: Immer, wenn auf einem Screenshot im Hintergrund eine Karte zu sehen ist, dann sind das Daten aus der OpenStreetMap. © OpenStreetMap-Mitwirkende, Basiskarte und Daten von OpenStreetMap und OpenStreetMap Foundation.

Angefangen habe ich damit im März 2012. Ich habe irgendeinen Blogartikel von jemandem gelesen, der davon berichtet hat, alle seine Bewegungen zu tracken und auf einer Karte anzuzeigen und so. Natürlich finde ich den jetzt nicht mehr, sonst würde ich den ja gerne hier verlinken…

Anyway, ich fand die Idee damals spannend (und das tue ich auch heute noch) und wollte mir soetwas auch basteln.

Ein paar hektische Tastendrücke und Tadaaaaa:

Das ist quasi die Standardansicht von Geolog. Alle Tracks, die ich jemals aufgezeichnet habe, sind grau; die der letzten Woche sind schwarz. Ich habe mich nur im Dorf zu Hause, zur Arbeit oder zu unserem neuen Haus bewegt.

Der gesamte Datensatz ist größer. In der Datenbank befinden sich aktuell 7.857.911 Einträge. Quasi die Koordinaten jedes Punktes, an dem ich war, mit einer zeitlichen Auflösung von einer Sekunde. (Allerdings nur, wenn ich auch unterwegs war. Wenn ich „stationär“ bin, also in einem Gebäude oder so, dann läuft das Tracking nicht.)

Es gibt auch noch andere Ansichten – das hier ist die „Heatmap“, die die Punkte nach Alter einfärbt. (Wobei ich hier gerade etwas skeptisch bin, ob die Ansicht da derzeit korrekt ist – rechts am Rand zweite Track von oben macht irgendwie keinen Sinn für mich…)

Die Karten werden dabei in Echtzeit erzeugt – ich habe so ein Google Maps-ähnliches Dingen, in dem ich frei herumscrollen und -zoomen kann und kann mir so auch beliebige Teile der Karte in beliebiger Größe anschauen:

Der Trip nach England 2013. Der erste Urlaub mit Uli. Dabei waren wir u.a. in Winchester und sind eine total schöne Runde durch die Stadt gelaufen…

Wo wir schonmal beim Thema „Urlaub“ sind: Das hier sind unsere beiden Kreuzfahrten 2013 und 2016:

Leider mit vielen, vielen Lücken. Bei der ersten Kreuzfahrt hatten wir eine Innenkabine, wo an ein Tracking per GPS überhaupt nicht zu denken war. (Von da sind nur die Spuren in Monaco, bei La Spezia und bei Rom übriggeblieben.) Und bei der anderen Kreuzfahrt hatten wir eine Balkonkabine und ich konnte den dedizierten GPS-Empfänger einfach draußen liegenlassen, allerdings haben die Batterien dabei nie lange genug gehalten und zudem hat er den Track vom Hinflug teilweise überschrieben…)

Wie ich an die Daten komme? Anfangs habe ich auf meinem iPhone den Dienst „Geoloqi“ benutzt. Der war damals kostenlos und ich konnte der App sagen, dass sie regelmäßig die Position dahin melden sollte. Das klappte auch ganz gut, vor allem konnte die App erkennen, wenn ich mich „ordentlich“ bewegt habe und dann in den „jede Sekunde ein Update“-Modus wechseln. (Und meistens später dann auch wieder zurück in den Stromsparmodus.) Auf meinem Heimserver lief ein Dienst, der dann regelmäßig die Daten über die API abgerufen und dann auf dem Geoloqi-Server gelöscht hat.

Das war aber nicht die optimale Lösung, weil ich dabei einerseits meine Position regelmäßig an einen fremden Server geschickt habe. Und andererseits hat Geoloqi diesen Dienst irgendwann stillschweigend eingestellt oder beschränkt oder so, was mir erst auffiel, als ich irgendwas nachschauen wollte und merken musste, dass ich da seit 3 Monaten keine Tracks mehr produziere…

Seitdem nutze ich eine explizite GPS-Logger-App auf meinem Android-Smartphone. Anfangs mit einem Dienst, der einen bestimmten Ordner auf meinem Smartphone regelmäßig mit meiner ownCloud-Instanz synchronisiert hat, von wo dann ein Cronjob die Daten abgeholt und an Geolog geschickt hat. Das habe ich inzwischen geändert, sodass ein Tasker-Task die Daten jetzt automatisch direkt an Geolog schickt. Zwar muss ich den GPS-Logger immer explizit starten und beenden, wenn ich mich bewege – aber zumindest im Auto konnte ich einrichten, dass Tasker darauf reagiert, wenn sich das Handy mit dem Bluetooth-Empfänger im Auto verbindet und dann automatisch das Tracking startet. Und es dann auch wieder beendet, wenn die Verbindung wieder verlorengeht…

Klar wäre dieses ganze Projekt so nicht möglich, wenn nicht das Handy, das ich mit an Sicherheit grenzender Wahrscheinlichkeit in meiner Tasche mit mir herumschleppe, in der Lage wäre, seine Position per GPS zu bestimmen. Und per Glonass, Beidu und Galileo auch noch.

Dennoch könnten die Daten gerne eine bessere Qualität haben. In der Handyhalterung im Auto mit halbwegs freier Sicht zum Himmel ist die Genauigkeit schon ziemlich gut, aber im Zug – auch wenn ich das Handy ans Fenster halte – nicht so:

Und auch in den (gar nicht mal sooo imposanten) Häuserschluchten in der Dortmunder Innenstadt sehen die Daten gar nicht mehr soo gut aus:

Aber ich bin da mal recht gelassen. Die Technik entwickelt sich immer weiter und auch so kommen schon interessante und nützliche Ergebnisse dabei raus.

Auf jeden Fall hat sich Geolog als ein sehr nützliches Werkzeug zum Üben von Datenbankoptimierungen erwiesen. In „Echtzeit“ die wichtigen Einträge aus 8 Millionen Datensätzen herausfiltern und daraus Grafiken berechnen ist schon nicht einfach. Speziell, wenn man nicht einfach haufenweise Rechenpower und Speicher draufwerfen kann, sondern das Ganze auf meinem ipschigen Homeserver läuft, der jetzt nicht gerade mit performanter Hardware aufwarten kann… So einige fehlgeschlagene Runden aus unnützen Datenbank-Indexen und falschen Datenfeldern stecken da schon drin. Mit der aktuellen Performance bin ich recht zufrieden, aber beim Schreiben dieses Artikel ist mir bewusst geworden, dass ich da derzeit nicht in der Lage bin zu sagen „zeig mir nur die Punkte aus der Zeit von x bis y“ an. Zumindest nicht performant… Mal schauen, ob und wann ich da nochmal was gegen mache. Außerdem liegen die Daten im Moment in einer MariaDB, während PostgreeSQL extra Daten- und Indextypen für Koordinaten hat…

Vielleicht, wenn ich mal wieder Zeit habe… 😉

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.