Sonntag, 3. Januar 2016

Garmin GPSMap 64s vs. eTrex 10 - unsere Erfahrungen

Kurz nachdem wir Ende 2011 mit dem Geocaching angefangen hatten, haben wir uns das Garmin eTrex 10 als GPS Empfänger (kurz: GPSr) gekauft. Ein Smartphone war zu diesem Zeitpunkt bei uns noch nicht vorhanden und nach ein paar Caches war klar, dass das Holux GPSport 245 so auf Dauer nicht der geeignete GPSr für's Geocaching ist.

Irgendwann kam dann mal der Wunsch, GPSr-technisch aufzurüsten und so nutzen wir die Ende 2015 die Schnäppchen-Chance bei Amazon, ein Garmin GPSMap 64s sehr günstig (bezogen auf den regulären Preis) zu kaufen.

eTrex 10 und GPSMap 64s
 Warum aufrüsten?

Hier sei direkt gesagt, dass wir mit dem eTrex 10 nie ein Problem hatten. Die Präzision / Empfangsgenauigkeit ist sehr gut, sowohl beim Suchen als auch beim Einmessen von neue Caches. Dass das Display "nur" monochrom hat uns auch nie wirklich gestört. Da wir für die offline Karte ja bekanntlich Locus Map nutzen und darüber mittels Fieldnotes Add-on auch loggen, fiel das nie wirklich ins Gewicht, dass das mit dem eTrex 10 nicht geht.
Was ab und an mal gestört hat ist, dass der Speicher des eTrex 10 recht klein ist und auch nicht mittels SD-Karte erweitert werden kann. Das ist nicht tragisch, wenn man am Wochenende mal eine Runde mit einer paar handvoll Caches dreht. Aber wenn man z.B. einen größeren Pocket-Query mit ein paar hundert Caches für den Urlaub auf das Gerät zieht, ist der Speicher so gut wie voll. Natürlich kann man das Gerät dann noch benutzen, aber man muss in der Regel zumindest die Track-Aufzeichnung ausschalten. Was gerade in fremdem Gelände nicht so toll ist, weil man mittels Trackaufzeichnung immer gut zum Ausgangspunkt der Tour zurück finden kann.
Außerdem ist die Bedienung des eTrex mit dem kleinen Joystick und den Tasten an der Seite doch etwas fummelig bzw. man verklickt sich ab und an mal.
Und ein letzter, wenn auch am wenigsten ausschlaggebender, Grund war, dass wir gerne einen magnetischen 3-Achsen Kompass und barometrischen Höhenmesser im Gerät haben wollten.

GPSMap 64s

Das Garmin GPSMap 64s kann eben das alles, was das eTrex 10 nicht kann / hat. Übrigens wollten wir ein GPSr ohne Touchscreen - womit sich die Auswahl so wie so auf die GPSMap Serie reduziert ;-)

Das GPSMap 64 wird auch über Tasten bedient, aber über mehr, nämlich die 4-Wege Wippe in der Mitte plus 8umliegende Tasten. Und das geht wesentlich besser und schneller aus der Joystick plus die Tasten an der Seite des Geräts, wie die eTrex GPSr 10/20/30 es haben. Zumal die Tasten am GPSMap größer sind - was bei der Bedienung mit Handschuhen praktisch ist.

die Bedientasten der GPSMap 64 Serie
Dass das GPSMap 64 ein Farbdisplay hat und auch Karten darstellen kann ist dann auch nützlicher als gedacht. Wir haben eine OSM-Karte auf das Gerät geladen und das ist für die Orientierung in der näheren Umgebung durchaus praktisch, wir holen jedenfalls seltener das Smartphone aus der Tasche. Wobei für die Orientierung "im größeren Umkreis" (wie z.B. "Wie kommen wir zum Parkplatz für die nächsten Caches?") das größere Display des Smartphones schon besser und übersichtlicher ist.

Ein Problem mit der Speichergröße werden wir beim GPSMap 64s wohl auch nicht haben, weil das Gerät 4 GB eingebaut hat, welche zusätzlich mit einer SD-Karte erweitert werden können.

Satelliten-Empfang

Garmin bewirbt ja einen der Vorteile der GPSMap Serie damit, dass der Empfänger des GPS-Signals in dem Antennenstummel außen liegt (statt, wie es bei den anderen Geräten Standard ist, oben quer im Gehäuse). Dadurch soll man a) schneller ein Signal haben und b) ein genaueres Signal und schlechteren Empfangsbedingungen.
Nun, davon haben wir bis jetzt nicht wirklich etwas bemerkt. Wobei wir ja wie gesagt mit dem eTrex 10 nie ein Problem hatten. Aber wir haben auch nie einen echten A/B Vergleich gemacht haben, in dem wir mit beiden Geräten los sind.
Mit dem GPSMap 64s waren wir im Dezember in Hamburg unterwegs und hatten jedenfalls auch in der Stadt eine Genauigkeit von 4m (lt. Anzeige des GPSMap 64s). Für in der (Innen-) Stadt ist das wohl ok.

Fazit

