Start of code to load, manage, and query the navaid database.
This commit is contained in:
parent
460ef49a4c
commit
7a16ec4fb4
6 changed files with 302 additions and 0 deletions
10
src/Navaids/Makefile.am
Normal file
10
src/Navaids/Makefile.am
Normal file
|
@ -0,0 +1,10 @@
|
|||
noinst_LIBRARIES = libNavAids.a
|
||||
|
||||
noinst_PROGRAMS = testnavs
|
||||
|
||||
libNavAids_a_SOURCES = navaid.hxx navaids.hxx navaids.cxx
|
||||
|
||||
testnavs_SOURCES = testnavs.cxx
|
||||
testnavs_LDADD = libNavAids.a -lsgdebug -lsgmisc -lz
|
||||
|
||||
INCLUDES += -I$(top_builddir) -I$(top_builddir)/src
|
24
src/Navaids/navaid.cxx
Normal file
24
src/Navaids/navaid.cxx
Normal file
|
@ -0,0 +1,24 @@
|
|||
// navaid.cxx -- navaid class
|
||||
//
|
||||
// Written by Curtis Olson, started April 2000.
|
||||
//
|
||||
// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
// published by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but
|
||||
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// General Public License for more details.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
// $Id$
|
||||
|
||||
|
||||
#include "navaid.hxx"
|
102
src/Navaids/navaid.hxx
Normal file
102
src/Navaids/navaid.hxx
Normal file
|
@ -0,0 +1,102 @@
|
|||
// navaid.hxx -- navaid class
|
||||
//
|
||||
// Written by Curtis Olson, started April 2000.
|
||||
//
|
||||
// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
// published by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but
|
||||
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// General Public License for more details.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
// $Id$
|
||||
|
||||
|
||||
#ifndef _FG_NAVAID_HXX
|
||||
#define _FG_NAVAID_HXX
|
||||
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
#include <simgear/misc/fgstream.hxx>
|
||||
|
||||
#ifdef FG_HAVE_STD_INCLUDES
|
||||
# include <istream>
|
||||
#elif defined( FG_HAVE_NATIVE_SGI_COMPILERS )
|
||||
# include <iostream.h>
|
||||
#elif defined( __BORLANDC__ )
|
||||
# include <iostream>
|
||||
#else
|
||||
# include <istream.h>
|
||||
#endif
|
||||
|
||||
#if ! defined( FG_HAVE_NATIVE_SGI_COMPILERS )
|
||||
FG_USING_STD(istream);
|
||||
#endif
|
||||
|
||||
|
||||
class FGNavAid {
|
||||
|
||||
char type;
|
||||
double lon, lat;
|
||||
double elev;
|
||||
int freq;
|
||||
int range;
|
||||
bool dme;
|
||||
char ident[5];
|
||||
|
||||
public:
|
||||
|
||||
inline FGNavAid(void) {}
|
||||
inline ~FGNavAid(void) {}
|
||||
|
||||
inline char get_type() const { return type; }
|
||||
inline double get_lon() const { return lon; }
|
||||
inline double get_lat() const { return lat; }
|
||||
inline double get_elev() const { return elev; }
|
||||
inline int get_freq() const { return freq; }
|
||||
inline int get_range() const { return range; }
|
||||
inline bool get_dme() const { return dme; }
|
||||
inline char *get_ident() { return ident; }
|
||||
|
||||
inline void set_type( char t ) { type = t; }
|
||||
inline void set_lon( double l ) { lon = l; }
|
||||
inline void set_lat( double l ) { lat = l; }
|
||||
inline void set_elev( double e ) { elev = e; }
|
||||
inline void set_freq( int f ) { freq = f; }
|
||||
inline void set_range( int r ) { range = r; }
|
||||
inline void set_dme( bool b ) { dme = b; }
|
||||
inline void set_ident( char *i ) { strncpy( ident, i, 5 ); }
|
||||
|
||||
friend istream& operator>> ( istream&, FGNavAid& );
|
||||
};
|
||||
|
||||
|
||||
inline istream&
|
||||
operator >> ( istream& in, FGNavAid& n )
|
||||
{
|
||||
double f;
|
||||
char c;
|
||||
in >> n.type >> n.lon >> n.lat >> n.elev >> f >> n.range
|
||||
>> c >> n.ident;
|
||||
|
||||
n.freq = (int)(f * 100.0);
|
||||
if ( c == 'Y' ) {
|
||||
n.dme = true;
|
||||
} else {
|
||||
n.dme = false;
|
||||
}
|
||||
|
||||
return in >> skipeol;
|
||||
}
|
||||
|
||||
|
||||
#endif // _FG_NAVAID_HXX
|
89
src/Navaids/navaids.cxx
Normal file
89
src/Navaids/navaids.cxx
Normal file
|
@ -0,0 +1,89 @@
|
|||
// navaids.cxx -- navaids management class
|
||||
//
|
||||
// Written by Curtis Olson, started April 2000.
|
||||
//
|
||||
// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
// published by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but
|
||||
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// General Public License for more details.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
// $Id$
|
||||
|
||||
|
||||
#include <simgear/misc/fgstream.hxx>
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
|
||||
#include "navaids.hxx"
|
||||
|
||||
|
||||
// Constructor
|
||||
FGNavAids::FGNavAids( void ) {
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
FGNavAids::~FGNavAids( void ) {
|
||||
}
|
||||
|
||||
|
||||
// load the navaids and build the map
|
||||
bool FGNavAids::init( FGPath path ) {
|
||||
FGNavAid n;
|
||||
|
||||
navaids.erase( navaids.begin(), navaids.end() );
|
||||
|
||||
fg_gzifstream in( path.str() );
|
||||
if ( !in.is_open() ) {
|
||||
FG_LOG( FG_GENERAL, FG_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' && n.get_type() != '[' ) {
|
||||
in.putback(c);
|
||||
in >> n;
|
||||
if ( n.get_type() != '[' ) {
|
||||
navaids[n.get_freq()].push_back(n);
|
||||
}
|
||||
in >> skipcomment;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
while ( ! in.eof() && n.get_type() != '[' ) {
|
||||
in >> n;
|
||||
/* 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 ( n.get_type() != '[' ) {
|
||||
navaids[n.get_freq()].push_back(n);
|
||||
}
|
||||
in >> skipcomment;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
66
src/Navaids/navaids.hxx
Normal file
66
src/Navaids/navaids.hxx
Normal file
|
@ -0,0 +1,66 @@
|
|||
// navaids.hxx -- navaids management class
|
||||
//
|
||||
// Written by Curtis Olson, started April 2000.
|
||||
//
|
||||
// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
// published by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but
|
||||
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// General Public License for more details.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
// $Id$
|
||||
|
||||
|
||||
#ifndef _FG_NAVAIDS_HXX
|
||||
#define _FG_NAVAIDS_HXX
|
||||
|
||||
|
||||
#include <simgear/compiler.h>
|
||||
#include <simgear/misc/fgpath.hxx>
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#include "navaid.hxx"
|
||||
|
||||
FG_USING_STD(map);
|
||||
FG_USING_STD(vector);
|
||||
|
||||
|
||||
// convenience types
|
||||
typedef vector < FGNavAid > nav_list_type;
|
||||
typedef nav_list_type::iterator nav_list_iterator;
|
||||
typedef nav_list_type::const_iterator nav_list_const_iterator;
|
||||
|
||||
typedef map < int, nav_list_type, less<int> > nav_map_type;
|
||||
typedef nav_map_type::iterator nav_map_iterator;
|
||||
typedef nav_map_type::const_iterator nav_map_const_iterator;
|
||||
|
||||
class FGNavAids {
|
||||
|
||||
nav_map_type navaids;
|
||||
|
||||
public:
|
||||
|
||||
FGNavAids();
|
||||
~FGNavAids();
|
||||
|
||||
// load the navaids and build the map
|
||||
bool init( FGPath path );
|
||||
|
||||
// query the database for the specified frequency
|
||||
FGNavAid query( double lon, double lat, int freq );
|
||||
};
|
||||
|
||||
|
||||
#endif // _FG_NAVAIDS_HXX
|
11
src/Navaids/testnavs.cxx
Normal file
11
src/Navaids/testnavs.cxx
Normal file
|
@ -0,0 +1,11 @@
|
|||
#include <simgear/misc/fgpath.hxx>
|
||||
|
||||
#include "navaids.hxx"
|
||||
|
||||
int main() {
|
||||
FGNavAids navs;
|
||||
|
||||
FGPath p( "/home/curt/FlightGear/Navaids/default.nav.gz" );
|
||||
|
||||
navs.init( p );
|
||||
}
|
Loading…
Add table
Reference in a new issue