X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNavaids%2Ffixlist.cxx;h=50c06ac563c804bb99eda19862fc2921386b20ac;hb=37591d0ac9c316f107a3c38043edd3a7f89b4892;hp=b4548a66d74cd27cd0aa1954c3c567046fe7940b;hpb=d777d035a9a56f04e3956abb68930342b9a83a35;p=flightgear.git diff --git a/src/Navaids/fixlist.cxx b/src/Navaids/fixlist.cxx index b4548a66d..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,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,15 +25,22 @@ # include #endif +#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 ) { @@ -46,10 +53,7 @@ FGFixList::~FGFixList( void ) { // load the navaids and build the map -bool FGFixList::init( SGPath path ) { - - fixlist.erase( fixlist.begin(), fixlist.end() ); - +bool FGFixList::init(const SGPath& path ) { sg_gzifstream in( path.str() ); if ( !in.is_open() ) { SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << path.str() ); @@ -61,62 +65,16 @@ bool FGFixList::init( SGPath path ) { 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; + 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; } - - 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; - } -} - - -// 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 ) -{ - *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; }