--- gobook.perl 2017/07/15 00:04:02 3.4 +++ gobook.perl 2013/12/31 03:47:23 3.0 @@ -1,26 +1,22 @@ #! /usr/bin/perl -w -# $Id: gobook.perl,v 3.4 2017/07/15 00:04:02 philip Exp $ use XML::Simple; use strict; use PostScript::Simple; use Text::Wrap; $Text::Wrap::columns = 30; -#my $strips; +my $strips; -#my $xml = "OmLand.xml"; -#if ( defined $xml ){ -# $strips = XMLin($xml, KeyAttr => {strip => 'id'}); -#} - -my $strips = XMLin('OmLand.gpx'); - -# create a new PostScript object; +my $xml = "OmLand.xml"; +if ( defined $xml ){ + $strips = XMLin($xml, KeyAttr => {strip => 'id'}); +} -my $p = new PostScript::Simple(papersize => "A5", - colour => 1, - eps => 0, - units => "mm"); +# create a new PostScript object +my $p = new PostScript::Simple(papersize => "A5", + colour => 1, + eps => 0, + units => "mm",); # co-ords are horizontal, vertical. from bottom left corner. 148 x 210 @@ -57,7 +53,7 @@ $p->setcolour(60,28,0); $p->text(35,175, "Land-Out Guide"); $p->setfont("Helvetica", 17); $p->setcolour("white"); -$p->text(12,52, "5th Edition 2017"); +$p->text(12,52, "3rd Edition 2013"); $p->newpage; # Contents @@ -100,9 +96,11 @@ $p->text($t1,$v, "Text by Phil Plane and $v -= $ls; $p->text($t1,$v, "Copyright GlideOmarama.com 2013."); $v -= $ls; -$p->text($t1,$v, "First Edition published November 2007."); +$p->text($t1,$v, "First Edition published November 2007. "); $v -= $ls; -$p->text($t1,$v, "Fifth Edition published February 2017."); +$p->text($t1,$v, "Second Edition published November 2008. "); +$v -= $ls; +$p->text($t1,$v, "Third Edition published November 2013. "); $p->text(70,5, "(" . $pn++ . ")"); my $welcome = q{Produced for Omarama based glider pilots to assist safe emergency landings and satisfactory retrieves, this Guide and the associated South Island Gliding Maps (SIGMap) have been nearly 4 years in the making. Special thanks to Phil Plane, Chris Streat, Chris Rudge, Malcolm Walls and posthumously to Richard Halstead who started it all. @@ -446,36 +444,36 @@ $p->text(70,5, "(" . $pn++ . ")"); # Start the strip pages with pictures: -foreach my $stripnum ( sort keys %{$strips->{'wpt'}} ){ - if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{gobook} eq "yes" ){ - $strips{$strips->{'wpt'}->{$stripnum}->{'desc'}} = $stripnum; +foreach my $stripnum ( sort keys %{$strips->{strip}} ){ + if ( $strips->{strip}->{$stripnum}->{gobook} eq "yes" ){ + $strips{$strips->{strip}->{$stripnum}->{name}} = $stripnum; # create a new page for the pic and data $p->newpage; $p->setcolour("blue"); $p->setfont("Helvetica", 20); - $p->text($t1,195, $strips->{'wpt'}->{$stripnum}->{'desc'}); + $p->text($t1,195, $strips->{strip}->{$stripnum}->{name}); $p->text($t1+115,195, $stripnum); $p->setcolour("black"); $p->setfont("Helvetica", 14); - if ( defined $strips->{'wpt'}->{$stripnum}->{'ele'} ){ - $p->text($t5,195, printfeet($strips->{'wpt'}->{$stripnum}->{'ele'})); + if ( defined $strips->{strip}->{$stripnum}->{elev} ){ + $p->text($t5,195, $strips->{strip}->{$stripnum}->{elev} . 'ft'); } - if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'length'} ){ - $p->text($t6,195, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'length'} . 'm'); + if ( defined $strips->{strip}->{$stripnum}->{length} ){ + $p->text($t6,195, $strips->{strip}->{$stripnum}->{length} . 'm'); } $p->setfont("Helvetica", 10); - my $latlng = printlat($strips->{'wpt'}->{$stripnum}->{'lat'}) . " " . - printlon($strips->{'wpt'}->{$stripnum}->{'lon'}); + my $latlng = $strips->{strip}->{$stripnum}->{lat} . " " . + $strips->{strip}->{$stripnum}->{lng}; $p->text($t1,190, $latlng); - if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'slope'} ){ - $p->text($t1 + 45,190, 'Slope: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'slope'}); + if ( defined $strips->{strip}->{$stripnum}->{slope} ){ + $p->text($t1 + 45,190, 'Slope: ' . $strips->{strip}->{$stripnum}->{slope}); } - if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{surface} ){ - $p->text($t5 ,190, 'Sfc: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'surface'}); + if ( defined $strips->{strip}->{$stripnum}->{surface} ){ + $p->text($t5 ,190, 'Sfc: ' . $strips->{strip}->{$stripnum}->{surface}); } - if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'width'} ){ - $p->text($t6 ,190, 'Width: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'width'}); + if ( defined $strips->{strip}->{$stripnum}->{width} ){ + $p->text($t6 ,190, 'Width: ' . $strips->{strip}->{$stripnum}->{width}); } my $eps = "M" . $stripnum . ".ps"; @@ -489,17 +487,17 @@ foreach my $stripnum ( sort keys %{$stri else { $p->setcolour(255,54,0); # Glide Omarama Orange $p->setfont("Helvetica", 32); - $p->text({rotate => 45}, $t2 ,20, 'No picture yet' ); + $p->text({rotate => 45}, $t2 ,20, 'Details in next edition' ); $p->setcolour("black"); } my $v = 185; $p->setfont("Helvetica", 12); $p->text($t5,$v,"Location:"); - if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'location'} ){ + if ( defined $strips->{strip}->{$stripnum}->{location} ){ $v -= 5; $Text::Wrap::columns = 30; - my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'location'})); + my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{location})); while (my $ln = shift @para){ $p->text($t5,$v, $ln); $v -= 5; @@ -509,17 +507,17 @@ foreach my $stripnum ( sort keys %{$stri $v -= 10; $p->text($t5,$v,"Comment:"); - if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'comment'} ){ + if ( defined $strips->{strip}->{$stripnum}->{comment} ){ $v -= 5; $Text::Wrap::columns = 30; - if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'comment'} =~ /Danger/ ){ + if ( $strips->{strip}->{$stripnum}->{comment} =~ /Danger/ ){ $p->setcolour("red"); # Draw over image ... $p->setlinewidth(4); $p->arc( 70, 60, 20, 0, 360); $p->line(50,40, 90,80); } - my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'comment'})); + my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{comment})); while (my $ln = shift @para){ $p->text($t5,$v, $ln); $v -= 5; @@ -530,10 +528,10 @@ foreach my $stripnum ( sort keys %{$stri $v -= 10; $p->text($t5,$v,"Alternate:"); - if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'alternate'} ){ + if ( defined $strips->{strip}->{$stripnum}->{alternate} ){ $v -= 5; $Text::Wrap::columns = 30; - my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'alternate'})); + my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{alternate})); while (my $ln = shift @para){ $p->text($t5,$v, $ln); $v -= 5; @@ -547,25 +545,25 @@ foreach my $stripnum ( sort keys %{$stri startpage(); $v = 185; -foreach my $stripnum ( sort keys %{$strips->{'wpt'}} ){ - if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{gobook} eq "yes" ){ - $strips{$strips->{'wpt'}->{$stripnum}->{'desc'}} = $stripnum; +foreach my $stripnum ( sort keys %{$strips->{strip}} ){ + if ( $strips->{strip}->{$stripnum}->{gobook} eq "yes" ){ + $strips{$strips->{strip}->{$stripnum}->{name}} = $stripnum; $p->setfont("Helvetica-Bold", 12); $p->text($t1,$v, $stripnum); - $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'desc'}); + $p->text($t2,$v, $strips->{strip}->{$stripnum}->{name}); $p->setfont("Helvetica", 12); $v -= 8; $p->text($t1,$v,"Station:"); - if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'station'} ){ - $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'station'}); + if ( defined $strips->{strip}->{$stripnum}->{station} ){ + $p->text($t2,$v, $strips->{strip}->{$stripnum}->{station}); } $v -= 6; $p->text($t1,$v,"Contact:"); - if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'contact'} ){ + if ( defined $strips->{strip}->{$stripnum}->{contact} ){ $Text::Wrap::columns = 50; - my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'contact'})); + my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{contact})); while (my $ln = shift @para){ $p->text($t2,$v, $ln); $v -= 6; @@ -574,8 +572,8 @@ foreach my $stripnum ( sort keys %{$stri } $v -= 6; $p->text($t1,$v,"Retrieve:"); - if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'retrieve'} ){ - $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'retrieve'}); + if ( defined $strips->{strip}->{$stripnum}->{retrieve} ){ + $p->text($t2,$v, $strips->{strip}->{$stripnum}->{retrieve}); } $v -= 8; @@ -627,42 +625,3 @@ sub newindex { $p->setfont("Helvetica", 12); } -sub printlat { - my $latitude = shift(@_); - my $minutes = 0; - my $degrees = 0; - my $northing = ""; - - if ($latitude < 0) { - $northing = "S"; - $latitude = 0 - $latitude; - } - else{ - $northing = "N"; - } - $degrees = int($latitude); - $minutes = ($latitude - $degrees) * 60; - return sprintf("%d:%06.3f%s",$degrees,$minutes,$northing); -} - -sub printlon { - my $longitude = shift(@_); - my $minutes = 0; - my $degrees = 0; - my $westing = ""; - if ($longitude < 0) { - $westing = "W"; - $longitude = 0 - $longitude; - } - else{ - $westing = "E"; - } - $degrees = int($longitude); - $minutes = ($longitude - $degrees) * 60; - return sprintf("%d:%06.3f%s",$degrees,$minutes,$westing); -} - -sub printfeet { - my $meters = shift(@_); - return sprintf("%d ft", int($meters * 3.2808399)); -}