findap.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:37 2010 from findap.pl 2006/09/05 3.6 KB.

#!/Perl
# findap.pl
# AIM: Read FlightGear apt.dat, and list closest airports to a given
# lat and lon ... output $max_cnt in closest order ...
require 'logfile.pl' or die "Error: Unable to locate logfile.pl ...\n";
# log file stuff
my ($LF);
my $outfile = 'temp'.$0.'.txt';
open_log($outfile);
prt( "$0 ... Hello, World ...\n" );
my $lat = 48.89;
my $lon = 2.37;
my $aln = '1';
my $rln = '10';
my $aptdat = 'F:\FG0910-4\apt.txt';
###my $aptdat = 'tempapt.txt';
my $max_cnt = 50;
prt("Loading $aptdat file ...\n");
open IF, "<$aptdat" or mydie("OOPS, failed to open [$aptdat] ... check name and location ...\n");
my @lines = <IF>;
close IF;
my $cnt = scalar @lines;
prt( "Processing $cnt lines from $aptdat for $lat, $lon ...\n" );
my $line = '';
my $apt = '';
my $alat = 0;
my $alon = 0;
my $glat = 0;
my $glon = 0;
my $rlat = 0;
my $rlon = 0;
my $dlat = 0;
my $dlon = 0;
my $diff = 0;
my $rwycnt = 0;
my $icao = '';
my $name = '';
my @aptlist = ();
foreach $line (@lines) {
   chomp $line;
   $line =~ s/\r$//;
   while( $line =~ /\s\s/) {
      $line =~ s/\s\s/ /g;
   }
   ###prt("$line\n");
   my @arr = split(/ /,$line);
   if ($line =~ /^$aln\s+/) {
      if (length($apt) && ($rwycnt > 0)) {
         $alat = $glat / $rwycnt;
         $alon = $glon / $rwycnt;
         $dlat = abs( $lat - $alat );
         $dlon = abs( $lon - $alon );
         $diff = int( ($dlat * 10) + ($dlon * 10) );
         my @arr2 = split(/ /,$apt);
         $icao = $arr2[4];
         $name = join(' ', splice(@arr2,5));
         ##prt("$diff [$apt] (with $rwycnt runways at [$alat, $alon]) ...\n");
         ##prt("$diff [$icao] [$name] ...\n");
         push(@aptlist, [$diff, $icao, $name, $alat, $alon]);
      }
      $apt = $line;
      $rwycnt = 0;
      $glat = 0;
      $glon = 0;
   } elsif ($line =~ /^$rln\s+/) {
      $rlat = $arr[1];
      $rlon = $arr[2];
      ###prt( "$line [$rlat, $rlon]\n" );
      $glat += $rlat;
      $glon += $rlon;
      $rwycnt++;
   }
}
      if ($rwycnt > 0) {
         $alat = $glat / $rwycnt;
         $alon = $glon / $rwycnt;
         $dlat = abs( $lat - $alat );
         $dlon = abs( $lon - $alon );
         $diff = int( ($dlat * 10) + ($dlon * 10) );
         my @arr2 = split(/ /,$apt);
         $icao = $arr2[4];
         $name = join(' ', splice(@arr2,5));
         ###prt("$diff [$apt] (with $rwycnt runways at [$alat, $alon]) ...\n");
         ###prt("$diff [$icao] [$name] ...\n");
         push(@aptlist, [$diff, $icao, $name, $alat, $alon]);
      }
my $acnt = scalar @aptlist;
prt( "Sorting $acnt aiports for $lat, $lon ...\n" );
my @aptsort = sort mycmp_ascend @aptlist;
prt( "Listing $max_cnt aiports for $lat, $lon ...\n" );
if ($acnt > $max_cnt) {
   $acnt = $max_cnt;
}
for (my $i = 0; $i < $acnt; $i++) {
   $diff = $aptsort[$i][0];
   $icao = $aptsort[$i][1];
   $name = $aptsort[$i][2];
   $alat = $aptsort[$i][3];
   $alon = $aptsort[$i][4];
   while (length($icao) < 4) {
      $icao .= ' ';
   }
   $line = $diff;
   while (length($line) < 6) {
      $line = ' '.$line;
   }
   $line .= ' '.$icao.' '.$name.' ('.$alat.','.$alon.')';
   prt("$line\n");
}
close_log($outfile,1);
exit(0);
# put least first
sub mycmp_ascend {
   if (${$a}[0] < ${$b}[0]) {
      prt( "-[".${$a}[0]."] < [".${$b}[0]."]\n" ) if $verb3;
      return -1;
   }
   if (${$a}[0] > ${$b}[0]) {
      prt( "+[".${$a}[0]."] < [".${$b}[0]."]\n" ) if $verb3;
      return 1;
   }
   prt( "=[".${$a}[0]."] < [".${$b}[0]."]\n" ) if $verb3;
   return 0;
}
sub mycmp_decend {
   if (${$a}[0] < ${$b}[0]) {
      prt( "+[".${$a}[0]."] < [".${$b}[0]."]\n" ) if $verb3;
      return 1;
   }
   if (${$a}[0] > ${$b}[0]) {
      prt( "-[".${$a}[0]."] < [".${$b}[0]."]\n" ) if $verb3;
      return -1;
   }
   prt( "=[".${$a}[0]."] < [".${$b}[0]."]\n" ) if $verb3;
   return 0;
}
# eof - findap.pl

index -|- top

checked by tidy  Valid HTML 4.01 Transitional