Auch wenn wir mit dem eTrex 10 zufrieden waren - das GPSMap 64s lässt sich schneller und besser bedienen. Die Umstellung viel dabei auch nicht schwer, da die Menüführung und -strukturierung beider Geräte sehr ähnlich ist.
Das eTrex 10 können wir nach wie vor allen Empfehlen, die ein preiswertes GPSr suchen. Der Empfangsgenauigkeit ist sehr gut und in einem Punkt ist das eTrex 10 so wie so allen anderen GPSr überlegen: Batterielaufzeit. Die von Garmin angegeben ~24h mit zwei AA-Batterien können wir bestätigen.

Nicht desto trotz ist das GPSMap 64s aufgrund seiner Ausstattung "höher, besser, schneller, weiter" besser und komfortabler. Und jetzt, wo wir uns daran gewöhnt haben, möchten wir es auch nicht mehr missen.

Donnerstag, 12. November 2015

Kartendienst Schutzgebiete in Deutschland

Geocaches darf bzw. sollte man nicht überall legen. Bei Groundspeak, also geocaching.com, ist wohl ein Punkt, den der Reviewer überprüft, ob der Cache in einem Schutzgebiet liegt. Entweder gelten dann Einschränkungen (wie z.B. "muss ohne verlassen des Weges erreichbar sein") oder es ist erst gar kein Auslegen des Caches erlaubt.

Das Problem dabei: wenn es nicht gerade ein bekanntes bzw. ausgeschildertes Gebiet ist, weiß man vielleicht gar nicht, dass man einen Cache in einem Schutzgebiet platziert hat.

Einen sehr gute Übersicht über Schutzgebiete in Deutschland gibt die Seite http://www.geodienste.bfn.de/schutzgebiete , auf der man sich diese anzeigen lassen kann.

Ruf man die obige URL auf, so erscheint eine Karte im Browserfenster, wie in der folgenden Abbildung zu sehen:

Startansicht der Webeite
Gezeigt wird Deutschland und markiert sind Naturschutzgebiete sowie Nationalparks.


Oben rechts wird standardmäßig eine Auswahlliste eingeblendet, welche Schutzgebiete auf der Karte angezeigt werden sollen. Neben den Naturschutzgebieten und Nationalparks stehen noch Biosphärenreservate, Naturparks, Landschaftsschutzgebiete, FFH-Gebiete und Vogelschutzgebiete zur Auswahl.

Auswahlliste der anzuzeigenden Schutzgebiete
In die Karte lässt sich dynamisch hineinzoomen, so dass man auch einen detaillierten Blick auf das Gebiet werfen kann, welche für einen selber von Interesse ist.

Sehr praktisch ist auch die Suchleiste links oben:

Suchleiste
Fängt man an, in das Textfeld zu tippen, werden dynamische Vorschläge zum gerade eingetippten gemacht:

Suchergebnisse werden dynamisch angezeigt
Wie zu sehen ist, wird dabei praktischerweise gleichzeitig nach Städte- / Ortsnamen als auch Namen von Schutzgebieten gesucht.

Was leider nicht möglich ist - jedenfalls wüssten wir nicht wie - ist, Koordinaten einzugeben und so zu sehen, ob diese in einem Schutzgebiet liegen.

Nichts desto trotz ist die Webseite http://www.geodienste.bfn.de/schutzgebiete ein sehr praktisches Hilfsmittel, um zu prüfen, ob eine neu geplanter Cache vielleicht in einem Schutzgebiet liegt.

Donnerstag, 22. Oktober 2015

Orientierung beim Geocaching - wie man den Ausgangspunkt wieder findet

Am 19.10.2015 gab es in der Onlineausgabe der Welt (und auch anderen Zeitungen) einen kurzen Bericht, dass die Polizei eine Geocacherin aus dem Wald retten musste, weil diese nicht mehr von alleine zum Ausgangspunkt zurück fand (Link zum Artikel).

Da wir (bzw. Teile von DerSchnelleLinus) ja auch schon mal weltweit unterwegs sind und in völlig unbekannten (Wald-) Gebieten cachen gehen im folgenden das Vorgehen, was wir dabei immer befolgen:

Wenn wir cachen gehen haben wir immer das Garmin GPS plus ein Smartphone mit einer Offline-Karte (auf Basis von OSM Daten) dabei. Natürlich kennt auch OpenStreetMap nicht alle Wege, aber in der "westlichen Welt" ist zumindest die Abdeckung der Haupt- (wander-) Wege ganz gut, was bei der Orientierung und Tourplanung ungemein hilft.

Wir setzen am Ausgangspunkt der Tour, wo dann in der Regel auch das Auto steht, einen Wegpunkt im GPSr. So weiß man wenigsten, in welche Richtung man laufen muss, wenn man tatsächlich die Orientierung verliert.

Wenn wir vom Weg runter müssen, weil der Cache z.B. 100 m in den Wald hinein liegt, dann setzen wir am Weg ebenfalls einen Wegpunkt. Gerade in dichter bewaldetem, im hügligen Gelände "vergißt" man beim hin- und her des Suchens schon mal, in welche Richtung der Weg, von dem man kommt, denn jetzt eigentlich liegt.

