]> git.mxchange.org Git - flightgear.git/commitdiff
A first stab at limiting the noaa.gov query to only valid stations. There
authorcurt <curt>
Mon, 23 Feb 2004 18:25:29 +0000 (18:25 +0000)
committercurt <curt>
Mon, 23 Feb 2004 18:25:29 +0000 (18:25 +0000)
are many recognized limitations and inefficiencies with this entire approach,
however, it's a quick and dirty way to get something working, where before
we didn't.

src/Airports/simple.cxx
src/Airports/simple.hxx
src/Main/fg_init.cxx

index e27946169ca0075f6f6e1365d73af11ad70de9c4..a0fd2aecffb0e6eb6ddd6530901ee66b3a0daf97 100644 (file)
@@ -54,35 +54,65 @@ operator >> ( istream& in, FGAirport& a )
     in.getline( name, 256 );
     a.name = name;
 
-    // a.has_metar = true;         // assume true
-    // only airports with four-letter codes can have metar stations
+    a.has_metar = false;
+
+#if 0
+    // As a quick seed for the has_metar value, only airports with
+    // four-letter codes can have metar stations
     a.has_metar = (isalpha(a.id[0]) && isalpha(a.id[1]) && isalpha(a.id[2])
         && isalpha(a.id[3]) && !a.id[4]);
+#endif
 
     return in;
 }
 
 
-FGAirportList::FGAirportList( const string& file ) {
-    SG_LOG( SG_GENERAL, SG_DEBUG, "Reading simple airport list: " << file );
+FGAirportList::FGAirportList( const string &airport_file,
+                              const string &metar_file ) {
+    SG_LOG( SG_GENERAL, SG_INFO, "Reading simple airport list: "
+            << airport_file );
 
     // open the specified file for reading
-    sg_gzifstream in( file );
-    if ( !in.is_open() ) {
-        SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << file );
+    sg_gzifstream apt_in( airport_file );
+    if ( !apt_in.is_open() ) {
+        SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << airport_file );
        exit(-1);
     }
 
     // skip header line
-    in >> skipeol;
+    apt_in >> skipeol;
 
     FGAirport a;
-    int size = 0;
-    while ( in ) {
-        in >> a;
+    while ( apt_in ) {
+        apt_in >> a;
         airports_by_id[a.id] = a;
         airports_array.push_back( &airports_by_id[a.id] );
-        size++;
+    }
+
+
+    SG_LOG( SG_GENERAL, SG_INFO, "Reading simple metar station list: "
+            << metar_file );
+
+    // open the specified file for reading
+    sg_gzifstream metar_in( metar_file );
+    if ( !metar_in.is_open() ) {
+        SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << metar_file );
+    }
+
+    string ident;
+    while ( metar_in ) {
+        metar_in >> ident;
+        if ( ident == "#" || ident == "//" ) {
+            metar_in >> skipeol;
+        } else {
+            airport_map_iterator apt = airports_by_id.find( ident );
+            if ( apt == airports_by_id.end() ) {
+                SG_LOG( SG_GENERAL, SG_DEBUG, "no apt = " << ident );
+            } else {
+                SG_LOG( SG_GENERAL, SG_DEBUG, "metar = " << ident );
+                airports_by_id[ident].has_metar = true;
+            }
+        }
     }
 }
 
index 7d3372ecbea3bda853f5f3bba14f94a72d411b7f..9b98f97a49fbd035294ea73ee8ae27946bbae5af 100644 (file)
@@ -75,7 +75,7 @@ private:
 public:
 
     // Constructor
-    FGAirportList( const stringfile );
+    FGAirportList( const string &airport_file, const string &metar_file );
 
     // Destructor
     ~FGAirportList();
index 8691347359c55581c42e880878f72e44f48217ef..d2ff2eea226b6f25fc8c6e4c0099d4f8f26b964f 100644 (file)
@@ -1009,7 +1009,9 @@ fgInitNav ()
     SG_LOG(SG_GENERAL, SG_INFO, "Loading Simple Airport List");
     SGPath p_simple( globals->get_fg_root() );
     p_simple.append( "Airports/basic.dat" );
-    FGAirportList *airports = new FGAirportList( p_simple.str() );
+    SGPath p_metar( globals->get_fg_root() );
+    p_metar.append( "Airports/metar.dat" );
+    FGAirportList *airports = new FGAirportList(p_simple.str(), p_metar.str());
     globals->set_airports( airports );
 
     SG_LOG(SG_GENERAL, SG_INFO, "Loading Runway List");