GGZ – das Programm

Hui, die Zugriffszahlen auf den GGZ-Artikel haben mich wirklich überrascht, scheint ein Thema zu sein dass erstaunlich viele interessiert! Und das obwohl es, wie in den Kommentarten zu lesen ja schon seit 2015 oder so eine Lösung gibt die wohl auch gut funktionieren soll. Die Lösung hatte ich vorher zwar gesehen, aber dank Phyton und Comand-Line war die für mich nicht so interessant. Nichts gegen die Comand-Line, aber die ist mir dann doch zu händisch. Außerdem ging es mir weniger um eine wirkliche Lösung als eher um so eine Art Fingerübung, mal was anderes Programmieren als ich es sonst auf der Arbeit mache. Gehupft wie gesprungen, jetzt ist was fertig. Einiges an der Programmierung wirkt vielleicht auf den ersten Blick befremdlich. Das ist zwei Dingen geschuldet. Zum einen hat Groundspeak ein zum Teil wirklich seltsames Vorgehen in ihrem Datenforma, zum anderen ist es halt auf die schnelle zusammen geschustert.

Eins mal vorab, wer was Ausgereiftes sucht dass er problemlos sofort einsetzen kann und mit wenig Fehlern rechnen muß, dann nehmt was ggzgen!! Ich habe hier in Visual Studio (VB) was zusammen geschraddelt das funktioniert, aber keine Fehlerabfang-Routinen oder irgendwas integriert hat. Es ist ein wenig getestet, zum Glück scheint der liebe Markus Gründel damit was anfangen zu können, daher hatte ich sozusagen einen Tester mit echten Daten. Ehrlich gesagt bin ich mir nicht mal sicher dass ich mir ohne den einen Anwender der damit was anfangen kann überhaupt so viel Arbeit gemacht hätte 😎

Aber lange Rede, kurzer Sinn, es ist jetzt eine einfache Programm-Version fertig geworden und mehr Zeit möchte ich auch gar nicht versenken. Sie funktionert bei mir und dem Markus, ist also wohl nicht so ganz verkehrt. Und damit, wer immer möchte, damit rumexperimentiert werden kann stelle ich die hier mal zur Verfügung. Und zwar mit Source-Code. Vielleicht möchte ja einer mit Programmierung beginnen oder irgendwas für sich selber anpassen oder was auch immer. Das Visual-Studio gibt es ja auch in einer kostenfreien Version für Hobby-Programmierer. Irgendwelche Rechte habe ich nicht und will ich nicht haben. Wer also das Tool für viele Millionen auf den Markt bringt dem sei das Geld gegönnt 😎

Zur Nutzung braucht ihr diese ZIp-Datei. Entpacken und in ein Verzeichis. Programmierer waren schon immer zu faul um wirklich zu dokumentieren 😉 Und wer eben mag kann sich hier die Quellen runterladen. Viel Spaß damit.

Das GGZ-Format von Garmin

Mit dem GGZ-Format von Garmin kam es ja endlich dazu mal Caches ohne Ende auf einige der Garmin-Geräte laden zu können und die dennoch schnell aufrufen zu können. Das beschreiben sie hier. Wobei beschreiben ja mal wieder eher geprahlt ist 😎 Hinzu kommt dass die Beschreibung wohl uralt ist wenn man sich die genannten Gerät dort anschaut.

Mich interessierte das Format dennoch und so hörte ich mich mal um ob es eine Dokumentation gibt, finden konnte ich leider nichts. Wie das so auf Facebook nicht ganz unüblich ist kamen durchaus Antworten, mit der Frage hatten sie leider meist nichts zu tun. Ist aber gar nicht böse gemeint, bemüht waren alle zu helfen! Und immerhin kam ein Tipp mit der Info dass es eigentlich nur eine Zip-Datei ist. Das hatte ich zwar schon selber ermittelt, war anhand der spärlichen Beschreibung von Garmin nicht so schwer zu erraten, aber immerhin ein hilfreicher Tipp falls dies nicht so gewesen wäre.

Garmin schwurbelt da von speziell komprimierten Zip-Dateien, mir hat sich bisher „speziell“ nicht erschlossen, ist eigentlich eine völlig normale Zip-Datei. Wenn ihr mal schauen wollt schnappt ihr euch eine GGZ und benennt die in ZIP um. Dümmliche Windows-Nachfragen einfach mit JA beantworten

Nun mit 7-Zip oder was auch immer für einem Entpacker auspacken lassen, es entstehen zwei Hauptordner.

In meiner 7 MB Datei waren rund 4000 Caches. Daraus macht er dann in „data“ 8 GPX-Dateien die alle rund 4400 KB groß sind. Genau hier hätte ich halt gern eine Doku, denn so ist unklar ob er das nach Anzahl Caches oder Dateigröße trennt und wenn nach welcher Größe?! Ok, könnte man natürlich mal auf 4400 KB begrenzen und schauen, wissen wäre aber schöner.

Im anderen Strang unter index ist nur ganz unten in v0 etwas. Warum der Strang dann denoch so aufgeblasen wurde ist unklar. Da wird es schon einen Sinn geben, aber ohne Dokumentation wäre das wieder raten. Ich vermute es hat was von Androids Aufbau, dort sehen Verzeichniss-Stränge ähnlich aus, aber wie gesagt, geraten. Ist auch Wurst, in v0 findet man eine index.xml.

Die macht jetzt nicht anderes als auf die GPX-Datein zu verweisen. D.h. der obige Cache liegt in Geocaches_1.gpx, Kurzinfo für das GPS und von wo bis wo er dort liegt. CRC ist nur einmal ganz oben und dürfte eine Prüfsumme sein die sich auf die ZIP-Datei bezieht, da muß ich noch mal genauer hinschauen. Warum hier File-Pos und File-Len angegeben sind ist mir ebenfalls nicht völlig klar, könnte aber performanter sein als von hier auf die GPX zu springen und dort suchen zu müssen. Wird wohl auch seinen Sinn haben. Macht übrigens beim Programmieren viel Freude 😉 Falls da einer was rumprobieren möchte und sich wundert dass seine mitgerechneten File-Positionen nicht stimmen, Stichworte: Carriage LineFeed und Encoding. Programmierer werden wissen was gemeint ist.

Was Garmin da als neues Format aufführt ist also eigentlich nichts anderes als die normalen GPX-Dateien erweitert um eine Index-Datei. Und weil das GPS jetzt nicht mehr alle Daten des Caches lesen muß sondern alles in der Index-Datei hat was angezeigt wird geht das alles erheblich schneller. Die anderen Daten werden nicht mehr komplett eingelesen sondern erst wenn man auf einen Cache klickt. Oh Wunder, oh Wunder, eigentlich ganz einfach.

Ich schreibe mir gerade ein Programm um aus GPX-Dateien GGZ-Dateien machen zu können. Warum? Einfach mal so 😎 Oder weil GSAK irgendwann nicht mehr da ist und ich dann dennoch z.B. auch die Wandernadeln (Harz) auf das Gerät bekommen möchte und das GGZ für mich einen guten Eindruck macht. Einen ersten Rohentwurf der Index-Datei habe ich mit einem zusammen geschusterten Progrämmchen hin bekommen, werde ich demnächst mal auf Funktionalität testen.