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); }