Radreise-Wiki:Ini.pl: Unterschied zwischen den Versionen
Aus Radreise-Wiki
Jmages (Diskussion | Beiträge) |
Jmages (Diskussion | Beiträge) |
||
| (12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
'''ini.pl''' enthält die Pfade des Hauptverzeichnisses '''''Wiki-Content''''' und des Output-Verzeichnisses. In letzterem landen alle generierten Dateien (kmz-Files, Imagemaps und Kilometrierungen). | '''ini.pl''' enthält die Pfade des Hauptverzeichnisses '''''Wiki-Content''''' (''$baseDir'') und des Output-Verzeichnisses (''$outDir''). In letzterem landen alle generierten Dateien (kmz-Files, Imagemaps und Kilometrierungen). Ebenso müssen ''$username'' und ''$password'' an die lokalen Gegebenheiten angepasst werden. Das Output-Verzeichnis wird nicht automatisch angelegt. Des weiteren sind ein paar globale Encoding-Routinen und ein Filewriter im Skript enthalten. | ||
'''Quellcode des Skripts:''' | |||
<nowiki> | <nowiki> | ||
use strict; | |||
sub | my $baseDir = "../"; | ||
my $outDir = '../out'; | |||
my $encoding = 'utf-8'; # Unicode | |||
my $encAnsi = 'cp1252'; # Windows Ansi | |||
my $encOut = 'cp850' ; # DOS Shell | |||
} | |||
#====================================================== | |||
1; | # sub getIni | ||
</nowiki> | # sub saveFileIfChangedOrNew | ||
# sub encodePlaceNameURL | |||
# sub encodeRouteNameURL | |||
# sub get_routeFileName | |||
# sub get_trackfile | |||
# sub get_routefile | |||
# sub get_placemarks | |||
# sub get_placemarkData | |||
# sub get_lastPlacemarkData | |||
# sub get_geodaten | |||
# sub get_kilometrierung | |||
# sub getDistance { | |||
# sub getClosestPoint { | |||
#====================================================== | |||
#====================================================== | |||
# sub getIni | |||
#====================================================== | |||
sub getIni { | |||
my $username = "username"; | |||
my $password = "password"; | |||
return ($baseDir, $outDir, $username, $password, $encoding, $encAnsi, $encOut); | |||
} | |||
#====================================================== | |||
# sub saveFileIfChangedOrNew | |||
#====================================================== | |||
use Digest::MD5 qw(md5_hex); | |||
use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); | |||
sub saveFileIfChangedOrNew { | |||
my ($path, $fileName, $file, $kmz) = @_; | |||
my $exitCode = 0; | |||
if (open(FILE, "< $path$fileName")) { | |||
my $md5 = Digest::MD5->new; | |||
while (<FILE>) { | |||
$md5->add($_); | |||
} | |||
close(FILE); | |||
my $md5_old = $md5->hexdigest; | |||
$md5 = Digest::MD5->new; | |||
$md5->add($file); | |||
my $md5_new = $md5->hexdigest; | |||
unless ($md5_old eq $md5_new) { | |||
print encode $encOut, " *** Overwriting file $fileName ***\n"; | |||
open FT,"> $path$fileName"; | |||
print FT $file; | |||
close FT; | |||
$exitCode = 1; | |||
if ($kmz) { | |||
my $zip = Archive::Zip->new(); | |||
$zip->addFile("$path$fileName","doc.kml"); | |||
$fileName =~ s/\.kml/\.kmz/; | |||
unless ( $zip->writeToFileNamed("$outDir/$fileName") == AZ_OK ) { | |||
die 'write error'; | |||
} | |||
} | |||
} | |||
} else { | |||
print encode $encOut, " *** Creating new file $fileName ***\n"; | |||
open FT,"> $path$fileName"; | |||
print FT $file; | |||
close FT; | |||
$exitCode = 1; | |||
if ($kmz) { | |||
my $zip = Archive::Zip->new(); | |||
$zip->addFile("$path$fileName","doc.kml"); | |||
$fileName =~ s/\.kml/\.kmz/; | |||
unless ( $zip->writeToFileNamed("$outDir/$fileName") == AZ_OK ) { | |||
die 'write error'; | |||
} | |||
} | |||
} | |||
return $exitCode; | |||
} | |||
#====================================================== | |||
# sub encodePlaceNameURL | |||
# sub encodeRouteNameURL | |||
#====================================================== | |||
use URI::Escape qw( uri_escape_utf8 ); | |||
use CGI; my $cgi = new CGI; | |||
sub encodePlaceNameURL { | |||
my $placeNameURL = $cgi->escape($_[0]); | |||
$placeNameURL =~ s/\%20/\_/g; | |||
$placeNameURL =~ s/\%/\./g; | |||
return $placeNameURL; | |||
} | |||
sub encodeRouteNameURL { | |||
my $urlstring = uri_escape_utf8($_[0]); | |||
$urlstring =~ s/%20/\_/g; | |||
$urlstring =~ s/\(/%28/g; | |||
$urlstring =~ s/\)/%29/g; | |||
$urlstring =~ s/\'/%27/g; | |||
return $urlstring; | |||
} | |||
return 1; | |||
#====================================================== | |||
# sub get_routeFileName | |||
#====================================================== | |||
sub get_routeFileName { | |||
my $routeFileName = ""; | |||
my @parameters = @_; | |||
if ($#parameters != -1) { | |||
$routeFileName = join " ", @parameters; | |||
if ($routeFileName =~ / \($/) { | |||
$routeFileName .= "retour)"; | |||
} | |||
} else { | |||
my @content; | |||
open FIN, "$baseDir/RouteList.txt" or die "\n$! : $baseDir/RouteList.txt"; | |||
while (<FIN>) { push @content, decode $encoding, $_; } | |||
close (FIN); | |||
my @content_s = reverse sort @content; | |||
my ($dateTXT, $dateKML, $type, $name) = split " :: ", $content_s[0]; | |||
chomp $name; | |||
$routeFileName = $name; | |||
} | |||
my $routeFileName_e = encode $encAnsi, $routeFileName; | |||
return ($routeFileName, $routeFileName_e); | |||
} | |||
#====================================================== | |||
# sub get_trackfile | |||
#====================================================== | |||
sub get_trackfile { | |||
my $routeFilePath = shift; | |||
my $routeFileName = shift; | |||
print encode $encOut, "\nReading Trackfile: $routeFilePath/$routeFileName\n\n"; | |||
my $routeFileName_e = encode $encAnsi, $routeFileName; | |||
my $rawTrack; | |||
unless (open FILE, "$routeFilePath/$routeFileName_e.txt") { | |||
return "WARNING: No $routeFilePath/$routeFileName_e.txt"; | |||
} else { | |||
$rawTrack = <FILE>; | |||
close FILE; | |||
} | |||
my @rawTrack = split " ", $rawTrack; | |||
my @track = (); | |||
foreach (@rawTrack) { | |||
my ($lon, $lat, $alt) = split ","; | |||
my @zeile = ( $lat, $lon, $alt ); | |||
my $ref_zeile = \@zeile; | |||
push @track, $ref_zeile; | |||
} | |||
return (\@track, \@rawTrack); | |||
} | |||
#====================================================== | |||
# sub get_routefile | |||
#====================================================== | |||
sub get_routefile { | |||
my $routeFilePath = shift; | |||
my $routeFileName = shift; | |||
print encode $encOut, "\nReading Routefile: $routeFilePath/$routeFileName\n\n"; | |||
my $routeFileName_e = encode $encAnsi, $routeFileName; | |||
my $ucontent = ""; | |||
unless (open FILE, "$routeFilePath/$routeFileName_e.txt") { | |||
return "WARNING: No $routeFilePath/$routeFileName_e.txt"; | |||
} else { | |||
while (<FILE>) { $ucontent .= $_; } | |||
close FILE; | |||
} | |||
my $fileContent = decode ($encoding, $ucontent); | |||
my $pre_Roadbook; | |||
my $Roadbook; | |||
my $post_Roadbook; | |||
if ( $fileContent =~ /(.*?== Roadbook ==.*?)(===.*?)(\n== .*)/s ) { | |||
$pre_Roadbook = $1; | |||
$Roadbook = $2; | |||
$post_Roadbook = $3; | |||
} else { die "Wrong Roadbook Format\n"; } | |||
return ($fileContent, $pre_Roadbook, $Roadbook, $post_Roadbook); | |||
} | |||
#====================================================== | |||
# sub get_placemarks | |||
#====================================================== | |||
sub get_placemarks { | |||
my @Roadbook = @_; | |||
my @Placemarks = (); | |||
my $placemark = ""; | |||
my @PlacemarksRaw = (); | |||
my $placemarkRaw = ""; | |||
foreach my $line (@Roadbook) { | |||
if ($line =~ /^=== .* ===$/) { | |||
if ($placemark ne "") { | |||
push @Placemarks , $placemark; | |||
push @PlacemarksRaw, $placemarkRaw; | |||
} | |||
$placemarkRaw = "$line\n"; | |||
$placemark = $line ; | |||
} else { | |||
$placemarkRaw .= "$line\n"; | |||
$placemark .= $line ; | |||
} | |||
} | |||
push @Placemarks , $placemark; | |||
push @PlacemarksRaw, $placemarkRaw; | |||
return (\@PlacemarksRaw, \@Placemarks); | |||
} | |||
#====================================================== | |||
# sub get_placemarkData | |||
#====================================================== | |||
sub get_placemarkData { | |||
my $placemark = @_[0]; | |||
my $placeName; | |||
my $touriInfo; | |||
my $geodaten; | |||
my $roadInfo; | |||
my $kilometrierung; | |||
my $rest; | |||
if ($placemark =~ / | |||
^===\ (.*)\ ===\n | |||
(.*)$ | |||
/xs) { | |||
$placeName = $1; | |||
$rest = $2; | |||
} else { | |||
print "ERROR Wrong Format in PlaceName:\n$placemark\n"; | |||
return ("0"); | |||
} | |||
if ($rest =~ / | |||
^(.*)\n | |||
\{\{Geodaten\|([^\n]*)}}\n | |||
(.*)$ | |||
/xs) { | |||
$touriInfo = $1; | |||
$geodaten = $2; | |||
$rest = $3; | |||
} else { | |||
print "ERROR Wrong Format in Geodaten:\n$rest\n"; | |||
return ("0"); | |||
} | |||
if ($rest =~ / | |||
^(.*)\n | |||
\{\{(Kilometrierung[^\n]*)}}\n | |||
(.*)$ | |||
/xs) { | |||
$roadInfo = $1; | |||
$kilometrierung = $2; | |||
$rest = $3; | |||
} else { | |||
print "ERROR Wrong Format in Kilometrierung:\n$rest\n"; | |||
return ("0"); | |||
} | |||
return ($placeName, $touriInfo, $geodaten, $roadInfo, $kilometrierung, $rest); | |||
} | |||
#====================================================== | |||
# sub get_lastPlacemarkData | |||
#====================================================== | |||
sub get_lastPlacemarkData { | |||
my $placemark = @_[0]; | |||
my $placeName; | |||
my $touriInfo; | |||
my $geodaten; | |||
my $roadInfo; | |||
my $rest; | |||
if ($placemark =~ / | |||
^===\ (.*)\ ===\n | |||
(.*)$ | |||
/xs) { | |||
$placeName = $1; | |||
$rest = $2; | |||
} else { | |||
print "ERROR Wrong Format in PlaceName:\n$placemark\n"; | |||
return ("0"); | |||
} | |||
if ($rest =~ / | |||
^(.*)\n | |||
\{\{Geodaten\|([^\n]*)}}\n | |||
(.*)$ | |||
/xs) { | |||
$touriInfo = $1; | |||
$geodaten = $2; | |||
$roadInfo = $3; | |||
} else { | |||
print "ERROR Wrong Format in Geodaten:\n$rest\n"; | |||
return ("0"); | |||
} | |||
return ($placeName, $touriInfo, $geodaten, $roadInfo); | |||
} | |||
#====================================================== | |||
# sub get_geodaten | |||
#====================================================== | |||
sub get_geodaten { | |||
my $geodaten = shift; | |||
my $lat; | |||
my $lon; | |||
my $alt; | |||
my $info; | |||
if ($geodaten =~ /^([-]?\d+\.\d+)\|([-]?\d+\.\d+)\|([-]?\d+)\|([^\|]+)$/) { | |||
$lat = $1; | |||
$lon = $2; | |||
$alt = $3; | |||
$info = $4; | |||
} else { | |||
print "ERROR Wrong Format in Geodaten:\n$geodaten\n"; | |||
return ("0"); | |||
} | |||
return ($lat, $lon, $alt, $info); | |||
} | |||
#====================================================== | |||
# sub get_kilometrierung | |||
#====================================================== | |||
sub get_kilometrierung { | |||
my $kilometrierung = @_[0]; | |||
my $km; | |||
my $km_sum; | |||
my $hmup; | |||
my $hmup_sum; | |||
my $hmdn; | |||
my $hmdn_sum; | |||
if ($kilometrierung =~ /^KilometrierungHm6\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+)$/) { | |||
$km = $1; | |||
$hmup = $2; | |||
$hmdn = $3; | |||
$km_sum = $4; | |||
$hmup_sum = $5; | |||
$hmdn_sum = $6; | |||
} elsif ($kilometrierung =~ /^KilometrierungHm\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+)$/) { | |||
$km = $1; | |||
$km_sum = $2; | |||
$hmup = $3; | |||
$hmdn = $4; | |||
$hmup_sum = ""; | |||
$hmdn_sum = ""; | |||
} elsif ($kilometrierung =~ /^Kilometrierung\|([^\|]+)\|([^\|]+)$/) { | |||
$km = $1; | |||
$km_sum = $2; | |||
$hmup = ""; | |||
$hmdn = ""; | |||
$hmup_sum = ""; | |||
$hmdn_sum = ""; | |||
} else { | |||
print "ERROR Wrong Format in Kilometrierung:\n$kilometrierung\n"; | |||
return ("x"); | |||
} | |||
return ($km, $km_sum, $hmup, $hmdn, $hmup_sum, $hmdn_sum); | |||
} | |||
sub getDistance { | |||
use POSIX qw(acos); | |||
my ($tp1_lat, $tp1_lon, $tp2_lat, $tp2_lon) = @_; | |||
my $PI = 3.1415926; | |||
my $lat1 = $tp1_lat / 180 * $PI; | |||
my $lon1 = $tp1_lon / 180 * $PI; | |||
my $lat2 = $tp2_lat / 180 * $PI; | |||
my $lon2 = $tp2_lon / 180 * $PI; | |||
my $val = sin($lat1) * sin($lat2) + | |||
cos($lat1) * cos($lat2) * | |||
cos($lon2-$lon1); | |||
if ($val > +1) { | |||
$val = +1; | |||
#print " ACOS-Error: $tp1_lat,$tp1_lon !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; | |||
} | |||
if ($val < -1) { | |||
$val = -1; | |||
#print " ACOS-Error: $tp1_lat,$tp1_lon !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; | |||
} | |||
my $dist = acos($val) * 6378.137; # radius of the equator in km | |||
#if (Double.isNaN(dist)) dist = 0; | |||
return $dist*1000; | |||
} | |||
#========================================================== | |||
sub getClosestPoint { | |||
my ($tp_lat, $tp_lon, $track) = @_; | |||
my @track = @$track; | |||
my $minDist = 111111111; | |||
my $point = -1; | |||
for (my $i = 0; $i <= $#track ; $i++) { | |||
my $dist = getDistance ( $track[$i][0], $track[$i][1], $tp_lat, $tp_lon ); | |||
if ($dist < $minDist) { | |||
$minDist = $dist; | |||
$point = $i; | |||
} | |||
} | |||
my $dist_s = sprintf "%.0f", $minDist; | |||
return ($point, $dist_s); | |||
} | |||
</nowiki> | |||
[[Kategorie: Verwaltungs-Software]] | |||
Aktuelle Version vom 12. Januar 2018, 18:30 Uhr
ini.pl enthält die Pfade des Hauptverzeichnisses Wiki-Content ($baseDir) und des Output-Verzeichnisses ($outDir). In letzterem landen alle generierten Dateien (kmz-Files, Imagemaps und Kilometrierungen). Ebenso müssen $username und $password an die lokalen Gegebenheiten angepasst werden. Das Output-Verzeichnis wird nicht automatisch angelegt. Des weiteren sind ein paar globale Encoding-Routinen und ein Filewriter im Skript enthalten.
Quellcode des Skripts:
use strict;
my $baseDir = "../";
my $outDir = '../out';
my $encoding = 'utf-8'; # Unicode
my $encAnsi = 'cp1252'; # Windows Ansi
my $encOut = 'cp850' ; # DOS Shell
#======================================================
# sub getIni
# sub saveFileIfChangedOrNew
# sub encodePlaceNameURL
# sub encodeRouteNameURL
# sub get_routeFileName
# sub get_trackfile
# sub get_routefile
# sub get_placemarks
# sub get_placemarkData
# sub get_lastPlacemarkData
# sub get_geodaten
# sub get_kilometrierung
# sub getDistance {
# sub getClosestPoint {
#======================================================
#======================================================
# sub getIni
#======================================================
sub getIni {
my $username = "username";
my $password = "password";
return ($baseDir, $outDir, $username, $password, $encoding, $encAnsi, $encOut);
}
#======================================================
# sub saveFileIfChangedOrNew
#======================================================
use Digest::MD5 qw(md5_hex);
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
sub saveFileIfChangedOrNew {
my ($path, $fileName, $file, $kmz) = @_;
my $exitCode = 0;
if (open(FILE, "< $path$fileName")) {
my $md5 = Digest::MD5->new;
while (<FILE>) {
$md5->add($_);
}
close(FILE);
my $md5_old = $md5->hexdigest;
$md5 = Digest::MD5->new;
$md5->add($file);
my $md5_new = $md5->hexdigest;
unless ($md5_old eq $md5_new) {
print encode $encOut, " *** Overwriting file $fileName ***\n";
open FT,"> $path$fileName";
print FT $file;
close FT;
$exitCode = 1;
if ($kmz) {
my $zip = Archive::Zip->new();
$zip->addFile("$path$fileName","doc.kml");
$fileName =~ s/\.kml/\.kmz/;
unless ( $zip->writeToFileNamed("$outDir/$fileName") == AZ_OK ) {
die 'write error';
}
}
}
} else {
print encode $encOut, " *** Creating new file $fileName ***\n";
open FT,"> $path$fileName";
print FT $file;
close FT;
$exitCode = 1;
if ($kmz) {
my $zip = Archive::Zip->new();
$zip->addFile("$path$fileName","doc.kml");
$fileName =~ s/\.kml/\.kmz/;
unless ( $zip->writeToFileNamed("$outDir/$fileName") == AZ_OK ) {
die 'write error';
}
}
}
return $exitCode;
}
#======================================================
# sub encodePlaceNameURL
# sub encodeRouteNameURL
#======================================================
use URI::Escape qw( uri_escape_utf8 );
use CGI; my $cgi = new CGI;
sub encodePlaceNameURL {
my $placeNameURL = $cgi->escape($_[0]);
$placeNameURL =~ s/\%20/\_/g;
$placeNameURL =~ s/\%/\./g;
return $placeNameURL;
}
sub encodeRouteNameURL {
my $urlstring = uri_escape_utf8($_[0]);
$urlstring =~ s/%20/\_/g;
$urlstring =~ s/\(/%28/g;
$urlstring =~ s/\)/%29/g;
$urlstring =~ s/\'/%27/g;
return $urlstring;
}
return 1;
#======================================================
# sub get_routeFileName
#======================================================
sub get_routeFileName {
my $routeFileName = "";
my @parameters = @_;
if ($#parameters != -1) {
$routeFileName = join " ", @parameters;
if ($routeFileName =~ / \($/) {
$routeFileName .= "retour)";
}
} else {
my @content;
open FIN, "$baseDir/RouteList.txt" or die "\n$! : $baseDir/RouteList.txt";
while (<FIN>) { push @content, decode $encoding, $_; }
close (FIN);
my @content_s = reverse sort @content;
my ($dateTXT, $dateKML, $type, $name) = split " :: ", $content_s[0];
chomp $name;
$routeFileName = $name;
}
my $routeFileName_e = encode $encAnsi, $routeFileName;
return ($routeFileName, $routeFileName_e);
}
#======================================================
# sub get_trackfile
#======================================================
sub get_trackfile {
my $routeFilePath = shift;
my $routeFileName = shift;
print encode $encOut, "\nReading Trackfile: $routeFilePath/$routeFileName\n\n";
my $routeFileName_e = encode $encAnsi, $routeFileName;
my $rawTrack;
unless (open FILE, "$routeFilePath/$routeFileName_e.txt") {
return "WARNING: No $routeFilePath/$routeFileName_e.txt";
} else {
$rawTrack = <FILE>;
close FILE;
}
my @rawTrack = split " ", $rawTrack;
my @track = ();
foreach (@rawTrack) {
my ($lon, $lat, $alt) = split ",";
my @zeile = ( $lat, $lon, $alt );
my $ref_zeile = \@zeile;
push @track, $ref_zeile;
}
return (\@track, \@rawTrack);
}
#======================================================
# sub get_routefile
#======================================================
sub get_routefile {
my $routeFilePath = shift;
my $routeFileName = shift;
print encode $encOut, "\nReading Routefile: $routeFilePath/$routeFileName\n\n";
my $routeFileName_e = encode $encAnsi, $routeFileName;
my $ucontent = "";
unless (open FILE, "$routeFilePath/$routeFileName_e.txt") {
return "WARNING: No $routeFilePath/$routeFileName_e.txt";
} else {
while (<FILE>) { $ucontent .= $_; }
close FILE;
}
my $fileContent = decode ($encoding, $ucontent);
my $pre_Roadbook;
my $Roadbook;
my $post_Roadbook;
if ( $fileContent =~ /(.*?== Roadbook ==.*?)(===.*?)(\n== .*)/s ) {
$pre_Roadbook = $1;
$Roadbook = $2;
$post_Roadbook = $3;
} else { die "Wrong Roadbook Format\n"; }
return ($fileContent, $pre_Roadbook, $Roadbook, $post_Roadbook);
}
#======================================================
# sub get_placemarks
#======================================================
sub get_placemarks {
my @Roadbook = @_;
my @Placemarks = ();
my $placemark = "";
my @PlacemarksRaw = ();
my $placemarkRaw = "";
foreach my $line (@Roadbook) {
if ($line =~ /^=== .* ===$/) {
if ($placemark ne "") {
push @Placemarks , $placemark;
push @PlacemarksRaw, $placemarkRaw;
}
$placemarkRaw = "$line\n";
$placemark = $line ;
} else {
$placemarkRaw .= "$line\n";
$placemark .= $line ;
}
}
push @Placemarks , $placemark;
push @PlacemarksRaw, $placemarkRaw;
return (\@PlacemarksRaw, \@Placemarks);
}
#======================================================
# sub get_placemarkData
#======================================================
sub get_placemarkData {
my $placemark = @_[0];
my $placeName;
my $touriInfo;
my $geodaten;
my $roadInfo;
my $kilometrierung;
my $rest;
if ($placemark =~ /
^===\ (.*)\ ===\n
(.*)$
/xs) {
$placeName = $1;
$rest = $2;
} else {
print "ERROR Wrong Format in PlaceName:\n$placemark\n";
return ("0");
}
if ($rest =~ /
^(.*)\n
\{\{Geodaten\|([^\n]*)}}\n
(.*)$
/xs) {
$touriInfo = $1;
$geodaten = $2;
$rest = $3;
} else {
print "ERROR Wrong Format in Geodaten:\n$rest\n";
return ("0");
}
if ($rest =~ /
^(.*)\n
\{\{(Kilometrierung[^\n]*)}}\n
(.*)$
/xs) {
$roadInfo = $1;
$kilometrierung = $2;
$rest = $3;
} else {
print "ERROR Wrong Format in Kilometrierung:\n$rest\n";
return ("0");
}
return ($placeName, $touriInfo, $geodaten, $roadInfo, $kilometrierung, $rest);
}
#======================================================
# sub get_lastPlacemarkData
#======================================================
sub get_lastPlacemarkData {
my $placemark = @_[0];
my $placeName;
my $touriInfo;
my $geodaten;
my $roadInfo;
my $rest;
if ($placemark =~ /
^===\ (.*)\ ===\n
(.*)$
/xs) {
$placeName = $1;
$rest = $2;
} else {
print "ERROR Wrong Format in PlaceName:\n$placemark\n";
return ("0");
}
if ($rest =~ /
^(.*)\n
\{\{Geodaten\|([^\n]*)}}\n
(.*)$
/xs) {
$touriInfo = $1;
$geodaten = $2;
$roadInfo = $3;
} else {
print "ERROR Wrong Format in Geodaten:\n$rest\n";
return ("0");
}
return ($placeName, $touriInfo, $geodaten, $roadInfo);
}
#======================================================
# sub get_geodaten
#======================================================
sub get_geodaten {
my $geodaten = shift;
my $lat;
my $lon;
my $alt;
my $info;
if ($geodaten =~ /^([-]?\d+\.\d+)\|([-]?\d+\.\d+)\|([-]?\d+)\|([^\|]+)$/) {
$lat = $1;
$lon = $2;
$alt = $3;
$info = $4;
} else {
print "ERROR Wrong Format in Geodaten:\n$geodaten\n";
return ("0");
}
return ($lat, $lon, $alt, $info);
}
#======================================================
# sub get_kilometrierung
#======================================================
sub get_kilometrierung {
my $kilometrierung = @_[0];
my $km;
my $km_sum;
my $hmup;
my $hmup_sum;
my $hmdn;
my $hmdn_sum;
if ($kilometrierung =~ /^KilometrierungHm6\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+)$/) {
$km = $1;
$hmup = $2;
$hmdn = $3;
$km_sum = $4;
$hmup_sum = $5;
$hmdn_sum = $6;
} elsif ($kilometrierung =~ /^KilometrierungHm\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|]+)$/) {
$km = $1;
$km_sum = $2;
$hmup = $3;
$hmdn = $4;
$hmup_sum = "";
$hmdn_sum = "";
} elsif ($kilometrierung =~ /^Kilometrierung\|([^\|]+)\|([^\|]+)$/) {
$km = $1;
$km_sum = $2;
$hmup = "";
$hmdn = "";
$hmup_sum = "";
$hmdn_sum = "";
} else {
print "ERROR Wrong Format in Kilometrierung:\n$kilometrierung\n";
return ("x");
}
return ($km, $km_sum, $hmup, $hmdn, $hmup_sum, $hmdn_sum);
}
sub getDistance {
use POSIX qw(acos);
my ($tp1_lat, $tp1_lon, $tp2_lat, $tp2_lon) = @_;
my $PI = 3.1415926;
my $lat1 = $tp1_lat / 180 * $PI;
my $lon1 = $tp1_lon / 180 * $PI;
my $lat2 = $tp2_lat / 180 * $PI;
my $lon2 = $tp2_lon / 180 * $PI;
my $val = sin($lat1) * sin($lat2) +
cos($lat1) * cos($lat2) *
cos($lon2-$lon1);
if ($val > +1) {
$val = +1;
#print " ACOS-Error: $tp1_lat,$tp1_lon !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
}
if ($val < -1) {
$val = -1;
#print " ACOS-Error: $tp1_lat,$tp1_lon !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
}
my $dist = acos($val) * 6378.137; # radius of the equator in km
#if (Double.isNaN(dist)) dist = 0;
return $dist*1000;
}
#==========================================================
sub getClosestPoint {
my ($tp_lat, $tp_lon, $track) = @_;
my @track = @$track;
my $minDist = 111111111;
my $point = -1;
for (my $i = 0; $i <= $#track ; $i++) {
my $dist = getDistance ( $track[$i][0], $track[$i][1], $tp_lat, $tp_lon );
if ($dist < $minDist) {
$minDist = $dist;
$point = $i;
}
}
my $dist_s = sprintf "%.0f", $minDist;
return ($point, $dist_s);
}