]> git.mxchange.org Git - flightgear.git/blobdiff - src/Navaids/navlist.cxx
Bug #927 - flightplan XML loading.
[flightgear.git] / src / Navaids / navlist.cxx
index 67b6d44c6e69ad47197870dd274d310b35a56557..eb6bac7547b2d80060f488e65b42e8fa1e422f49 100644 (file)
@@ -169,7 +169,7 @@ FGNavRecord *FGNavList::findByFreq( double freq, const SGGeod& position,
                                    TypeFilter* filter)
 {
   flightgear::NavDataCache* cache = flightgear::NavDataCache::instance();
-  int freqKhz = static_cast<int>(freq * 100);
+  int freqKhz = static_cast<int>(freq * 100 + 0.5);
   PositionedIDVec stations(cache->findNavaidsByFreq(freqKhz, position, filter));
   if (stations.empty()) {
     return NULL;
@@ -182,6 +182,10 @@ FGNavRecord *FGNavList::findByFreq( double freq, const SGGeod& position,
     
   BOOST_FOREACH(PositionedID id, stations) {
     FGNavRecord* station = (FGNavRecord*) cache->loadById(id);
+    if (!filter->pass(station)) {
+      continue;
+    }
+    
     double d2 = distSqr(station->cart(), acCart);
     if (d2 > min_dist) {
     // since results are sorted by proximity, as soon as we pass the
@@ -201,13 +205,20 @@ FGNavRecord *FGNavList::findByFreq( double freq, const SGGeod& position,
 FGNavRecord *FGNavList::findByFreq( double freq, TypeFilter* filter)
 {
   flightgear::NavDataCache* cache = flightgear::NavDataCache::instance();
-  int freqKhz = static_cast<int>(freq * 1000);
+  int freqKhz = static_cast<int>(freq * 100 + 0.5);
   PositionedIDVec stations(cache->findNavaidsByFreq(freqKhz, filter));
   if (stations.empty()) {
     return NULL;
   }
 
-  return (FGNavRecord*) cache->loadById(stations.front());
+  BOOST_FOREACH(PositionedID id, stations) {
+    FGNavRecord* station = (FGNavRecord*) cache->loadById(id);
+    if (filter->pass(station)) {
+      return station;
+    }
+  }
+
+  return NULL;
 }
 
 nav_list_type FGNavList::findAllByFreq( double freq, const SGGeod& position,
@@ -216,11 +227,16 @@ nav_list_type FGNavList::findAllByFreq( double freq, const SGGeod& position,
   nav_list_type stations;
   
   flightgear::NavDataCache* cache = flightgear::NavDataCache::instance();
-  int freqKhz = static_cast<int>(freq * 1000);
+  int freqKhz = static_cast<int>(freq * 1000 + 0.5);
   PositionedIDVec ids(cache->findNavaidsByFreq(freqKhz, position, filter));
   
   BOOST_FOREACH(PositionedID id, ids) {
-    stations.push_back((FGNavRecord*) cache->loadById(id));
+    FGNavRecord* station = (FGNavRecord*) cache->loadById(id);
+    if (!filter->pass(station)) {
+      continue;
+    }
+
+    stations.push_back(station);
   }
   
   return stations;
@@ -286,7 +302,7 @@ bool FGTACANList::add( FGTACANRecord *c )
 FGTACANRecord *FGTACANList::findByChannel( const string& channel )
 {
     const tacan_list_type& stations = ident_channels[channel];
-    SG_LOG( SG_INSTR, SG_DEBUG, "findByChannel " << channel<< " size " << stations.size() );
+    SG_LOG( SG_NAVAID, SG_DEBUG, "findByChannel " << channel<< " size " << stations.size() );
 
     if (!stations.empty()) {
         return stations[0];