X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNavaids%2Ffixlist.cxx;h=2dc8806eab1dfaacb45ea7c1790c7a441b031bf6;hb=6bf47cd248ed388e6a4dd3ffa2d00977b00b62fb;hp=c9e6515c9138a946ea4c8f07e1ca1bb2c3273dba;hpb=8765d770f8acc5f3b8815b15959588320e9345c1;p=flightgear.git diff --git a/src/Navaids/fixlist.cxx b/src/Navaids/fixlist.cxx index c9e6515c9..2dc8806ea 100644 --- a/src/Navaids/fixlist.cxx +++ b/src/Navaids/fixlist.cxx @@ -16,7 +16,7 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -25,108 +25,51 @@ # include #endif +#include + #include #include +#include #include #include "fixlist.hxx" +#include +#include - -// Constructor -FGFixList::FGFixList( void ) { -} - - -// Destructor -FGFixList::~FGFixList( void ) { -} - - -// load the navaids and build the map -bool FGFixList::init( SGPath path ) { - fixlist.erase( fixlist.begin(), fixlist.end() ); - - sg_gzifstream in( path.str() ); - if ( !in.is_open() ) { - SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << path.str() ); - exit(-1); - } - - // toss the first two lines of the file - in >> skipeol; - in >> skipeol; - - // read in each remaining line of the file - -#ifdef __MWERKS__ - char c = 0; - while ( in.get(c) && c != '\0' ) { - in.putback(c); -#else - while ( ! in.eof() ) { -#endif - - FGFix fix; - in >> fix; - if ( fix.get_lat() > 95.0 ) { - break; - } - - /* cout << "ident=" << fix.get_ident() - << ", lat=" << fix.get_lat() - << ", lon=" << fix.get_lon() << endl; */ - - fixlist[fix.get_ident()] = fix; - in >> skipcomment; - } - return true; -} - - -// query the database for the specified fix, lon and lat are in -// degrees, elev is in meters -bool FGFixList::query( const string& ident, FGFix *fix ) { - *fix = fixlist[ident]; - if ( ! fix->get_ident().empty() ) { - return true; - } else { - return false; - } +FGFix::FGFix(PositionedID aGuid, const std::string& aIdent, const SGGeod& aPos) : + FGPositioned(aGuid, FIX, aIdent, aPos) +{ } -// query the database for the specified fix, lon and lat are in -// degrees, elev is in meters -bool FGFixList::query_and_offset( const string& ident, double lon, double lat, - double elev, FGFix *fix, double *heading, - double *dist ) +namespace flightgear { - *fix = fixlist[ident]; - if ( fix->get_ident().empty() ) { - return false; - } - - double az1, az2, s; - geo_inverse_wgs_84( elev, lat, lon, - fix->get_lat(), fix->get_lon(), - &az1, &az2, &s ); - // cout << " dist = " << s << endl; - *heading = az2; - *dist = s; - return true; -} - -const FGFix* FGFixList::findFirstByIdent( const string& ident, bool exact) + +void loadFixes(const SGPath& path) { - fix_map_iterator itr; - if(exact) { - itr = fixlist.find(ident); - } else { - itr = fixlist.lower_bound(ident); - } - if(itr == fixlist.end()) { - return(NULL); - } else { - return(&(itr->second)); - } + sg_gzifstream in( path.str() ); + if ( !in.is_open() ) { + SG_LOG( SG_NAVAID, SG_ALERT, "Cannot open file: " << path.str() ); + exit(-1); + } + + // toss the first two lines of the file + in >> skipeol; + in >> skipeol; + + NavDataCache* cache = NavDataCache::instance(); + + // read in each remaining line of the file + while ( ! in.eof() ) { + double lat, lon; + std::string ident; + in >> lat >> lon >> ident; + if (lat > 95) break; + + cache->insertFix(ident, SGGeod::fromDeg(lon, lat)); + in >> skipcomment; + } + } + +} // of namespace flightgear;