Add a utility that given a specific localizer position and corresponding
runway info, repositions the localizer and realigns it with the runway heading so that the approach lines up perfectly.
This commit is contained in:
parent
25e57e5cd1
commit
c538cc44fd
2 changed files with 65 additions and 1 deletions
|
@ -1,6 +1,6 @@
|
||||||
noinst_LIBRARIES = libAirports.a
|
noinst_LIBRARIES = libAirports.a
|
||||||
|
|
||||||
noinst_PROGRAMS = gensimple genrunways
|
noinst_PROGRAMS = gensimple genrunways calc_loc
|
||||||
|
|
||||||
libAirports_a_SOURCES = \
|
libAirports_a_SOURCES = \
|
||||||
runways.cxx runways.hxx \
|
runways.cxx runways.hxx \
|
||||||
|
@ -12,4 +12,7 @@ gensimple_LDADD = libAirports.a -lsgdebug -lsgmisc -lsgxml -lmk4 -lz
|
||||||
genrunways_SOURCES = genrunways.cxx
|
genrunways_SOURCES = genrunways.cxx
|
||||||
genrunways_LDADD = libAirports.a -lsgdebug -lsgmisc -lsgxml -lmk4 -lz
|
genrunways_LDADD = libAirports.a -lsgdebug -lsgmisc -lsgxml -lmk4 -lz
|
||||||
|
|
||||||
|
calc_loc_SOURCES = calc_loc.cxx
|
||||||
|
calc_loc_LDADD = -lsgmath
|
||||||
|
|
||||||
INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src
|
INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src
|
||||||
|
|
61
src/Airports/calc_loc.cxx
Normal file
61
src/Airports/calc_loc.cxx
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
// Calculate ILS heading
|
||||||
|
|
||||||
|
#include <simgear/compiler.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include STL_STRING
|
||||||
|
|
||||||
|
#include <plib/sg.h>
|
||||||
|
|
||||||
|
#include <simgear/math/sg_geodesy.hxx>
|
||||||
|
|
||||||
|
|
||||||
|
SG_USING_STD(string);
|
||||||
|
SG_USING_STD(cout);
|
||||||
|
SG_USING_STD(endl);
|
||||||
|
|
||||||
|
int main( int argc, char **argv ) {
|
||||||
|
|
||||||
|
if ( argc != 9 ) {
|
||||||
|
cout << "Wrong usage" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
double loc_lat = atof( argv[1] );
|
||||||
|
double loc_lon = atof( argv[2] );
|
||||||
|
string dir = argv[3];
|
||||||
|
double rwy_lat = atof( argv[4] );
|
||||||
|
double rwy_lon = atof( argv[5] );
|
||||||
|
double rwy_hdg = atof( argv[6] );
|
||||||
|
double rwy_len = atof( argv[7] ) * SG_DEGREES_TO_RADIANS;
|
||||||
|
double rwy_wid = atof( argv[8] );
|
||||||
|
|
||||||
|
if ( dir == "FOR" ) {
|
||||||
|
rwy_hdg += 180.0;
|
||||||
|
if ( rwy_hdg > 360.0 ) {
|
||||||
|
rwy_hdg -= 360.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// calculate runway threshold point
|
||||||
|
double thresh_lat, thresh_lon, return_az;
|
||||||
|
geo_direct_wgs_84 ( 0.0, rwy_lat, rwy_lon, rwy_hdg,
|
||||||
|
rwy_len / 2.0, &thresh_lat, &thresh_lon, &return_az );
|
||||||
|
cout << "Threshold = " << thresh_lat << "," << thresh_lon << endl;
|
||||||
|
|
||||||
|
// calculate distance from threshold to localizer
|
||||||
|
double az1, az2, dist_m;
|
||||||
|
geo_inverse_wgs_84( 0.0, loc_lat, loc_lon, thresh_lat, thresh_lon,
|
||||||
|
&az1, &az2, &dist_m );
|
||||||
|
cout << "Distance = " << dist_m << endl;
|
||||||
|
|
||||||
|
// back project that distance along the runway center line
|
||||||
|
double nloc_lat, nloc_lon;
|
||||||
|
geo_direct_wgs_84 ( 0.0, thresh_lat, thresh_lon, rwy_hdg + 180.0,
|
||||||
|
dist_m, &nloc_lat, &nloc_lon, &return_az );
|
||||||
|
printf("New localizer = %.6f %.6f\n", nloc_lat, nloc_lon );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue