--- gobook.perl 2017/01/22 03:24:07 3.2 +++ gobook.perl 2017/07/15 00:04:02 3.4 @@ -1,17 +1,19 @@ #! /usr/bin/perl -w -# $Id: gobook.perl,v 3.2 2017/01/22 03:24:07 philip Exp $ +# $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 $xml = "OmLand.xml"; +#if ( defined $xml ){ +# $strips = XMLin($xml, KeyAttr => {strip => 'id'}); +#} + +my $strips = XMLin('OmLand.gpx'); # create a new PostScript object; @@ -98,9 +100,9 @@ $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 October 2017. "); +$p->text($t1,$v, "Fifth Edition published February 2017."); $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. @@ -444,36 +446,36 @@ $p->text(70,5, "(" . $pn++ . ")"); # Start the strip pages with pictures: -foreach my $stripnum ( sort keys %{$strips->{strip}} ){ - if ( $strips->{strip}->{$stripnum}->{gobook} eq "yes" ){ - $strips{$strips->{strip}->{$stripnum}->{name}} = $stripnum; +foreach my $stripnum ( sort keys %{$strips->{'wpt'}} ){ + if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{gobook} eq "yes" ){ + $strips{$strips->{'wpt'}->{$stripnum}->{'desc'}} = $stripnum; # create a new page for the pic and data $p->newpage; $p->setcolour("blue"); $p->setfont("Helvetica", 20); - $p->text($t1,195, $strips->{strip}->{$stripnum}->{name}); + $p->text($t1,195, $strips->{'wpt'}->{$stripnum}->{'desc'}); $p->text($t1+115,195, $stripnum); $p->setcolour("black"); $p->setfont("Helvetica", 14); - if ( defined $strips->{strip}->{$stripnum}->{elev} ){ - $p->text($t5,195, $strips->{strip}->{$stripnum}->{elev} . 'ft'); + if ( defined $strips->{'wpt'}->{$stripnum}->{'ele'} ){ + $p->text($t5,195, printfeet($strips->{'wpt'}->{$stripnum}->{'ele'})); } - if ( defined $strips->{strip}->{$stripnum}->{length} ){ - $p->text($t6,195, $strips->{strip}->{$stripnum}->{length} . 'm'); + if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'length'} ){ + $p->text($t6,195, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'length'} . 'm'); } $p->setfont("Helvetica", 10); - my $latlng = $strips->{strip}->{$stripnum}->{lat} . " " . - $strips->{strip}->{$stripnum}->{lng}; + my $latlng = printlat($strips->{'wpt'}->{$stripnum}->{'lat'}) . " " . + printlon($strips->{'wpt'}->{$stripnum}->{'lon'}); $p->text($t1,190, $latlng); - if ( defined $strips->{strip}->{$stripnum}->{slope} ){ - $p->text($t1 + 45,190, 'Slope: ' . $strips->{strip}->{$stripnum}->{slope}); + if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'slope'} ){ + $p->text($t1 + 45,190, 'Slope: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'slope'}); } - if ( defined $strips->{strip}->{$stripnum}->{surface} ){ - $p->text($t5 ,190, 'Sfc: ' . $strips->{strip}->{$stripnum}->{surface}); + if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{surface} ){ + $p->text($t5 ,190, 'Sfc: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'surface'}); } - if ( defined $strips->{strip}->{$stripnum}->{width} ){ - $p->text($t6 ,190, 'Width: ' . $strips->{strip}->{$stripnum}->{width}); + if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'width'} ){ + $p->text($t6 ,190, 'Width: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'width'}); } my $eps = "M" . $stripnum . ".ps"; @@ -494,10 +496,10 @@ foreach my $stripnum ( sort keys %{$stri $p->setfont("Helvetica", 12); $p->text($t5,$v,"Location:"); - if ( defined $strips->{strip}->{$stripnum}->{location} ){ + if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'location'} ){ $v -= 5; $Text::Wrap::columns = 30; - my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{location})); + my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'location'})); while (my $ln = shift @para){ $p->text($t5,$v, $ln); $v -= 5; @@ -507,17 +509,17 @@ foreach my $stripnum ( sort keys %{$stri $v -= 10; $p->text($t5,$v,"Comment:"); - if ( defined $strips->{strip}->{$stripnum}->{comment} ){ + if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'comment'} ){ $v -= 5; $Text::Wrap::columns = 30; - if ( $strips->{strip}->{$stripnum}->{comment} =~ /Danger/ ){ + if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'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->{strip}->{$stripnum}->{comment})); + my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'comment'})); while (my $ln = shift @para){ $p->text($t5,$v, $ln); $v -= 5; @@ -528,10 +530,10 @@ foreach my $stripnum ( sort keys %{$stri $v -= 10; $p->text($t5,$v,"Alternate:"); - if ( defined $strips->{strip}->{$stripnum}->{alternate} ){ + if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'alternate'} ){ $v -= 5; $Text::Wrap::columns = 30; - my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{alternate})); + my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'alternate'})); while (my $ln = shift @para){ $p->text($t5,$v, $ln); $v -= 5; @@ -545,25 +547,25 @@ foreach my $stripnum ( sort keys %{$stri startpage(); $v = 185; -foreach my $stripnum ( sort keys %{$strips->{strip}} ){ - if ( $strips->{strip}->{$stripnum}->{gobook} eq "yes" ){ - $strips{$strips->{strip}->{$stripnum}->{name}} = $stripnum; +foreach my $stripnum ( sort keys %{$strips->{'wpt'}} ){ + if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{gobook} eq "yes" ){ + $strips{$strips->{'wpt'}->{$stripnum}->{'desc'}} = $stripnum; $p->setfont("Helvetica-Bold", 12); $p->text($t1,$v, $stripnum); - $p->text($t2,$v, $strips->{strip}->{$stripnum}->{name}); + $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'desc'}); $p->setfont("Helvetica", 12); $v -= 8; $p->text($t1,$v,"Station:"); - if ( defined $strips->{strip}->{$stripnum}->{station} ){ - $p->text($t2,$v, $strips->{strip}->{$stripnum}->{station}); + if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'station'} ){ + $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'station'}); } $v -= 6; $p->text($t1,$v,"Contact:"); - if ( defined $strips->{strip}->{$stripnum}->{contact} ){ + if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'contact'} ){ $Text::Wrap::columns = 50; - my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{contact})); + my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'contact'})); while (my $ln = shift @para){ $p->text($t2,$v, $ln); $v -= 6; @@ -572,8 +574,8 @@ foreach my $stripnum ( sort keys %{$stri } $v -= 6; $p->text($t1,$v,"Retrieve:"); - if ( defined $strips->{strip}->{$stripnum}->{retrieve} ){ - $p->text($t2,$v, $strips->{strip}->{$stripnum}->{retrieve}); + if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'retrieve'} ){ + $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'retrieve'}); } $v -= 8; @@ -625,3 +627,42 @@ 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)); +}