Wir starten zu Beginn der Tour immer eine frische Trackaufzeichnung auf dem GPSr und lassen diese durchgehend mitlaufen. Da die GPS-Empfänger von Garmin & Co alle Akku- / Batterielaufzeiten von mehr als 12 Stunden haben, ist das auch bei einem langen Cachetag kein Problem.
Der Vorteil der Trackaufzeichnung: wenn wirklich nicht mehr weiß, wie man zurück kommt, dann läuft man den gleichen Weg anhand der Trackaufzeichnung einfach zurück. Bzw. einige GPS-Geräte bieten auch die Funktionen, den Track "umzukehren" und dann entsprechend zu führen.

Die Trackaufzeichnung haben wir schon ein paar Mal genutzt, zumindest über kurze Abschnitte, bis wir wieder sicher waren, wie es weiter geht. Abgesehen davon gibt sie immer ein zusätzliches Gefühl von Sicherheit, was ja auch immer gut ist.

Außerdem sollte man natürlich immer die "üblichen" Regeln beachten wie Ersatzbatterien (für den GPSr) und / oder eine Powerbank für das Smartphone dabei haben, ggf. anderen Leuten (Verwandten, Freunden) Bescheid sagen, wo man unterwegs ist, keine unnötigen Risiken eingehen etc.

Das ganze funktioniert im Prinzip auch, wenn man ohne GPSr und nur mit Smartphone unterwegs ist. Dann ist die Powerbank natürlich noch wichtiger, da selbst bei Smartphones mit großem Akku bei dauerhafter GPS-Aufzeichnung nach ein paar Stunden der Akku leer gesaugt ist.
Außerdem braucht man ggf. eine separate App für die Trackaufzeichnung. Das von uns genutzte LocusMap kann beides (also Geocaching und Trackaufzeichnung) gleichzeitig, reine Geocaching-Apps beherrschen in der Regel keine Trackaufzeichnung. Passende Tracking-Apps findet man unter den Suchbegriffen "GPS Tracker" oder "GPS Logger" problemlos in den App-Stores.

Mit ein bisschen Voraussicht und Planung sollte es so möglich sein, nicht nur die Geocaches sondern auch den richtigen und sicheren Weg zurück zu finden.

Sonntag, 20. September 2015

USA Urlaub 2015 - 5 National Parks in Utah

Unseren Sommerurlaub 2015 haben wir in den USA verbracht. Das Hauptziel waren fünf Nationalparks in Utah, nämlich:
Die Parks haben wir auch in dieser Reihenfolge besucht. Geflogen sind wir nach Los Angeles, von da aus ging's dann für zwei Tage nach Las Vegas und von dort aus weiter zu den Parks. Nach dem Capitol Reef waren wir dann nochmal einen Tag in Las Vegas und dann zum Abschluss südlich von Los Angeles, am Strand von Manhattan Beach.

Blick auf Manhattan Beach, südlich von LA
Gecacht haben wir natürlich auch, wobei der Schwerpunkt auf "Urlaub" lag und nicht "Cachen". In den Nationalparks gibt es so wie so keine Tradis (scheinbar sind die dort nicht erlaubt, zumindest nicht in denen, wo wir waren), somit standen primär Earthcaches und Virtuals auf dem Programm. Davon gibt es in jedem der Parks einige.

Natürlich könnten man zu allen Parks sehr viel schreiben. Wir beschränken uns hier aber auf ein bisschen Text und lassen die Fotos sprechen.

Zion Nationalpark

Hier waren wir im Zion Canyon, was quasi der "Hauptteil" (bzw. der meistbesuchte Teil) des Parks ist. Der Canyon ist charakterisiert durch seine steilen Wände aus rotem Gestein, gepaart mit dem Fluss und der Vegetation an der Talsohle, welche zusammen eine tolle Landschaft ergeben.

Blick in die Zion Narrows
Zion Nationalpark

Zion Nationalpark
Der Zion Park darf übrigens in der Hauptsaison nicht mit dem eigenen Auto befahren werden (in den anderen Parks ist das möglich bzw. normal). Im Zion gibt es aber kostenlose Pendelbusse, die regelmäßig im Park verkehren und verschiedene Haltepunkte haben.

Bei der Fahrt vom Zion zum Bryce Canyon führt die Straße übrigens durch einen anderen Teil des Park, wo es auch durchaus reizvolle Felsformationen gibt.

Felsformation in einem anderen Teil des Zion Nationalparks

Bryce Canyon

Der Bryce Canyon ist vor allen durch sein Kombination aus Felsen, Wald und besonders seinen Hoodoos bekannt. Letztere gibt es zu tausenden im Park.

Im Bryce Canyon befindet man sich immer oben auf einem Hochplateau und blickt hinab. Außer einer tollen Landschaft gibt es hier also auch grandiose Weitblicke.
Bryce Canyon war auch der höchste Punkt unserer Tour. Der Aussichtspunkt "Rainbow Point" befindet sich auf knapp 2800 m Höhe.
Aussicht im Bryce Canyon Nationpark

Blick auf die Hoodoos im Bryce Canyon

