From 258cd292c6638459e7ea1eaa50f1ddf7ac3029b5 Mon Sep 17 00:00:00 2001 From: curt Date: Sun, 20 Jun 2004 18:58:44 +0000 Subject: [PATCH] When searching for nav records ignore stations > 300nm away. --- src/Cockpit/navcom.cxx | 3 ++- src/Navaids/navlist.cxx | 21 +++++++-------------- src/Navaids/navrecord.hxx | 7 ++++--- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/Cockpit/navcom.cxx b/src/Cockpit/navcom.cxx index f37a2e741..583bc5d10 100644 --- a/src/Cockpit/navcom.cxx +++ b/src/Cockpit/navcom.cxx @@ -613,9 +613,9 @@ void FGNavCom::search() gs = globals->get_gslist()->findByFreq(nav_freq, lon, lat, elev); } - if ( loc != NULL ) { nav_id = loc->get_ident(); + // cout << "localizer = " << nav_id << endl; nav_valid = true; if ( last_nav_id != nav_id || last_nav_vor ) { nav_trans_ident = loc->get_trans_ident(); @@ -701,6 +701,7 @@ void FGNavCom::search() } } else if ( nav != NULL ) { nav_id = nav->get_ident(); + // cout << "nav = " << nav_id << endl; nav_valid = true; if ( last_nav_id != nav_id || !last_nav_vor ) { last_nav_id = nav_id; diff --git a/src/Navaids/navlist.cxx b/src/Navaids/navlist.cxx index f8aab3e0d..8b8aabd10 100644 --- a/src/Navaids/navlist.cxx +++ b/src/Navaids/navlist.cxx @@ -182,31 +182,24 @@ FGNavRecord *FGNavList::findNavFromList( const Point3D &aircraft, { FGNavRecord *nav = NULL; Point3D station; - double d2; - double min_dist = 999999999.0; + double dist; + double min_dist = FG_NAV_MAX_RANGE * SG_NM_TO_METER; - // prime the pump with info from stations[0] - if ( stations.size() > 0 ) { - nav = stations[0]; - station = Point3D( nav->get_x(), nav->get_y(), nav->get_z()); - min_dist = aircraft.distance3Dsquared( station ); - } - - // check if any of the remaining stations are closer - for ( unsigned int i = 1; i < stations.size(); ++i ) { + // find the closest station within a sensible range (FG_NAV_MAX_RANGE) + for ( unsigned int i = 0; i < stations.size(); ++i ) { // cout << "testing " << current->get_ident() << endl; station = Point3D( stations[i]->get_x(), stations[i]->get_y(), stations[i]->get_z() ); - d2 = aircraft.distance3Dsquared( station ); + dist = aircraft.distance3D( station ); // cout << " dist = " << sqrt(d) // << " range = " << current->get_range() * SG_NM_TO_METER // << endl; - if ( d2 < min_dist ) { - min_dist = d2; + if ( dist < min_dist ) { + min_dist = dist; nav = stations[i]; } } diff --git a/src/Navaids/navrecord.hxx b/src/Navaids/navrecord.hxx index ab1ca85c0..dcd7b36bd 100644 --- a/src/Navaids/navrecord.hxx +++ b/src/Navaids/navrecord.hxx @@ -43,9 +43,10 @@ SG_USING_STD(istream); -#define FG_NAV_DEFAULT_RANGE 50 -#define FG_LOC_DEFAULT_RANGE 18 -#define FG_DME_DEFAULT_RANGE 50 +#define FG_NAV_DEFAULT_RANGE 50 // nm +#define FG_LOC_DEFAULT_RANGE 18 // nm +#define FG_DME_DEFAULT_RANGE 50 // nm +#define FG_NAV_MAX_RANGE 300 // nm class FGNavRecord {