#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
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;
<< 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;
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;
// 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 ) {
}
}
- // 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);
//