Blick auf noch mehr Hoodoos im Bryce Canyon

Hoodoos aus der Nähe
Arches

Der Arches Nationalpark zeichnet sich - wie der Name schon vermuten lässt - durch seine Steinbögen aus, die es hier an verschiedenen Stellen und in verschiedenen Größen gibt.
Leider war des Wetter an dem Tag des Besuch bescheiden. Erst Schauern und nachmittags dann so viel Regen, dass wir die Tour abgebrochen haben.

Landscape Arch - leider aufgrund des Hintergrunds schlecht zu sehen

Sand Dune Arch, einer der kleineren Bögen

Balanced Rock im Arches Nationalpark

die Window-Section im Arches Nationalpark

Der Arches Park ist der, den wir von den fünf Nationalparks am "schwächsten" fanden. Vielleicht lag's am Wetter oder daran, dass Steinbögen nicht unser Ding sind.
Wenn man den Canyonlands Park besucht, fährt man aber so wie am Arches vorbei, beide Parks liegen in der Nähe von Moab. Von daher waren wir so wie so in der Gegend.

Dead Horse Point

Dead Horse Point ist kein Nationalpark, sondern "nur" ein Statepark. Wenn man von Moab Richtung Canyonlands fahrt kommt man unmittelbar an der Stichstraße vorbei, die zum Dead HorsePoint führt. Der "Umweg" beträgt nur 10 km - und die lohnen sich. Vom Dead Horse Point hat man einen grandiosen Ausblick auf eine Schleife des Colorado River. Der Aussichtspunkt befindet sich ca. 600 m höher als der Fluss.

Blick vom Dead Horse Point auf den Colorado River
Canyonlands

Auch hier ist der Name Programm: man befindet sich auf einem Hochplateau und hat immer wieder spektakuläre Ausblicke auf die umliegenden Canyons.
Canyonlands, Blick in den Schafer Canyon

Mesa Arch im Canyonlands Nationpark

auf dem Mesa Arch

Blick vom Grand View Point, Canyonlands Nationalpark
 Captiol Reef
 
Der Capitol Reef Nationalpark ist zwar ziemlich groß bzw. langgestreckt, da die Straße aber quer durch schmalen Teil des Parks führt, hat man den Park ziemlich zügig durchquert. Kernstück des Parks ist eine ca. 150 km lange Verwerfung der Erdkurste.
Im Gegensatz zu den anderen vier Parks ist es im Capitol Reef ruhiger, weil hier (viel) weniger Besucher unterwegs sind.

Capitol Reef Nationalpark

Hickmann Bridge im Capitol Reef Park

Blick auf die Verwerfung im Capitol Reef National Park
Zusammenfassung & ein paar Tipps

Schön war's auf jeden Fall, wir haben tolle Landschaften gesehen und super Ausblicke genossen.

Wer wander-affin ist kann übrigens in allen Parks gut Touren machen. Es gibt etliche Trails von kurz (< 1 km) bis lang (20 km oder mehr). Außerdem gibt es in allen Parks reichlich Campingsplätze.
Wir haben in allen Parks auch Touren gemacht, aber eher kürzer, so ca. maximal 5 km.
Wer wandern geht, gerade in den Sommermonaten, sollte unbedingt genug Wasser mitnehmen! Den trotz der Höhe ist es ziemlich warm (30-35°C) und Schatten ist auch nur bedingt vorhanden.
Wir haben selbst auf Touren von "nur" 1,5 h mit vier Leuten 1,25 - 1,5 Liter Wasser getrunken. Wer länger unterwegs ist sollte die Empfehlung der Park Ranger ernst nehmen und mindestens 4 Liter pro Tag und Person mitnehmen.

Auch wenn die Parks alle im gleichen Bundesstaat liegen und nach amerikanischen Verhältnissen nicht weit auseinander, sollte man sich vorher die Entfernung ansehen und entsprechend viel Fahrzeit einplanen.
auf der Landtraße Richtung Captiol Reef
Das gute ist immer, dass auf den Straßen ziemlich wenig Verkehr ist, wenn man erst mal Las Vegas hinter sich gelassen hat.

Wer eine ähnlich Tour plant oder einen der Parks besuchen möchten, der kann uns gerne für weitere Infos oder Fragen per Mail kontaktieren.

Samstag, 12. September 2015

Anderer Cache - eine Bastelanleitung

Die meisten (bedosten) Caches bestehen aus einen wie auch immer gearteten Cachebehälter, in dem ein Logbuch aus Papier ist.

Das ist gängig, aber man kann auch einen Cache mit Logbuch ohne Dose und ohne Papier bauen. Einen "anderen Cache" halt. Wie, das wird im folgenden beschrieben.

Als Material braucht man:
  • eine Dachlatte, ca. 4x2 cm Querschnitt
  • zwei kurze Spax-Schrauben mit großem Kopfdurchmesser (z.B. 4,5x12 oder 4,5x16)
  • zwei Rundmagnete, 10 mm Durchmesser, Dicke 5 mm
