X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNavaids%2Ffixlist.cxx;h=50c06ac563c804bb99eda19862fc2921386b20ac;hb=038251e8af6ff9c24afcc08169c2bcca2c5a63c5;hp=935886cbd037fd4090fe246fbaaeeb6e56f7a568;hpb=32528d0cd65eb1aec904f25b692b2f961c028bfa;p=flightgear.git diff --git a/src/Navaids/fixlist.cxx b/src/Navaids/fixlist.cxx index 935886cbd..50c06ac56 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,20 +16,31 @@ // // 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; - +FGFix::FGFix(const std::string& aIdent, const SGGeod& aPos) : + FGPositioned(FIX, aIdent, aPos) +{ + init(true); // init FGPositioned +} // Constructor FGFixList::FGFixList( void ) { @@ -42,73 +53,28 @@ 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() ); +bool FGFixList::init(const SGPath& path ) { + sg_gzifstream in( path.str() ); if ( !in.is_open() ) { - FG_LOG( FG_GENERAL, FG_ALERT, "Cannot open file: " << path.str() ); + SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << path.str() ); exit(-1); } - // read in each line of the file - + // toss the first two lines of the file + in >> skipeol; 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; -} - -// 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 ) -{ - *fix = fixlist[ident]; - if ( fix->get_ident() == "" ) { - return false; + // 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; + + // fix gets added to the FGPositioned spatial indices, so we don't need + // to hold onto it here. + new FGFix(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; }