Geocaching & GPS location based games

Thema anzeigen - Warum eigentlich papierlos Cachen?


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 


Autor Nachricht
 Betreff des Beitrags: Warum eigentlich papierlos Cachen?
BeitragVerfasst: Fr 6. Jul 2012, 17:25 
Offline
Geocacher
Benutzeravatar

Registriert: Di 29. Mai 2012, 19:01
Beiträge: 155
Wohnort: Hückelhoven / NRW
Ich bin zwar schon immer mit meinem Garmin cachen gegangen, hatte aber anfangs kein Smartphone. Daher hab ich mir die wichtigsten Informationen zu den Caches notiert. Anfangs im Editor, später dann mit einem kleinen Perlskript einen Text erzeugt, den ich dann ausgedruckt und zum Cachen mitgenommen habe.
Da ich privat sogut wie nie Windows nutze, brauchte ich eine Lösung für Linux. So sind mit der Zeit einige nützliche Perl-Skripte entstanden.
Vor einigen Wochen bin ich hier im Forum auf "geolog" gestoßen, welches ja auch ein Perlskript ist. Den Quellcode hab ich mir mal angesehen und darauf hin in meinem Skript einige Sachen vereinfacht (jetzt benutze ich keine Hashes mehr).

Ich poste hier also ein Skript, welches aus gpx-Dateien (einzelne Caches oder auch Pocketqueries) Notizen extrahiert und auf der Kommandozeile ausgibt.
Wenn keine Argumente übergeben werden liest es alle gpx-Dateien im aktuellen Arbeitsverzeichnis. Es können aber auch gpx-Dateien als Argumente übergeben werden.
Die Konfiguration der Notizen erfolgt am Anfang, weiter unten kann man die Sortierreihenfolge einstellen, im Moment nach GC-Name.
Multies werden Standardmäßig übersprungen, weil man dort ja mehr Text aus dem Listing benötigt.
Code:
#!/usr/bin/perl

use strict ;
use warnings ;
use v5.10 ;

# Konfiguration der Cachenotes
my $cachenote = "gcname -- name -- type -- size -- difficulty/terrain
coords
hint\n\n" ;

sub get_owner {
    my $cache = shift ;
    $cache =~ m/<groundspeak:placed_by>(.*?)<\/groundspeak:placed_by>/i ;
    return $1 ;
}

sub get_gcname {
    my $cache = shift ;
    $cache =~ /<name>(.*?)<\/name>/i ;
    return $1 ;
}

sub get_name {
    my $cache = shift ;
    $cache =~ m/<groundspeak:name>(.*?)<\/groundspeak:name>/i ;
    return $1 ;
}

sub get_size {
    my $cache = shift ;
    $cache =~ m/<groundspeak:container>(.*?)<\/groundspeak:container>/i ;
    return $1 ;
}

sub get_type {
    my $cache = shift ;
    $cache =~ m/<groundspeak:type>(.*?)<\/groundspeak:type>/i ;
    return "Tradi" if $1 =~ m/traditional/i ;
    return "Multi" if $1 =~ m/multi/i ;
    return "Mystery" if $1 =~ m/unknown/i ;
    return $1 ;
}

sub get_lat {
    my $cache = shift ;
    $cache =~ m/<wpt lat="(.*?)" lon=".*">/i ;
    return $1 ;
}

sub get_lon {
    my $cache = shift ;
    $cache =~ m/<wpt lat=".*" lon="(.*?)">/i ;
    return $1 ;
}

sub get_difficulty {
    my $cache = shift ;
    return $cache =~ m/<groundspeak:difficulty>(.*?)<\/groundspeak:difficulty>/i ;
    return $1 ;
}

sub get_terrain {
    my $cache = shift ;
    $cache =~ m/<groundspeak:terrain>(.*?)<\/groundspeak:terrain>/i ;
    return $1 ;
}

sub get_hint {
    my $cache = shift ;
    if ( $cache =~ m/<groundspeak:encoded_hints>(.*?)<\/groundspeak:encoded_hints>/i ) {
        return $1 ;
    }
    else {
        return "kein Hint" ;
    }

}

sub coords {
    my ( $lat, $lon ) = @_ ;
    my ( $deg_lat, $min_lat ) = ( int $lat, ($lat-int($lat))*60 ) ;
    my ( $deg_lon, $min_lon ) = ( int $lon, ($lon-int($lon))*60 ) ;
    return sprintf("N %02d° %.3f' E %03d° %.3f'", $deg_lat, $min_lat, $deg_lon, $min_lon) ;
}