Bei den Magneten sollte man darauf achten, dass man starke, wie z.B. Neodym-Magnete nimmt - weil an diesen Magneten später die Lochbuch (bzw. die Loglatte) befestigt wird. Solche Magnete bieten diverse Geocaching-Shops an, der Preis liegt in der Regel bei moderaten ca. 0,50 Euro pro Magnet

Als Werkzeug braucht man:
  • eine Säge
  • einen 10 mm Holzbohrer
  • einen Senker
  • einen Schraubendreher
Und man braucht noch einen geeigneten Kleber, der die Magnete im Holz verkleben kann. Sehr gut bewährt dafür hat sich bei uns Patex 100% Repair Gel, welches man in jedem Baumarkt bekommt.

Material und Werkzeug für einen "anderen" Cache
Hat man alle Materialien zusammen, dann kann man mit dem Basteln loslegen. Von der Dachlatte sägt man ein 40 cm langes und ein ca. 60 cm langes Stück ab. Das 40 cm lange Stück wird das Logbuch, das 60 cm lange Stück der Logbuchhalter.

Letzter wird dann wie folgt gebaut: Man bohrt im Abstand von 10 cm und 30 cm von der Oberkante der Latte ein 5 mm tiefes Sackloch horizontal mittig in das Holz. Darin verklebt man dann die Magnete mit Hilfe des Klebers.
Außerdem empfiehlt es sich, das untere Ende der Dachlatte etwas anzuspitzen, damit man sie später besser in die Erde stecken kann. Damit ist der Logbuchhalter schon fertig.

der Logbuchhalter

die Magnete sind bündig in der Dachlatte versenkt
Der Bau des Logbuchs ist ebenso einfach: Hier bohrt man ebenfalls im Abstand von 10 cm und 30 cm von der Oberkante horizontal mittig mit dem Senker die Dachlatte an, so der Kopf der Schraube später genau bündig mit der Oberfläche des Holzes abschließt. Danach werden die beiden Schrauben eingeschraubt. Damit ist das Logbuch auch fertig gebaut. Jetzt sollte man es noch beschriften, z.B. in dem man mit einem dünnen, wasserfesten Marker zumindest den Namen des Caches darauf schreibt.

das Logbuch / die Loglatte
Die Schrauben in der Loglatte werden von den beiden Magneten angezogen, so hält diese auf dem Loglattenhalter. Der Cache ist fertig und kann platziert werden.

der fertige Cache
Wie gezeigt ist der Bau eines solchen Caches nicht weiter schwierig und dauert auch nicht lange. Am längsten dauert das Austrocknen des Klebers, dem man schon mindestens eine Nacht geben sollte.

Und das ganze ist auch praxistauglich. Wir selber haben genau so einen Cache seit dem 1.7.2015 im Einsatz - und das völlig problemlos. Vor kurzem haben wir zum ersten Mal den Logbuchhalter getauscht. Präventiv. Und nicht, weil es wirklich nötig gewesen wäre. Die Haltbarkeit ist also auch gegeben.

Wer also mal einen Cache und "klassische Dose" und Papierlogbuch platzieren möchte. der kann z.B. diesen Cache so oder auf ähnliche Weise nachbauen.
Wer einen solchen Cache auslegt sollte übrigens im Listing noch erwähnen, dass die suchenden Cacher zum Loggen am besten eine Kuli, Marker oder Bleistift mitbringen sollen. Tintenroller und Faserschreiber schreiben nämlich unter Umständen schlecht bis gar nicht auf Holz.

Sonntag, 6. September 2015

Anzahl der Fund, DNFs, Wartungen etc der eigenen Caches auslesen

Statistiken gibt es beim Geocaching viele in jeglicher Ausprägung. Allerdings sind diese fast immer auf (eigene) Funde fokussiert.

Wer als Cacheowner z.B. wissen will, wie viele Funde die eigenen gelegten Caches haben, der schaut erst Mal in die Röhre. Jedenfalls gibt es keine uns bekannte Möglichkeit, dies zu sehen.
Wer "nur" eine handvoll Caches gelegt hat, kann dies natürlich noch relativ einfach und schnell von Hand erledigen. Für Cacheowner mit mehr als ein paar Caches, würde dies händisch viel zu lange dauern, etliche Dutzend Listings von Hand aufzurufen.

Da uns diese Zahlen aber interessieren, wurde - selbst ist der Geocacher - ein Python-Skript (für Python 3) geschrieben, welches die Anzahl der "Found it", "Didn't find it", "Write note", "Need Maintenance", "Owner Maintenance", "Temporarily Disable Listing", "Enable Listing" und "Needs Archived" Logs aus den Cachelistings extrahiert, zusammenrechnet und am Ende am Bildschirm ausgibt.

Die gewünschten Daten sind in jedem Listing bei geocaching.com zu finden und für jeden sichtbar, d.h. man muss nicht auf der Webseite eingelogt sein.

Was das Skript macht ist folgendes:
Es wird zuerst eine Datei cache_list.txt (die im selben Verzeichnis liegen muss die das Skript selbst) eingelesen, in der zeilenweise die GC-Nummer der abzurufenden Caches hinterlegt sind. Die Struktur der Datei ist also

