|
|
| version 1.3, 2011/01/06 00:14:18 | version 3.4, 2017/07/15 00:04:02 |
|---|---|
| Line 1 | Line 1 |
| #! /usr/bin/perl -w | #! /usr/bin/perl -w |
| # $Id$ | |
| use XML::Simple; | use XML::Simple; |
| use strict; | use strict; |
| use PostScript::Simple; | use PostScript::Simple; |
| use Text::Wrap; | use Text::Wrap; |
| $Text::Wrap::columns = 30; | $Text::Wrap::columns = 30; |
| my $strips; | #my $strips; |
| my $xml = "OmLand.xml"; | #my $xml = "OmLand.xml"; |
| if ( defined $xml ){ | #if ( defined $xml ){ |
| $strips = XMLin($xml, KeyAttr => {strip => 'id'}); | # $strips = XMLin($xml, KeyAttr => {strip => 'id'}); |
| } | #} |
| my $strips = XMLin('OmLand.gpx'); | |
| # create a new PostScript object; | |
| # create a new PostScript object | my $p = new PostScript::Simple(papersize => "A5", |
| my $p = new PostScript::Simple(papersize => "A5", | colour => 1, |
| colour => 1, | eps => 0, |
| eps => 0, | units => "mm"); |
| units => "mm",); | |
| # co-ords are horizontal, vertical. from bottom left corner. 148 x 210 | # co-ords are horizontal, vertical. from bottom left corner. 148 x 210 |
| Line 53 $p->setcolour(60,28,0); | Line 57 $p->setcolour(60,28,0); |
| $p->text(35,175, "Land-Out Guide"); | $p->text(35,175, "Land-Out Guide"); |
| $p->setfont("Helvetica", 17); | $p->setfont("Helvetica", 17); |
| $p->setcolour("white"); | $p->setcolour("white"); |
| $p->text(12,52, "2nd Edition 3rd Revision 2011"); | $p->text(12,52, "5th Edition 2017"); |
| $p->newpage; | $p->newpage; |
| # Contents | # Contents |
| Line 94 $p->text($t1,$v, "Photos by Gavin Wills. | Line 98 $p->text($t1,$v, "Photos by Gavin Wills. |
| $v -= $ls; | $v -= $ls; |
| $p->text($t1,$v, "Text by Phil Plane and Gavin Wills. "); | $p->text($t1,$v, "Text by Phil Plane and Gavin Wills. "); |
| $v -= $ls; | $v -= $ls; |
| $p->text($t1,$v, "Copyright GlideOmarama.com 2007."); | $p->text($t1,$v, "Copyright GlideOmarama.com 2013."); |
| $v -= $ls; | $v -= $ls; |
| $p->text($t1,$v, "First Edition published November 2007. "); | $p->text($t1,$v, "First Edition published November 2007."); |
| $v -= $ls; | $v -= $ls; |
| $p->text($t1,$v, "Second Edition published November 2008. "); | $p->text($t1,$v, "Fifth Edition published February 2017."); |
| $v -= $ls; | |
| $p->text($t1,$v, "Second Edition 1st Revision published November 2009. "); | |
| $p->text(70,5, "(" . $pn++ . ")"); | $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. | 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. |
| Line 444 $p->text(70,5, "(" . $pn++ . ")"); | Line 446 $p->text(70,5, "(" . $pn++ . ")"); |
| # Start the strip pages with pictures: | # Start the strip pages with pictures: |
| foreach my $stripnum ( sort keys %{$strips->{strip}} ){ | foreach my $stripnum ( sort keys %{$strips->{'wpt'}} ){ |
| if ( $strips->{strip}->{$stripnum}->{gobook} eq "yes" ){ | if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{gobook} eq "yes" ){ |
| $strips{$strips->{strip}->{$stripnum}->{name}} = $stripnum; | $strips{$strips->{'wpt'}->{$stripnum}->{'desc'}} = $stripnum; |
| # create a new page for the pic and data | # create a new page for the pic and data |
| $p->newpage; | $p->newpage; |
| $p->setcolour("blue"); | $p->setcolour("blue"); |
| $p->setfont("Helvetica", 20); | $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->text($t1+115,195, $stripnum); |
| $p->setcolour("black"); | $p->setcolour("black"); |
| $p->setfont("Helvetica", 14); | $p->setfont("Helvetica", 14); |
| if ( defined $strips->{strip}->{$stripnum}->{elev} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'ele'} ){ |
| $p->text($t5,195, $strips->{strip}->{$stripnum}->{elev} . 'ft'); | $p->text($t5,195, printfeet($strips->{'wpt'}->{$stripnum}->{'ele'})); |
| } | } |
| if ( defined $strips->{strip}->{$stripnum}->{length} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'length'} ){ |
| $p->text($t6,195, $strips->{strip}->{$stripnum}->{length} . 'm'); | $p->text($t6,195, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'length'} . 'm'); |
| } | } |
| $p->setfont("Helvetica", 10); | $p->setfont("Helvetica", 10); |
| my $latlng = $strips->{strip}->{$stripnum}->{lat} . " " . | my $latlng = printlat($strips->{'wpt'}->{$stripnum}->{'lat'}) . " " . |
| $strips->{strip}->{$stripnum}->{lng}; | printlon($strips->{'wpt'}->{$stripnum}->{'lon'}); |
| $p->text($t1,190, $latlng); | $p->text($t1,190, $latlng); |
| if ( defined $strips->{strip}->{$stripnum}->{slope} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'slope'} ){ |
| $p->text($t1 + 45,190, 'Slope: ' . $strips->{strip}->{$stripnum}->{slope}); | $p->text($t1 + 45,190, 'Slope: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'slope'}); |
| } | } |
| if ( defined $strips->{strip}->{$stripnum}->{surface} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{surface} ){ |
| $p->text($t5 ,190, 'Sfc: ' . $strips->{strip}->{$stripnum}->{surface}); | $p->text($t5 ,190, 'Sfc: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'surface'}); |
| } | } |
| if ( defined $strips->{strip}->{$stripnum}->{width} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'width'} ){ |
| $p->text($t6 ,190, 'Width: ' . $strips->{strip}->{$stripnum}->{width}); | $p->text($t6 ,190, 'Width: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'width'}); |
| } | } |
| my $eps = "M" . $stripnum . ".ps"; | my $eps = "M" . $stripnum . ".ps"; |
| Line 487 foreach my $stripnum ( sort keys %{$stri | Line 489 foreach my $stripnum ( sort keys %{$stri |
| else { | else { |
| $p->setcolour(255,54,0); # Glide Omarama Orange | $p->setcolour(255,54,0); # Glide Omarama Orange |
| $p->setfont("Helvetica", 32); | $p->setfont("Helvetica", 32); |
| $p->text({rotate => 45}, $t2 ,20, 'Details in next edition' ); | $p->text({rotate => 45}, $t2 ,20, 'No picture yet' ); |
| $p->setcolour("black"); | $p->setcolour("black"); |
| } | } |
| my $v = 185; | my $v = 185; |
| $p->setfont("Helvetica", 12); | $p->setfont("Helvetica", 12); |
| $p->text($t5,$v,"Location:"); | $p->text($t5,$v,"Location:"); |
| if ( defined $strips->{strip}->{$stripnum}->{location} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'location'} ){ |
| $v -= 5; | $v -= 5; |
| $Text::Wrap::columns = 30; | $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){ | while (my $ln = shift @para){ |
| $p->text($t5,$v, $ln); | $p->text($t5,$v, $ln); |
| $v -= 5; | $v -= 5; |
| Line 507 foreach my $stripnum ( sort keys %{$stri | Line 509 foreach my $stripnum ( sort keys %{$stri |
| $v -= 10; | $v -= 10; |
| $p->text($t5,$v,"Comment:"); | $p->text($t5,$v,"Comment:"); |
| if ( defined $strips->{strip}->{$stripnum}->{comment} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'comment'} ){ |
| $v -= 5; | $v -= 5; |
| $Text::Wrap::columns = 30; | $Text::Wrap::columns = 30; |
| if ( $strips->{strip}->{$stripnum}->{comment} =~ /Danger/ ){ | if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'comment'} =~ /Danger/ ){ |
| $p->setcolour("red"); | $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){ | while (my $ln = shift @para){ |
| $p->text($t5,$v, $ln); | $p->text($t5,$v, $ln); |
| $v -= 5; | $v -= 5; |
| Line 524 foreach my $stripnum ( sort keys %{$stri | Line 530 foreach my $stripnum ( sort keys %{$stri |
| $v -= 10; | $v -= 10; |
| $p->text($t5,$v,"Alternate:"); | $p->text($t5,$v,"Alternate:"); |
| if ( defined $strips->{strip}->{$stripnum}->{alternate} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'alternate'} ){ |
| $v -= 5; | $v -= 5; |
| $Text::Wrap::columns = 30; | $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){ | while (my $ln = shift @para){ |
| $p->text($t5,$v, $ln); | $p->text($t5,$v, $ln); |
| $v -= 5; | $v -= 5; |
| Line 541 foreach my $stripnum ( sort keys %{$stri | Line 547 foreach my $stripnum ( sort keys %{$stri |
| startpage(); | startpage(); |
| $v = 185; | $v = 185; |
| foreach my $stripnum ( sort keys %{$strips->{strip}} ){ | foreach my $stripnum ( sort keys %{$strips->{'wpt'}} ){ |
| if ( $strips->{strip}->{$stripnum}->{gobook} eq "yes" ){ | if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{gobook} eq "yes" ){ |
| $strips{$strips->{strip}->{$stripnum}->{name}} = $stripnum; | $strips{$strips->{'wpt'}->{$stripnum}->{'desc'}} = $stripnum; |
| $p->setfont("Helvetica-Bold", 12); | $p->setfont("Helvetica-Bold", 12); |
| $p->text($t1,$v, $stripnum); | $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); | $p->setfont("Helvetica", 12); |
| $v -= 8; | $v -= 8; |
| $p->text($t1,$v,"Station:"); | $p->text($t1,$v,"Station:"); |
| if ( defined $strips->{strip}->{$stripnum}->{station} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'station'} ){ |
| $p->text($t2,$v, $strips->{strip}->{$stripnum}->{station}); | $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'station'}); |
| } | } |
| $v -= 6; | $v -= 6; |
| $p->text($t1,$v,"Contact:"); | $p->text($t1,$v,"Contact:"); |
| if ( defined $strips->{strip}->{$stripnum}->{contact} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'contact'} ){ |
| $Text::Wrap::columns = 50; | $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){ | while (my $ln = shift @para){ |
| $p->text($t2,$v, $ln); | $p->text($t2,$v, $ln); |
| $v -= 6; | $v -= 6; |
| Line 568 foreach my $stripnum ( sort keys %{$stri | Line 574 foreach my $stripnum ( sort keys %{$stri |
| } | } |
| $v -= 6; | $v -= 6; |
| $p->text($t1,$v,"Retrieve:"); | $p->text($t1,$v,"Retrieve:"); |
| if ( defined $strips->{strip}->{$stripnum}->{retrieve} ){ | if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'retrieve'} ){ |
| $p->text($t2,$v, $strips->{strip}->{$stripnum}->{retrieve}); | $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'retrieve'}); |
| } | } |
| $v -= 8; | $v -= 8; |
| Line 601 foreach my $stripname ( sort keys %strip | Line 607 foreach my $stripname ( sort keys %strip |
| # write the output to a file | # write the output to a file |
| $p->output("gobook.ps"); | $p->output("gobook.ps"); |
| # use ghostscript to convert to pdf ... | |
| `gs -q -dNOPAUSE -dSAFER -dBATCH -sDEVICE=pdfwrite -sOutputFile=gobook.pdf gobook.ps`; | |
| exit 0; | exit 0; |
| sub startpage { | sub startpage { |
| Line 618 sub newindex { | Line 627 sub newindex { |
| $p->setfont("Helvetica", 12); | $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)); | |
| } |