X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNavaids%2Ffixlist.cxx;h=2dc8806eab1dfaacb45ea7c1790c7a441b031bf6;hb=6bf47cd248ed388e6a4dd3ffa2d00977b00b62fb;hp=bb7c643df343ba8d0cc2c30f718f51ad16431175;hpb=182fd42b4017fa54d680508c092ea1b216398a00;p=flightgear.git diff --git a/src/Navaids/fixlist.cxx b/src/Navaids/fixlist.cxx index bb7c643df..2dc8806ea 100644 --- a/src/Navaids/fixlist.cxx +++ b/src/Navaids/fixlist.cxx @@ -2,7 +2,7 @@ // // Written by Curtis Olson, started April 2000. // -// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org +// Copyright (C) 2000 Curtis L. Olson - http://www.flightgear.org/~curt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -16,99 +16,60 @@ // // 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$ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + #include -#include +#include +#include #include #include "fixlist.hxx" +#include +#include - -FGFixList *current_fixlist; - - -// Constructor -FGFixList::FGFixList( void ) { -} - - -// Destructor -FGFixList::~FGFixList( void ) { -} - - -// load the navaids and build the map -bool FGFixList::init( FGPath path ) { - FGFix fix; - - fixlist.erase( fixlist.begin(), fixlist.end() ); - - fg_gzifstream in( path.str() ); - if ( !in.is_open() ) { - SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << path.str() ); - exit(-1); - } - - // read in each line of the file - - in >> skipeol; - in >> skipcomment; - -#ifdef __MWERKS__ - - char c = 0; - while ( in.get(c) && c != '\0' && fix.get_ident() != "[End]" ) { - in.putback(c); - in >> fix; - if ( fix.get_ident() != "[End]" ) { - fixlist[fix.get_ident()] = fix; - } - in >> skipcomment; - } - -#else - - while ( ! in.eof() && fix.get_ident() != "[End]" ) { - in >> fix; - /* cout << "id = " << n.get_ident() << endl; - cout << " type = " << n.get_type() << endl; - cout << " lon = " << n.get_lon() << endl; - cout << " lat = " << n.get_lat() << endl; - cout << " elev = " << n.get_elev() << endl; - cout << " freq = " << n.get_freq() << endl; - cout << " range = " << n.get_range() << endl; */ - if ( fix.get_ident() != "[End]" ) { - fixlist[fix.get_ident()] = fix; - } - in >> skipcomment; - } - -#endif - - return true; +FGFix::FGFix(PositionedID aGuid, const std::string& aIdent, const SGGeod& aPos) : + FGPositioned(aGuid, FIX, aIdent, aPos) +{ } -// query the database for the specified frequency, lon and lat are in -// degrees, elev is in meters -bool FGFixList::query( const string& ident, double lon, double lat, double elev, - FGFix *fix, double *heading, double *dist ) +namespace flightgear +{ + +void loadFixes(const SGPath& path) { - *fix = fixlist[ident]; - if ( fix->get_ident() == "" ) { - return false; - } + 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; + } - 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; } + +} // of namespace flightgear;