GC2X3F0
GC3M3R8
GC3PGDD
GC3PM4E
...

Für jeden dieser Caches lädt das Skript die Webseite des Listing in den Speicher, parst das HTML der Webseite und extrahiert daraus die Logzahlen.
Während das Skript arbeitet werden die Daten für den jeweiligen Cache auf dem Bildschirm ausgegeben:

...
reading: GC4DRB0
Found it:  166 - Write note:  1 - Owner Maintenance:  1 -
---------------------------------------
reading: GC4EA6J
Found it:  99 - Didn't find it:  1 - Write note:  2 - Owner Maintenance:  2 -
----------------------------------------
...

Nachdem alle Listings abgerufen und geparst wurden, wird das Ergebnis ausgegeben.

Der komplette Python-Code des Skripts sieht so aus:

from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
from html.parser import HTMLParser
from datetime import datetime


class MyHTMLParser(HTMLParser):

    def __init__(self):
        HTMLParser.__init__(self)
        self.recording = 0
        self.cache_data = {"Found it": 0,
                           "Didn't find it": 0,
                           "Write note": 0,
                           "Owner Maintenance": 0,
                           "Needs Maintenance": 0,
                           "Temporarily Disable Listing": 0,
                           "Enable Listing": 0,
                           "Needs Archived": 0}
        self.cur_value = None

    def handle_starttag(self, tag, attrs):
        if tag == "img":
            for name, value in attrs:
                if name == "title" and value == "Found it":
                    self.cur_value = "Found it"
                elif name == "title" and value == "Owner Maintenance":
                    self.cur_value = "Owner Maintenance"
                elif name == "title" and value == "Didn't find it":
                    self.cur_value = "Didn't find it"
                elif name == "title" and value == "Write note":
                    self.cur_value = "Write note"
                elif name == "title" and value == "Needs Maintenance":
                    self.cur_value = "Needs Maintenance"
                elif name == "title" and value == "Temporarily Disable Listing":
                    self.cur_value = "Temporarily Disable Listing"
                elif name == "title" and value == "Enable Listing":
                    self.cur_value = "Enable Listing"
                elif name == "title" and value == "Needs Archived":
                    self.cur_value = "Needs Archived"
                self.recording = 1

    def handle_data(self, data):
        if self.recording:
            if self.cur_value == "Owner Maintenance":
                self.cache_data["Owner Maintenance"] = \
                    self.cache_data["Owner Maintenance"] + int(data)
                print("{}: {} - ".format(self.cur_value, data), end="")
            elif self.cur_value == "Needs Maintenance":
                self.cache_data["Needs Maintenance"] = \
                    self.cache_data["Needs Maintenance"] + int(data)
                print("{}: {} - ".format(self.cur_value, data), end="")
            elif self.cur_value == "Found it":
                self.cache_data["Found it"] = \
                    self.cache_data["Found it"] + int(data)
                print("{}: {} - ".format(self.cur_value, data), end="")
            elif self.cur_value == "Didn't find it":
                self.cache_data["Didn't find it"] = \
                    self.cache_data["Didn't find it"] + int(data)
                print("{}: {} - ".format(self.cur_value, data), end="")
            elif self.cur_value == "Write note":
                self.cache_data["Write note"] = \
                    self.cache_data["Write note"] + int(data)
                print("{}: {} - ".format(self.cur_value, data), end="")
            elif self.cur_value == "Needs Archived":
                self.cache_data["Needs Archived"] = \
                    self.cache_data["Needs Archived"] + int(data)
                print("{}: {} - ".format(self.cur_value, data), end="")
            elif self.cur_value == "Temporarily Disable Listing":
                self.cache_data["Temporarily Disable Listing"] = \
                    self.cache_data["Temporarily Disable Listing"] + int(data)
                print("{}: {} - ".format(self.cur_value, data), end="")
            elif self.cur_value == "Enable Listing":
                self.cache_data["Enable Listing"] = \
                    self.cache_data["Enable Listing"] + int(data)
                print("{}: {} - ".format(self.cur_value, data), end="")
            self.cur_value = None
            self.recording = 0

p = MyHTMLParser()
print("Starting at {}".format(datetime.now()))
with open("cache_list.txt", "r") as f:
    for cache in f:
        print("reading: {}".format(cache), end="")
        req = Request("http://coord.info/{}".format(cache))
        try:
            response = urlopen(req)
        except HTTPError as e:
            if e.code == 404:
                print("...is an invalid GC-number!", end="")
            else:
                print("Got HTTPError code {} when trying to fetch data for {}"
                      .format(e.code, cache))
        else:
            html = response.read().decode("utf-8")
            p.feed(html)
        print()
        print("-"*40)
print("Data on caches:")
print("Found it logs: {}".format(p.cache_data["Found it"]))
print("Didn't find it logs: {}".format(p.cache_data["Didn't find it"]))
print("Write note logs: {}".format(p.cache_data["Write note"]))
print("Need Maintenance logs: {}".format(p.cache_data["Needs Maintenance"]))
print("Owner Maintenance logs: {}".format(p.cache_data["Owner Maintenance"]))
print("Needs Archived logs: {}".format(p.cache_data["Needs Archived"]))
print("Temporarily Disable Listing: {}"
      .format(p.cache_data['Temporarily Disable Listing']))
