]> git.mxchange.org Git - flightgear.git/blobdiff - src/Airports/apt_loader.cxx
This should apply, and everything should build cleanly, in isolation from the
[flightgear.git] / src / Airports / apt_loader.cxx
index a7475c70823b75f93a2104257e9db91b61e6939d..896be4ea1b4b737cad102182d3dc698e1f89c688 100644 (file)
@@ -37,7 +37,7 @@
 #include <simgear/misc/sgstream.hxx>
 #include <simgear/misc/strutils.hxx>
 
-#include STL_STRING
+#include <string>
 
 #include "simple.hxx"
 #include "runways.hxx"
 
 static void addAirport(FGAirportList *airports, const string& apt_id, const string& apt_name,
     int rwy_count, double rwy_lat_accum, double rwy_lon_accum, double last_rwy_heading,
-    double apt_elev, SGGeod& tower, bool got_tower)
+    double apt_elev, SGGeod& tower, bool got_tower, int type)
 {
-    if (!apt_id.empty()) {
-        if (rwy_count > 0) {
-            double lat = rwy_lat_accum / (double)rwy_count;
-            double lon = rwy_lon_accum / (double)rwy_count;
-
-            if (!got_tower) {
-                // tower height hard coded for now...
-                const float tower_height = 50.0f;
-                // make a little off the heading for 1 runway airports...
-                float fudge_lon = fabs(sin(last_rwy_heading * SGD_DEGREES_TO_RADIANS)) * .003f;
-                float fudge_lat = .003f - fudge_lon;
-        
-                tower = SGGeod::fromDegFt(lon + fudge_lon, lat + fudge_lat, apt_elev + tower_height);
-            }
-                    
-            airports->add(apt_id, SGGeod::fromDegFt(lon, lat, apt_elev), tower, apt_name, false);
-        } else {
-            if ( apt_id.length() ) {
-                SG_LOG(SG_GENERAL, SG_ALERT, "ERROR: No runways for " << apt_id
-                        << ", skipping." );
-            }
-        }
+    if (apt_id.empty())
+        return;
+
+    if (!rwy_count) {
+        SG_LOG(SG_GENERAL, SG_ALERT, "ERROR: No runways for " << apt_id
+                << ", skipping." );
+        return;
     }
+
+    double lat = rwy_lat_accum / (double)rwy_count;
+    double lon = rwy_lon_accum / (double)rwy_count;
+
+    if (!got_tower) {
+        // tower height hard coded for now...
+        const float tower_height = 50.0f;
+        // make a little off the heading for 1 runway airports...
+        float fudge_lon = fabs(sin(last_rwy_heading * SGD_DEGREES_TO_RADIANS)) * .003f;
+        float fudge_lat = .003f - fudge_lon;
+        tower = SGGeod::fromDegFt(lon + fudge_lon, lat + fudge_lat, apt_elev + tower_height);
+    }
+
+    airports->add(apt_id, SGGeod::fromDegFt(lon, lat, apt_elev), tower, apt_name, false,
+            type == 1/*airport*/, type == 16/*seaport*/, type == 17/*heliport*/);
 }
 
 // Load the airport data base from the specified aptdb file.  The
@@ -94,7 +94,7 @@ bool fgAirportDBLoad( FGAirportList *airports, FGRunwayList *runways,
     double last_apt_elev = 0.0;
     string last_apt_name = "";
     string last_apt_info = "";
-    string last_apt_type = "";
+    int last_apt_type = 0;
     SGGeod last_tower;
     bool got_tower = false;
     string line;
@@ -151,7 +151,7 @@ bool fgAirportDBLoad( FGAirportList *airports, FGRunwayList *runways,
                     << elev );
 
             addAirport(airports, last_apt_id, last_apt_name, rwy_count, rwy_lat_accum, rwy_lon_accum,
-                last_rwy_heading, last_apt_elev, last_tower, got_tower);
+                last_rwy_heading, last_apt_elev, last_tower, got_tower, last_apt_type);
 
             last_apt_id = id;
             last_apt_elev = elev;
@@ -166,7 +166,7 @@ bool fgAirportDBLoad( FGAirportList *airports, FGRunwayList *runways,
             last_apt_name += token[token.size() - 1];
 
             last_apt_info = line;
-            last_apt_type = token[0];
+            last_apt_type = atoi( token[0].c_str() );
 
             // clear runway list for start of next airport
             rwy_lon_accum = 0.0;
@@ -231,6 +231,8 @@ bool fgAirportDBLoad( FGAirportList *airports, FGRunwayList *runways,
             // windsock entry (ignore)
         } else if ( line_id == 15 ) {
             // custom startup locations (ignore)
+        } else if ( line_id == 0 ) {
+            // ??
         } else if ( line_id >= 50 && line_id <= 56 ) {
             // frequency entries (ignore)
         } else if ( line_id == 99 ) {
@@ -242,9 +244,9 @@ bool fgAirportDBLoad( FGAirportList *airports, FGRunwayList *runways,
         }
     }
 
-    // add the last airport being processed if any    
+    // add the last airport being processed if any
     addAirport(airports, last_apt_id, last_apt_name, rwy_count, rwy_lat_accum, rwy_lon_accum,
-        last_rwy_heading, last_apt_elev, last_tower, got_tower);
+        last_rwy_heading, last_apt_elev, last_tower, got_tower, 0);
 
 
     //