]> git.mxchange.org Git - flightgear.git/commitdiff
Moved from $fgfs_base/Navaids/ to here.
authorcurt <curt>
Tue, 8 Apr 2003 20:15:08 +0000 (20:15 +0000)
committercurt <curt>
Tue, 8 Apr 2003 20:15:08 +0000 (20:15 +0000)
scripts/perl/dafif/dafift2fix.pl [new file with mode: 0755]
scripts/perl/dafif/dafift2nav.pl [new file with mode: 0755]

diff --git a/scripts/perl/dafif/dafift2fix.pl b/scripts/perl/dafif/dafift2fix.pl
new file mode 100755 (executable)
index 0000000..54797bb
--- /dev/null
@@ -0,0 +1,21 @@
+#!/usr/bin/perl
+########################################################################
+# Convert DAFIFT WPT.TXT to FlightGear format.
+########################################################################
+
+use strict;
+
+<>;                             # skip header line
+
+print "// FlightGear intersection data, generated from DAFIFT WPT.TXT\n";
+
+while (<>)
+{
+  chop;
+  my @F = split(/\t/);
+  printf("%-5s %10.6f %11.6f\n",  $F[0], $F[14], $F[16]);
+}
+
+print "[End]\n";
+
+# end of dafif2fix.pl
diff --git a/scripts/perl/dafif/dafift2nav.pl b/scripts/perl/dafif/dafift2nav.pl
new file mode 100755 (executable)
index 0000000..570eb7a
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/perl
+########################################################################
+# Convert DAFIFT NAV.TXT to FlightGear format.
+########################################################################
+
+use strict;
+
+my @TYPES = (
+             '',                # Unknown
+             'V',               # VOR
+             'V',               # VORTAC
+             'D',               # TACAN
+             'V',               # VOR/DME
+             'N',               # NDB
+             '',
+             'N',               # NDB/DME
+             '',
+             'D'                # DME
+            );
+
+my @TYPE_NAMES = (
+                  '',
+                  'VOR',
+                  'VORTAC',
+                  'TACAN',
+                  'VOR/DME',
+                  'NDB',
+                  '',
+                  'NDB/DME',
+                  '',
+                  'DME'
+                 );
+
+my @HAS_DME = (
+               'N',             # Unknown
+               'N',             # VOR
+               'Y',             # VORTAC
+               'Y',             # TACAN
+               'Y',             # VOR/DME
+               'N',             # NDB
+               'N',
+               'Y',             # NDB/DME (not used, though)
+               'N',
+               'Y'              # DME
+              );
+
+# Make a frequency from a DME channel
+sub make_freq {
+  my ($type, $channel) = (@_);
+  my $freq;
+  if ($channel < 67) {
+    $freq = 108 + (($channel - 17)/10.0);
+  } else {
+    $freq = 112 + (($channel - 67)/10.0);
+  }
+  if ($type == 9) {
+    $freq += 0.05;
+  }
+  return $freq;
+}
+
+# Make a range based on navaid type and purpose
+sub make_range {
+  my ($type, $usage) = (@_);
+  if ($type == 1 || $type == 2 || $type ==4) { # VOR
+    if ($usage == 'H' || $usage == 'B') {
+      return 200;
+    } elsif ($usage == 'T') {
+      return 20;
+    } else {
+      return 50;
+    }
+  } elsif ($type == 3 || $type == 7) {        # DME
+    if ($usage == 'T') {
+      return 50;
+    } else {
+      return 200;
+    }
+  } else {                      # NDB
+    if ($usage == 'T') {
+      return 50;
+    } else {
+      return 200;
+    }
+  }
+}
+
+sub write_navaid {
+  my ($type, $lat, $lon, $elev, $freq, $range, $dme, $id, $magvar, $name)
+    = (@_);
+      
+  printf("%s %10.6f %11.6f %6d %7.2f %4d %s %-4s %s %s %s\n",
+         $TYPES[$type], $lat, $lon, $elev, $freq, $range, $dme, $id,
+         $magvar, $name, $TYPE_NAMES[$type]);
+}
+
+
+<>;                             # skip header line
+
+print "// FlightGear navaid data, generated from DAFIFT NAV.TXT\n";
+
+while (<>)
+{
+  chop;
+  my @F = split(/\t/);
+
+  my $type = $F[1];
+  if ($TYPES[$type] eq '') {
+    warn("Bad type for " . $F[0] . "(" . $F[5] . ")\n");
+    next;
+  }
+  my $lat = $F[18];
+  my $lon = $F[20];
+  my $elev = $F[23];
+  my $freq = $F[8]/1000;
+  if ($type == 3 || $type == 9) {
+    $freq = make_freq($type, 0 + $F[10]);
+  }
+  my $range = 0 + $F[14];
+  if ($range == 0) {
+    $range = make_range($type, $F[9]);
+  }
+  my $id = $F[0];
+  my $magvar = $F[21];
+  if ($magvar eq '') {
+    $magvar = 'XXX';
+  } else {
+    $magvar =~ /^([EW])([0-9.]+)( .*)?/;
+    $magvar = sprintf("%02d%s", $2/100000, $1);
+  }
+  my $name = $F[5];
+
+  if ($type == 7) {             # NDB/DME
+    write_navaid(9, $lat, $lon, $elev, make_freq(9, $F[10]), $range,
+                 'Y', $id, $magvar, $name);
+    $type = 5;
+  }
+  write_navaid($type, $lat, $lon, $elev, $freq, $range,
+               $HAS_DME[$F[1]], $id, $magvar, $name);
+
+
+}
+
+print "[End]\n";
+
+# end of dafif2fix.pl