print("Enable Listing logs: {}".format(p.cache_data["Enable Listing"]))
p.close()
print("Finished at {}".format(datetime.now()))

Das Skript arbeitet die Liste der GC-Nummer übrigens "stumpf" ab, d.h. es erfolgt keinerlei Prüfung, ob die GC-Nummer auch wirklich ein eigener Cache ist - von daher sollte man beim Anlegen der Datei mit den GC-Nummern sorgfältig sein.
Sollte die Liste eine ungültige (=nicht existierende) GC-Nummer enthalten, so gibt es Skript einen Hinweis am Bildschirm aus und fährt dann mit dem nächsten Cache fort.

Das Ergebnis sieht dann so aus (heutiger Stand für unsere 89 aktiven Caches):

Data on caches:
Found it logs: 8094
Didn't find it logs: 22
Write note logs: 176
Need Maintenance logs: 16
Owner Maintenance logs: 118
Needs Archived logs: 0
Temporarily Disable Listing: 11
Enable Listing logs: 11

Das ganze dauert übrigens ein bisschen, da die Server von Groundspeak ja nicht so schnell sind (und wir außerdem zu Hause noch eine relative lahme Internetanbindung haben). Für die 89 Cache wurde ca. 11 Minuten benötigt.

Was aber nicht wirklich schlimm ist, weil man diese Statistik ja nicht so häufig benötigt. Außerdem könnte man die Abrufe der Webseiten bei Bedarf noch parallelisieren.

Anzumerken ist auch noch, dass Web Scraping nicht zur "feinen englische Art" gehört - auch, wenn hier "nur" die Daten zu eigenen Caches abgerufen werden.
Wenn also jemand eine bessere / "feinere" Art kennt, an die Daten zu kommen, kann das gerne in den Kommentaren beschrieben werden.

Und auch bei Fragen / Anmerkung zum Skript bitte direkt an uns wenden.

Freitag, 14. August 2015

Cachekeeper - die eigenen Caches verwalten

Wer mehr als ein paar Caches legt kommt wahrscheinlich irgendwann nicht mehr umhin, eine gewisse Buchführung einzuführen. Wie z.B. "Welcher Cache hat welche Dose?", "Welches Logbuch ist in dem Cache?" oder "Wann wurde bei welchem Cache welche Wartung durchgeführt?".

Früher haben wir unsere Buchführung via CouchDB gemacht, darüber hatten wir hier im Blog im Juni 2013 bereits geschrieben. Das Verwaltung über die CouchDB Datenbank hat zwar eigentlich gut geklappt, erfüllte aber doch nicht so richtig alle Wünsche. Dazu gehören z.B. eine bessere Übersicht über durchgeführte Wartungen und eine Exportmöglichkeit für die Lösungen und Lösungswege unserer Mysteries (falls ein Cacher bei einem Rätsel mal nicht weiter kommt - obwohl die eigentlich alle gut lösbar sind ;-) ). Außerdem war noch gewünscht, sich eine Karte mit den Finalpositionen der eigenen Caches generieren zu lassen.

Also wurde im Frühjahr beschlossen, eine eigene Software für die Verwaltung der eigenen Caches zu schreiben.

Der Name: Cachekeeper.

Das ganze ist in Python und dem Webframework Django umgesetzt. Die Softwarebasis ist also die gleiche wie die von Mysterykeeper, welches hier im Blog im Mai dieses Jahres vorgestellt wurde.

Technisch gesehen wird Cachekeeper also über den Browser bedient, Django stellt die Daten (lokal) über den eingebauten Webserver bereit und die Daten an sich liegen in einer relationalen Datenbank.

Zu Cachekeeper an sich:

Zu jedem eigenen Cache kann man in Cachekeeper einen Eintrag anlegen. Dieser enthält folgende Pflichtangaben:

  • GC-Nummer (oder OC-Nummer)
  • Name des Caches
  • Cache-Typ (Tradi, Mystery, Multi, Letterbox...)
  • Dose
  • Finalkoordinaten
  • Gemarkung, in der der Cache liegt
außerdem gibt es noch folgende optionale Felder:
  • Notizen
  • Antworten (bei Mysteries wird hier die Lösung hinterlegt)
  • Geochecker-Link
  • OC-only Cache?
Das ganze sieht in der Eingabemaske so aus:

Eingabemaske zum Eingeben und Editieren von Caches
Des Weiteren können noch für jeden Cache Einträge für durchgeführte Wartungen hinterlegt werden, ebenso können für jedem Cache beliebig viele Anhänge (wie z.B. Bilder für das Listing, Logbuchvorlagen etc.) hochgeladen werden.

Die Eingabe über aller Daten erfolgt über das Admin-Frontend, welches in Django standardmäßig enthalten ist. Dieses ist auch auf dem Bildschirmfoto oben zu sehen.

Ruft man Cachekeeper im Browser über http://localhost:8000/cachekeeper auf, so sieht man die Startseite des Programms, welche wie folgt aussieht:

