Radreise-Wiki:Overview.pl: Unterschied zwischen den Versionen
Aus Radreise-Wiki
Jmages (Diskussion | Beiträge) |
Jmages (Diskussion | Beiträge) |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 9: | Zeile 9: | ||
# Default Settings | # Default Settings | ||
push @INC, '.'; | |||
require "ini.pl"; | require "ini.pl"; | ||
my ($baseDir, $outDir, $username, $password, $encoding, $encAnsi, $encOut) = getIni(); | my ($baseDir, $outDir, $username, $password, $encoding, $encAnsi, $encOut) = getIni(); | ||
Zeile 85: | Zeile 86: | ||
if ($content !~ / | if ($content !~ / | ||
{{TOC_Radfernweg}}\n | \{\{TOC_Radfernweg}}\n | ||
.* | .* | ||
\n==\ Roadbook\ ==\n | \n==\ Roadbook\ ==\n | ||
Zeile 300: | Zeile 301: | ||
# Geodata within the Placemark | # Geodata within the Placemark | ||
} elsif ($place and ($line =~ /^{{Geodaten\|(.*)}}$/)) { | } elsif ($place and ($line =~ /^\{\{Geodaten\|(.*)}}$/)) { | ||
$geo = 1; | $geo = 1; | ||
Zeile 317: | Zeile 318: | ||
# Kilometrierung within Placemark | # Kilometrierung within Placemark | ||
} elsif ($place and ($line =~ /^{{Kilometrierung[Hm6]*\|(.*)}}$/)) { | } elsif ($place and ($line =~ /^\{\{Kilometrierung[Hm6]*\|(.*)}}$/)) { | ||
if (not $geo) { | if (not $geo) { | ||
Zeile 485: | Zeile 486: | ||
} | } | ||
</nowiki> | </nowiki> | ||
[[Kategorie: Verwaltungs-Software]] |
Aktuelle Version vom 12. Januar 2018, 18:37 Uhr
Das Perl-Skript overview.pl generiert ein KML-File in dem alle Tracks des Hauptnetzes enthalten sind. Die Tracks werden ohne Punktereduzierung übernommen, sodaß die Datei recht umfangreich wird. Von GoogleEarth kann sie jedoch noch verarbeitet werden. Mit der Overview.kml Datei kann bei neue Strecken gut überprüft werden, ob sie ins Hauptnetz passen und wie die Anschlüsse zu legen sind.
Quellcode des Skripts:
use strict; use Encode qw(encode decode); # Default Settings push @INC, '.'; require "ini.pl"; my ($baseDir, $outDir, $username, $password, $encoding, $encAnsi, $encOut) = getIni(); my $selectedType; if ($ARGV[0]) { $selectedType = $ARGV[0]; } else { $selectedType = "H"; } # ================== # Reading RouteList my @routeList; open FIN, "$baseDir/RouteList.txt" or die "$! : $baseDir/RouteList.txt"; while (<FIN>) { push @routeList, decode $encoding, $_; } close (FIN); my @routeFile = (); my @Fluss_Radfernweg = (); my @Anderer_Radfernweg = (); my @Querverbindung = (); my @Radweit_Strecke = (); my @Regionaler_Radwanderweg = (); my $routeName; my $routeFileName; my $routeURL; my $category; my $counter; foreach my $line (@routeList) { (my $dateTXT, my $dateKML, my $type, $routeName) = split " :: ", $line; chomp($routeName); if ($type eq $selectedType) { $counter ++; $routeFileName = encode $encAnsi, $routeName; $routeURL = encodeRouteNameURL($routeFileName); # ================== # Reading Trackfile print encode $encOut, "Reading Trackfile : $routeFileName\n"; open FIN, "$baseDir/tracks/$routeFileName.txt" or die "$! : $baseDir/tracks/$routeFileName.txt"; my $track = <FIN>; close (FIN); # ================= # Reading Textfile print encode $encOut, "Reading Textfile : $routeFileName\n"; my $content; open FILE, "$baseDir/text/$routeFileName.txt" or die "$baseDir/text/$routeFileName.txt: $!"; while (<FILE>) { $content .= decode $encoding, $_; } close FILE; # ============= # Check Layout if ($content !~ / \{\{TOC_Radfernweg}}\n .* \n==\ Roadbook\ ==\n .* \n==\ GPS-Tracks\ ==\n .* \[\[Kategorie:\s*( Fluss-Radfernweg| Anderer\ Radfernweg| Querverbindung| Radweit-Strecke| Direktverbindung| Regionaler\ Radwanderweg| Routenplaner\ Testroute| Radreise| Fernroute| Streckenvorschlag| Stadtrundfahrt ) /xs) { print encode $encOut, "Chapters in $routeName are not correct!\n"; exit(1); } $category = $1; if (($category eq "Regionaler Radwanderweg") or ($category eq "Streckenvorschlag") or ($category eq "Stadtrundfahrt") or ($category eq "Radreise") or ($category eq "Radweit-Strecke") or ($category eq "Fernroute") ) { $category = "Anderer Radfernweg"; } # ============= # Get Roadbook my $pre_Roadbook; my $Roadbook; my $post_Roadbook; if ( $content =~ /(.*?== Roadbook ==.*?)(===.*?)(\n== .*)/s ) { $pre_Roadbook = $1; $Roadbook = $2; $post_Roadbook = $3; } else { die "Wrong Roadbook Format\n"; } my @Roadbook = split "\n", $Roadbook; # =============== # Get Placemarks my @content = split "\n", $content; @routeFile = (); push @routeFile, " <name>$routeName</name>\n"; push @routeFile, " <Metadata>\n"; push @routeFile, " <![CDATA[<!--$routeURL-->]]>\n"; push @routeFile, " </Metadata>\n"; push @routeFile, " <open>0</open>\n"; push @routeFile, " <Placemark>\n"; push @routeFile, " <name>$routeName GPS-Track</name>\n"; push @routeFile, " <description>\n"; push @routeFile, " <![CDATA[<a href=\"http://radreise-wiki.de/$routeURL\">Wiki</a>]]> \n"; push @routeFile, " </description>\n"; push @routeFile, " <Style>\n"; push @routeFile, " <LineStyle>\n"; push @routeFile, " <color>ffff00ff</color>\n"; push @routeFile, " <width>2</width>\n"; push @routeFile, " </LineStyle>\n"; push @routeFile, " </Style>\n"; push @routeFile, " <LineString>\n"; push @routeFile, " <tessellate>1</tessellate>\n"; push @routeFile, " <coordinates>\n"; push @routeFile, " $track\n"; push @routeFile, " </coordinates>\n"; push @routeFile, " </LineString>\n"; push @routeFile, " </Placemark>\n"; push @routeFile, " <Folder>\n"; push @routeFile, " <name>Orte</name>\n"; push @routeFile, " <open>0</open>\n"; my $roadBook = 0; my $place = 0; my $touri = 0; my $geo = 0; my $lon = 0; my $lat = 0; my $alt = 0; my $road = 0; my $kilo = 0; my $placeName = ""; my %placeName = (); my $touriInfo = ""; my $geoData = ""; my $roadInfo = ""; my $kilometer = ""; foreach my $line (@content) { # Last Placemark is finished, Roadbook is finished if (($roadBook) and ($line =~ /^== .* ==$/)) { # Status-Übersicht if ($touriInfo ne "") { $touri = 1; } if ($roadInfo ne "") { $road = 1; } my $placeNameURL = encodePlaceNameURL($placeName); if ($placeName{$placeName} > 1) { $placeNameURL .= "_$placeName{$placeName}"; } push @routeFile, " <Placemark>\n"; push @routeFile, " <name>$placeName</name>\n"; push @routeFile, " <visibility>0</visibility>\n"; push @routeFile, " <description>\n"; push @routeFile, " <![CDATA[<a id=\"$touri-$road\" href=\"http://radreise-wiki.de/$routeURL#$placeNameURL\">$routeName</a>]]> \n"; push @routeFile, " </description>\n"; push @routeFile, " <Point>\n"; push @routeFile, " <coordinates>\n"; push @routeFile, " $lon,$lat,$alt\n"; push @routeFile, " </coordinates>\n"; push @routeFile, " </Point>\n"; push @routeFile, " </Placemark>\n"; $roadBook = 0; $place = 0; $touri = 0; $geo = 0; $lon = 0; $lat = 0; $alt = 0; $road = 0; $kilo = 0; $placeName = ""; %placeName = (); $touriInfo = ""; $geoData = ""; $roadInfo = ""; $kilometer = ""; # Start of Roadbook } elsif ($line =~ /^== Roadbook ==$/) { $roadBook = 1; # A new Place within the Roadbook } elsif ($roadBook and ($line =~ /^=== (.*) ===$/)) { if ($place and not $kilo) { print " No Kilometers: $routeName :: $placeName\n"; #exit; } # Save previous place if ($place) { # Status-Übersicht if ($touriInfo ne "") { $touri = 1; } if ($roadInfo ne "") { $road = 1; } my $placeNameURL = encodePlaceNameURL($placeName); if ($placeName{$placeName} > 1) { $placeNameURL .= "_$placeName{$placeName}"; } push @routeFile, " <Placemark>\n"; push @routeFile, " <name>$placeName</name>\n"; push @routeFile, " <visibility>0</visibility>\n"; push @routeFile, " <description>\n"; push @routeFile, " <![CDATA[<a id=\"$touri-$road\" href=\"http://radreise-wiki.de/$routeURL#$placeNameURL\">$routeName</a>]]> \n"; push @routeFile, " </description>\n"; push @routeFile, " <Point>\n"; push @routeFile, " <coordinates>\n"; push @routeFile, " $lon,$lat,$alt\n"; push @routeFile, " </coordinates>\n"; push @routeFile, " </Point>\n"; push @routeFile, " </Placemark>\n"; } $place = 1; $touri = 0; $geo = 0; $lon = 0; $lat = 0; $alt = 0; $road = 0; $kilo = 0; $placeName = $1; if (defined $placeName{$placeName}) { $placeName{$placeName}++; } else { $placeName{$placeName} = 1; } $touriInfo = ""; $geoData = ""; $roadInfo = ""; $kilometer = ""; # Geodata within the Placemark } elsif ($place and ($line =~ /^\{\{Geodaten\|(.*)}}$/)) { $geo = 1; $geoData = $1; if ($geoData =~ /^([-]?\d+\.\d+)\|([-]?\d+\.\d+)\|([-]?\d+)\|([^\|]+)$/) { $lat = $1; $lon = $2; $alt = $3; } else { print "Error in Geodata: $geoData\n"; exit; } # Kilometrierung within Placemark } elsif ($place and ($line =~ /^\{\{Kilometrierung[Hm6]*\|(.*)}}$/)) { if (not $geo) { print "No Coordinates: $routeName :: $placeName\n"; exit; } if ($kilo) { print " Multiple Kilometers: $routeName :: $placeName\n"; #exit; } $kilo = 1; $kilometer = $1; # Empty Line } elsif ($line =~ /^\s*$/) { } elsif ($line =~ /<br style="clear:both" \/>/) { } elsif ($line =~ /\[\[Bild/) { } elsif ($place and not $geo and not $kilo) { $touriInfo .= "$line\n"; } elsif ($place and $geo and not $kilo) { $roadInfo .= "$line\n"; } } &saveRouteFile; print "\n"; } # if ($type eq "H") { } # foreach my $line (@routeList) { print "$counter Files read.\n\n"; # ============================== # Generieren des Overview-Files print "Saving Overview.kml File\n"; my @rfwAllFile = (); push @rfwAllFile, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; push @rfwAllFile, "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n"; push @rfwAllFile, "<Document>\n"; push @rfwAllFile, " <name>Radfernwege im Radreise-Wiki</name>\n"; push @rfwAllFile, " <open>1</open>\n"; push @rfwAllFile, " <Folder>\n"; push @rfwAllFile, " <name>Fluss-Radfernweg</name>\n"; push @rfwAllFile, " <open>0</open>\n"; push @rfwAllFile, @Fluss_Radfernweg; push @rfwAllFile, " </Folder>\n"; push @rfwAllFile, " <Folder>\n"; push @rfwAllFile, " <name>Anderer Radfernweg</name>\n"; push @rfwAllFile, " <open>0</open>\n"; push @rfwAllFile, @Anderer_Radfernweg; push @rfwAllFile, " </Folder>\n"; push @rfwAllFile, " <Folder>\n"; push @rfwAllFile, " <name>Querverbindung</name>\n"; push @rfwAllFile, " <open>0</open>\n"; push @rfwAllFile, @Querverbindung; push @rfwAllFile, " </Folder>\n"; push @rfwAllFile, " <Folder>\n"; push @rfwAllFile, " <name>Direktverbindung</name>\n"; push @rfwAllFile, " <open>0</open>\n"; push @rfwAllFile, @Radweit_Strecke; push @rfwAllFile, " </Folder>\n"; push @rfwAllFile, "</Document>\n"; push @rfwAllFile, "</kml>\n"; my $content = ""; foreach my $line (@rfwAllFile) { $content .= $line; } &saveFileIfChangedOrNew ("$baseDir/", "Overview.kml", encode ($encoding, $content), 1); exit(0); #========================================================== #========================================================== sub saveRouteFile { if ($routeName ne "") { push @routeFile, " </Folder>\n"; my @routeFileAll = (); push @routeFileAll, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; push @routeFileAll, "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n"; push @routeFileAll, "<Document>\n"; push @routeFileAll, @routeFile; push @routeFileAll, "</Document>\n"; push @routeFileAll, "</kml>\n"; my $content = ""; foreach my $line (@routeFileAll) { $content .= $line; } $content =~ s/id="0-0" //gs; $content =~ s/id="0-1" //gs; $content =~ s/id="1-0" //gs; $content =~ s/id="1-1" //gs; print encode $encOut, "Saving KML-File : $routeName\n"; &saveFileIfChangedOrNew ("$baseDir/kml/", "$routeFileName.kml", encode ($encoding, $content), 1); if ($category eq "Fluss-Radfernweg") { push @Fluss_Radfernweg, " <Folder>\n"; push @Fluss_Radfernweg, @routeFile; push @Fluss_Radfernweg, " </Folder>\n"; } elsif ($category eq "Anderer Radfernweg") { push @Anderer_Radfernweg, " <Folder>\n"; push @Anderer_Radfernweg, @routeFile; push @Anderer_Radfernweg, " </Folder>\n"; } elsif ($category eq "Querverbindung") { push @Querverbindung, " <Folder>\n"; push @Querverbindung, @routeFile; push @Querverbindung, " </Folder>\n"; } elsif ($category eq "Direktverbindung") { push @Radweit_Strecke, " <Folder>\n"; push @Radweit_Strecke, @routeFile; push @Radweit_Strecke, " </Folder>\n"; } elsif ($category eq "Regionaler Radwanderweg") { @Regionaler_Radwanderweg = (); } elsif ($category eq "Routenplaner Testroute") { # do nothing } else { print "Error: No matching Category: $category\n"; exit; } } }