]> git.mxchange.org Git - flightgear.git/commitdiff
Allow distinguishing un-towered airports.
authorJames Turner <zakalawe@mac.com>
Wed, 11 Nov 2015 17:03:47 +0000 (17:03 +0000)
committerJames Turner <zakalawe@mac.com>
Mon, 23 Nov 2015 00:47:01 +0000 (00:47 +0000)
src/Airports/airport.cxx
src/Airports/apt_loader.cxx

index ce8fd1a39edf8586b6bc3f746d50ec2af94f01dd..4b0270ea9bdda899e90640ad64baabc7391a4557 100644 (file)
@@ -680,6 +680,16 @@ void FGAirport::validateTowerData() const
   if (towers.empty()) {
     mHasTower = false;
     mTowerPosition = geod(); // use airport position
+
+    // offset the tower position away from the runway centerline, if
+    // airport has a single runway. Offset by eight times the runway width,
+    // an entirely guessed figure.
+    if (numRunways() <= 2) {
+        FGRunway* runway = getRunwayByIndex(0);
+        double hdg = runway->headingDeg() + 90;
+        mTowerPosition = SGGeodesy::direct(geod(), hdg, runway->widthM() * 8);
+    }
+
     // increase tower elevation by 20 metres above the field elevation
     mTowerPosition.setElevationM(geod().getElevationM() + 20.0);
   } else {
index 4d159d7fc0128ee026caf0342d3b0df90c18ebc4..9e6a475884228a25fd99206f89c82afbac7b1493 100644 (file)
@@ -159,9 +159,7 @@ public:
         double lat = atof( token[1].c_str() );
         double lon = atof( token[2].c_str() );
         double elev = atof( token[3].c_str() );
-        tower = SGGeod::fromDegFt(lon, lat, elev + last_apt_elev);
-        got_tower = true;
-        
+        tower = SGGeod::fromDegFt(lon, lat, elev + last_apt_elev);        
         cache->insertTower(currentAirportID, tower);
       } else if ( line_id == 19 ) {
           // windsock entry (ignore)
@@ -207,7 +205,6 @@ private:
   double rwy_lon_accum;
   double last_rwy_heading;
   int rwy_count;
-  bool got_tower;
   string last_apt_id;
   double last_apt_elev;
   SGGeod tower;
@@ -238,17 +235,6 @@ private:
     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, last_apt_elev + tower_height);
-      
-      cache->insertTower(currentAirportID, tower);
-    }
-
     SGGeod pos(SGGeod::fromDegFt(lon, lat, last_apt_elev));
     cache->updatePosition(currentAirportID, pos);
     
@@ -264,7 +250,6 @@ private:
     finishAirport();
             
     last_apt_elev = elev;
-    got_tower = false;
 
     string name;
     // build the name