Startseite von Cachekeeper
Hier werden alle aktiven Caches tabellarisch aufgelistet, wobei die Tabelle per Mausklick auf die Spaltenüberschrift nach der entsprechenden Spalte umsortiert werden kann.

Klickt man auf eine der Cache-IDs gelangt man zur Seite mit den Details zum gewählten Cache:

Detailansicht zu einem Cache
Aufgelistet sind tabellarisch alle Details zum Cache, inklusive einer Auflistung, wann welche Wartung durchgeführt wurde und welche Anhänge dem Cache zugeordnet sind.

Apropos Wartung: Cachekeeper stellt auch eine Seite bereit, auf der alle Wartungen chronologisch auflistet sind. Dies sieht so aus:

chronologische Liste der durchgeführten Wartungen
Über der Tabelle auf der Startseite von Cachekeeper sind einige Links zu finden, die auf weitere Seiten der Anwendungen verlinken:

die Menüleiste von Cachekeeper
Der Link "OC-only Caches" ruft die Seite auf, auf der die Caches aufgelistet werden, die exklusiv bei opencaching.de gelistet sind. Ein Klick auf "all caches" erzeugt eine Tabelle der Caches wie auf der Startseite, in der aber alle Caches aufgeführt werden - egal ob aktiv oder archiviert.

Des Weiteren gibt es hier die Möglichkeit, die Lösungen für alle im Programm hinterlegten Mysteries zu exportieren.
Sinn dieser Funktion ist übrigens nicht, dass man die Lösungen für seinen eigenen Mysteries besonders einfach in irgendwelchen dubiosen Facebook Gruppen zur Verfügung stellen kann. Vielmehr man so die Lösungen seiner Mysteries "dabei haben", falls andere Geocacher mal Probleme beim Lösen haben sollten, ohne dass man direkt die ganze Cachekeeper Applikation dabei haben zu müssen.

Der Link "Stats" ruft die Statistikseite. Diese sieht so aus:

Statistikseite
Wie im Bildschirmfoto zu sehen ist, wird hier die Anzahl der aktiven Caches nach verschiedenen Kategorien gezeigt. Neben der im obigen Bild zu sehenden Zählung nach Cachetyp und Cachegröße gibt es noch Statistiken zu den eingesetzten Dosen, sowie den Caches pro Gemarkung.

Wie oben bereits erwähnt bietet Cachekeeper weiterhin die Möglichkeit, eine Karte mit allen Caches innerhalb einer Gemarkung bzw. in mehreren Gemarkungen zu generieren. Dies ist z.B. praktisch, wenn man dem lokalen Forstamt oder Ortsbürgermeister eine Karte der (eigenen) existierenden Caches vorlegen möchte, z.B. zwecks Einholen der Genehmigung weiterer Caches.

Als Kartendarstellung für die Cachekarte kann zwischen OSM und Google Maps gewählt werden.

Die Auswahlseite für die Gemarkung(en) sieht wie folgt aus:

Auswahl der Gemarkung
Wie zu sehen ist, ist die Auswahlseite zweigeteilt. Im oberen Bereich ist eine Auflistung alle Gemarkungen (Gemeinden / Orte), für die mindestens ein aktiver Cache in der Datenbank hinterlegt ist. Ein Klick auf "Google Map" bzw. "OSM" generiert die entsprechen Karte.

Diese sieht mit OSM als Kartenquelle so aus:

Beispielkarte mit Caches in einer Gemarkung
Die roten Kreise um die Marker entsprechen einem Radius von 161 m in Realitität. Die Karte kann optional aber auch ohne Kreise und nur mit Markern dargestellt werden.

Möchte man eine Karte mit Caches in mehreren Gemarkung erstellt, dann wählt man diese einfach über die zugehörige Checkbox im unteren Teil der Auswahlseite an (das Bildschirmfoto oben zeigt nicht die komplette Liste). Die Darstellung entspricht der der Caches in nur einer Gemarkung:

Beispielkarte für Caches in mehreren Gemarkungen
So weit, so gut. Wir haben Cachekeeper seit ein paar Monaten für uns im Einsatz. Und es ist schon ganz praktisch und übersichtlich. Jedenfalls übersichtlicher als die alte Lösung mit CouchDB.
Aktuell läuft Cachekeeper "nur" lokal auf einem unserer Laptops. Grundsätzlich wäre es aber auch ohne Probleme möglich, das Programm auf einer Server zu verfrachten, welcher über das Internet erreichbar ist.

Falls jemand Interesse an Cachekeeper für sich hat, kann er uns gerne kontaktieren. Wir löschen dann aber vorher die Datenbank mit den Daten unserer Caches ;-)

Für den (lokalen) Betrieb muss Python 3 und das Django-Webframework installiert sein. Außerdem muss, bevor die Dateien für Cachekeeper kopiert werden, ein Projekt und ein Applikation angelegt werden (was kein Problem ist). Dann werden die Cachekeeper Dateien kopiert und die Datenbank angelegt. Was auch kein Probem ist. Danach wäre Cachekeeper einsatzbereit.