- nav_has_dme = ils->get_has_dme();
- nav_has_gs = ils->get_has_gs();
-
- nav_loclon = ils->get_loclon();
- nav_loclat = ils->get_loclat();
- nav_gslon = ils->get_gslon();
- nav_gslat = ils->get_gslat();
- nav_elev = ils->get_gselev();
+ nav_has_dme = (dme != NULL);
+ nav_has_gs = (gs != NULL);
+ if ( nav_has_gs ) {
+ nav_gslon = gs->get_lon();
+ nav_gslat = gs->get_lat();
+ nav_elev = gs->get_elev_ft();
+ int tmp = (int)(gs->get_multiuse() / 1000.0);
+ nav_target_gs = (double)tmp / 100.0;
+ nav_gs_x = gs->get_x();
+ nav_gs_y = gs->get_y();
+ nav_gs_z = gs->get_z();
+
+ // derive GS baseline (perpendicular to the runay
+ // along the ground)
+ double tlon, tlat, taz;
+ geo_direct_wgs_84 ( 0.0, nav_gslat, nav_gslon,
+ nav_target_radial + 90,
+ 100.0, &tlat, &tlon, &taz );
+ // cout << "nav_target_radial = " << nav_target_radial << endl;
+ // cout << "nav_loc = " << nav_loc << endl;
+ // cout << nav_gslon << "," << nav_gslat << " "
+ // << tlon << "," << tlat << " (" << nav_elev << ")"
+ // << endl;
+ Point3D p1 = sgGeodToCart( Point3D(tlon*SGD_DEGREES_TO_RADIANS,
+ tlat*SGD_DEGREES_TO_RADIANS,
+ nav_elev*SG_FEET_TO_METER)
+ );
+ // cout << nav_gs_x << "," << nav_gs_y << "," << nav_gs_z
+ // << endl;
+ // cout << p1 << endl;
+ sgdSetVec3( gs_base_vec,
+ p1.x()-nav_gs_x, p1.y()-nav_gs_y, p1.z()-nav_gs_z );
+ // cout << gs_base_vec[0] << "," << gs_base_vec[1] << ","
+ // << gs_base_vec[2] << endl;
+ } else {
+ nav_elev = loc->get_elev_ft();
+ }