Ich hab mal was ausprobiert.
Das folgende Perlskript erstellt aus beliebig vielen PocketQueries eine neue GPX-Datei namens "schnittmenge.gpx". Diese enthält nur die Caches, die in allen Pocketqueries enthalten sind.
Code:
#!/usr/bin/perl
use strict ;
use warnings ;
use v5.10 ;
sub get_gcname {
my $cache = shift ;
$cache =~ /<name>(.*?)<\/name>/i ;
return $1 ;
}
open FIRST, "$ARGV[0]" or die "geht nicht $!" ;
my $header ;
do {
undef $/ ;
$header = <FIRST>;
$header =~ s/<wpt.*//s ;
} ;
open NEWPQ, ">schnittmenge.gpx" or die "geht nicht $!" ;
print NEWPQ $header ;
my $numOfPQs = @ARGV ;
my ( $pq, $cache, @caches, %caches ) ;
foreach $pq ( @ARGV ) {
open PQUERY, "$pq" or die "geht nicht $!" ;
do {
undef $/ ;
undef @caches ;
while (<PQUERY>) {
push @caches, $_ =~ m/(<wpt.*?\/wpt>)/gsi ;
}
} ;
foreach $cache (@caches) {
$caches{ get_gcname($cache) }++ ;
if ( $caches{ get_gcname($cache) } == $numOfPQs ) {
print NEWPQ $cache ;
}
}
}
print NEWPQ "\n<\/gpx>" ;
close NEWPQ ;
close PQUERY ;
foreach $cache ( keys %caches ) {
say $cache if $caches{ $cache } == $numOfPQs ;
}
Unter Linux abspeichern und ausführbar machen. Unter Windows läuft es wenn die Datei auf .pl endet und Perl installiert ist. Ihr müsst nur alle Pocketqueries als Argumente auf der Kommandozeile angeben. Beispiel: (das Skript heißt bei mir "schnitt.pl")
Code:
./schnitt.pl 737888.gpx 39938.gpx 9389920.gpx
Für die Frage hier im Thread bedeutet das, man braucht von allen Mitcachern ein aktuelles Pocketquery mit den Caches (aus der vorgesehenen Region), die derjenige noch nicht hat bzw machen möchte.
Das neue Pocketquerie ist im Prinzip nix anderes, als das bereinigte erste PQ, allerdings mit neuem Namen. Dieses neue PQ kann man sich z.B. mit qlandkartgt ansehen.
Markus