my ( @gpxfiles, $gpxfile ) ;
if ( @ARGV > 0 ) {
    @gpxfiles = @ARGV ;
}
else {
    opendir THISDIR, "." or die "geht nicht $!" ;
    @gpxfiles = readdir THISDIR ;
}

my ( $cache, @caches ) ;
foreach $gpxfile ( @gpxfiles ) {
    if ( $gpxfile =~ m/\.gpx$/ ) {
        open GPXFILE, "$gpxfile" or die "geht nicht!\n" ;
        do {
            undef $/ ;
            while (<GPXFILE>) {
                push @caches, $_ =~ m/(<wpt.*?\/wpt>)/gsi ;
            }
        } ;
    }
}

# Alle bis auf eine Sortiermodus auskommentieren
# sortiere nach Cachename
# @caches = sort { get_name($a) cmp get_name($b) } @caches ;
# sortiere nach GC-Code
@caches = sort { get_gcname($a) cmp get_gcname($b) } @caches ;
# sortiere nach Owner
# @caches = sort { get_owner($a) cmp get_owner($b) } @caches ;
# sortiere nach Entfernung vom Referenzpunkt

foreach $cache ( @caches ) {
    my $text = $cachenote ;
    my $gcname = get_gcname($cache) ;
    my $name = get_name($cache) ;
    my $owner = get_owner($cache) ;
    my $type = get_type($cache) ;
    # die nächste Zeile auskommentieren wenn Multis auch in die Cachenote sollen
    next if $type =~ m/multi/i ;
    my $size = get_size($cache) ;
    my $difficulty = get_difficulty($cache) ;
    my $terrain = get_terrain($cache) ;
    my $coords = coords(get_lat($cache), get_lon($cache)) ;
    my $hint = get_hint($cache) ;
    $text =~ s/gcname/$gcname/ ;
    $text =~ s/name/$name/ ;
    $text =~ s/owner/$owner/ ;
    $text =~ s/type/$type/ ;
    $text =~ s/size/$size/ ;
    $text =~ s/difficulty/$difficulty/ ;
    $text =~ s/terrain/$terrain/ ;
    $text =~ s/coords/$coords/ ;
    $text =~ s/hint/$hint/ ;
    say $text ;
}

Ich habe das Skript cachenotes.pl genannt, wer es ausprobieren möchte kann es abspeichern und (unter Linux/Unix) mit dem Befehl
Code:
chmod 755 chachenotes.pl

ausführbar machen.
Um die Ausgabe als Text zu speichern, kann man sie in eine Textdatei umleiten, Beispiel
Code:
./cachenotes.pl > caches.txt

und das ganze dann ausdrucken. Das Skript läuft auch unter Windows wenn Perl installiert ist.

Vielleicht hilft es dem einen oder anderen.

Markus

_________________
An meinem Fahrrad fährt ein Travelbug von Cache zu Cache und auch sonst überall hin,
wer ihn sieht darf ihn loggen, das Fahrrad aber bitte stehen lassen ;-)


Nach oben
 Profil  
 
BeitragVerfasst: Fr 6. Jul 2012, 21:31 
Offline
Geocacher
Benutzeravatar

Registriert: Sa 29. Apr 2006, 20:50
Beiträge: 268
Ingress: Enlightened
+1


Nach oben
 Profil  
 
BeitragVerfasst: Sa 7. Jul 2012, 00:25 
Offline
Geomaster
Benutzeravatar

Registriert: So 25. Nov 2007, 09:58
Beiträge: 686
Wohnort: Bremen
intereressant. Werde ich testen. Ich halte von paperless auch nicht viel und arbeite auch mit kleinen Notitzen. Allerdings ist meine Art deutlich anders.

_________________
Bild Pfülmbüchsentraddy suchen... :dagegen:


Nach oben
 Profil  
 
BeitragVerfasst: Fr 25. Jan 2013, 12:52 
Offline
Geonewbie

Registriert: Fr 25. Jan 2013, 12:01
Beiträge: 6
Cool, muss ich auch ausprobieren.

Trotzt toller Geräte, finde ich auch Papier weiterhin wichtig. Geht auch viel schneller vor allem wenn es Kalt ist.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Impressum