APT.DAT version 810 and 850 are both obsolete.
Remove 810 parsing. Eliminate version strings from method names and messages.
This commit is contained in:
parent
eefd878529
commit
913eb83e10
4 changed files with 29 additions and 108 deletions
|
@ -278,18 +278,17 @@ const FGAirport* APTLoader::loadAirport(const string aptDat, const std::string a
|
||||||
// Beware that linesIt->str may end with an '\r' character, see above!
|
// Beware that linesIt->str may end with an '\r' character, see above!
|
||||||
unsigned int rowCode = linesIt->rowCode;
|
unsigned int rowCode = linesIt->rowCode;
|
||||||
|
|
||||||
if ( rowCode == 10 ) { // Runway v810
|
if ( rowCode == 100 ) { // Runway
|
||||||
parseRunwayLine810(aptDat, linesIt->number,
|
parseRunwayLine(aptDat, linesIt->number,
|
||||||
simgear::strutils::split(linesIt->str));
|
simgear::strutils::split(linesIt->str));
|
||||||
} else if ( rowCode == 100 ) { // Runway v850
|
} else if ( rowCode == 101 ) { // Water Runway
|
||||||
parseRunwayLine850(aptDat, linesIt->number,
|
parseWaterRunwayLine(aptDat, linesIt->number,
|
||||||
simgear::strutils::split(linesIt->str));
|
|
||||||
} else if ( rowCode == 101 ) { // Water Runway v850
|
|
||||||
parseWaterRunwayLine850(aptDat, linesIt->number,
|
|
||||||
simgear::strutils::split(linesIt->str));
|
simgear::strutils::split(linesIt->str));
|
||||||
} else if ( rowCode == 102 ) { // Helipad v850
|
} else if ( rowCode == 102 ) { // Helipad
|
||||||
parseHelipadLine850(aptDat, linesIt->number,
|
parseHelipadLine(aptDat, linesIt->number,
|
||||||
simgear::strutils::split(linesIt->str));
|
simgear::strutils::split(linesIt->str));
|
||||||
|
} else if ( rowCode == 105 ) {
|
||||||
|
// ignore runway skidmark
|
||||||
} else if ( rowCode == 18 ) {
|
} else if ( rowCode == 18 ) {
|
||||||
// beacon entry (ignore)
|
// beacon entry (ignore)
|
||||||
} else if ( rowCode == 14 ) { // Viewpoint/control tower
|
} else if ( rowCode == 14 ) { // Viewpoint/control tower
|
||||||
|
@ -310,19 +309,19 @@ const FGAirport* APTLoader::loadAirport(const string aptDat, const std::string a
|
||||||
simgear::strutils::split(linesIt->str));
|
simgear::strutils::split(linesIt->str));
|
||||||
} else if (rowCode == 110) {
|
} else if (rowCode == 110) {
|
||||||
current_block = Pavement;
|
current_block = Pavement;
|
||||||
parsePavementLine850(simgear::strutils::split(linesIt->str, 0, 4));
|
parsePavementLine(simgear::strutils::split(linesIt->str, 0, 4));
|
||||||
} else if (rowCode >= 111 && rowCode <= 116) {
|
} else if (rowCode >= 111 && rowCode <= 116) {
|
||||||
switch (current_block) {
|
switch (current_block) {
|
||||||
case Pavement :
|
case Pavement :
|
||||||
parseNodeLine850(&pavements, aptDat, linesIt->number, rowCode,
|
parseNodeLine(&pavements, aptDat, linesIt->number, rowCode,
|
||||||
simgear::strutils::split(linesIt->str));
|
simgear::strutils::split(linesIt->str));
|
||||||
break;
|
break;
|
||||||
case AirportBoundary :
|
case AirportBoundary :
|
||||||
parseNodeLine850(&airport_boundary, aptDat, linesIt->number, rowCode,
|
parseNodeLine(&airport_boundary, aptDat, linesIt->number, rowCode,
|
||||||
simgear::strutils::split(linesIt->str));
|
simgear::strutils::split(linesIt->str));
|
||||||
break;
|
break;
|
||||||
case LinearFeature :
|
case LinearFeature :
|
||||||
parseNodeLine850(&linear_feature, aptDat, linesIt->number, rowCode,
|
parseNodeLine(&linear_feature, aptDat, linesIt->number, rowCode,
|
||||||
simgear::strutils::split(linesIt->str));
|
simgear::strutils::split(linesIt->str));
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
|
@ -470,89 +469,12 @@ void APTLoader::parseAirportLine(unsigned int rowCode,
|
||||||
id, name);
|
id, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void APTLoader::parseRunwayLine810(const string& aptDat, unsigned int lineNum,
|
void APTLoader::parseRunwayLine(const string& aptDat, unsigned int lineNum,
|
||||||
const vector<string>& token)
|
|
||||||
{
|
|
||||||
if (token.size() < 11) {
|
|
||||||
SG_LOG( SG_GENERAL, SG_WARN,
|
|
||||||
aptDat << ":" << lineNum << ": invalid v810 runway line " <<
|
|
||||||
"(row code 10): at least 11 fields are required" );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
double lat = atof( token[1].c_str() );
|
|
||||||
double lon = atof( token[2].c_str() );
|
|
||||||
rwy_lat_accum += lat;
|
|
||||||
rwy_lon_accum += lon;
|
|
||||||
rwy_count++;
|
|
||||||
|
|
||||||
const string& rwy_no(token[3]);
|
|
||||||
|
|
||||||
double heading = atof( token[4].c_str() );
|
|
||||||
double length = atoi( token[5].c_str() );
|
|
||||||
double width = atoi( token[8].c_str() );
|
|
||||||
length *= SG_FEET_TO_METER;
|
|
||||||
width *= SG_FEET_TO_METER;
|
|
||||||
|
|
||||||
// adjust lat / lon to the start of the runway/taxiway, not the middle
|
|
||||||
SGGeod pos_1 = SGGeodesy::direct( SGGeod::fromDegFt(lon, lat, last_apt_elev),
|
|
||||||
heading, -length/2 );
|
|
||||||
|
|
||||||
last_rwy_heading = heading;
|
|
||||||
|
|
||||||
int surface_code = atoi( token[10].c_str() );
|
|
||||||
|
|
||||||
if (rwy_no[0] == 'x') { // Taxiway
|
|
||||||
cache->insertRunway(
|
|
||||||
FGPositioned::TAXIWAY, rwy_no, pos_1, currentAirportPosID,
|
|
||||||
heading, length, width, 0.0, 0.0, surface_code);
|
|
||||||
} else if (rwy_no[0] == 'H') { // Helipad
|
|
||||||
SGGeod pos(SGGeod::fromDegFt(lon, lat, last_apt_elev));
|
|
||||||
cache->insertRunway(FGPositioned::HELIPAD, rwy_no, pos, currentAirportPosID,
|
|
||||||
heading, length, width, 0.0, 0.0, surface_code);
|
|
||||||
} else {
|
|
||||||
// (pair of) runways
|
|
||||||
string rwy_displ_threshold = token[6];
|
|
||||||
vector<string> displ
|
|
||||||
= simgear::strutils::split( rwy_displ_threshold, "." );
|
|
||||||
double displ_thresh1 = atof( displ[0].c_str() );
|
|
||||||
double displ_thresh2 = atof( displ[1].c_str() );
|
|
||||||
displ_thresh1 *= SG_FEET_TO_METER;
|
|
||||||
displ_thresh2 *= SG_FEET_TO_METER;
|
|
||||||
|
|
||||||
string rwy_stopway = token[7];
|
|
||||||
vector<string> stop
|
|
||||||
= simgear::strutils::split( rwy_stopway, "." );
|
|
||||||
double stopway1 = atof( stop[0].c_str() );
|
|
||||||
double stopway2 = atof( stop[1].c_str() );
|
|
||||||
stopway1 *= SG_FEET_TO_METER;
|
|
||||||
stopway2 *= SG_FEET_TO_METER;
|
|
||||||
|
|
||||||
SGGeod pos_2 = SGGeodesy::direct( pos_1, heading, length );
|
|
||||||
|
|
||||||
PositionedID rwy = cache->insertRunway(FGPositioned::RUNWAY, rwy_no, pos_1,
|
|
||||||
currentAirportPosID, heading, length,
|
|
||||||
width, displ_thresh1, stopway1,
|
|
||||||
surface_code);
|
|
||||||
|
|
||||||
PositionedID reciprocal = cache->insertRunway(
|
|
||||||
FGPositioned::RUNWAY,
|
|
||||||
FGRunway::reverseIdent(rwy_no), pos_2,
|
|
||||||
currentAirportPosID,
|
|
||||||
SGMiscd::normalizePeriodic(0, 360, heading + 180.0),
|
|
||||||
length, width, displ_thresh2, stopway2,
|
|
||||||
surface_code);
|
|
||||||
|
|
||||||
cache->setRunwayReciprocal(rwy, reciprocal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void APTLoader::parseRunwayLine850(const string& aptDat, unsigned int lineNum,
|
|
||||||
const vector<string>& token)
|
const vector<string>& token)
|
||||||
{
|
{
|
||||||
if (token.size() < 26) {
|
if (token.size() < 26) {
|
||||||
SG_LOG( SG_GENERAL, SG_WARN,
|
SG_LOG( SG_GENERAL, SG_WARN,
|
||||||
aptDat << ":" << lineNum << ": invalid v850 runway line " <<
|
aptDat << ":" << lineNum << ": invalid runway line " <<
|
||||||
"(row code 100): at least 26 fields are required" );
|
"(row code 100): at least 26 fields are required" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -626,13 +548,13 @@ void APTLoader::parseRunwayLine850(const string& aptDat, unsigned int lineNum,
|
||||||
cache->setRunwayReciprocal(rwy, reciprocal);
|
cache->setRunwayReciprocal(rwy, reciprocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void APTLoader::parseWaterRunwayLine850(const string& aptDat,
|
void APTLoader::parseWaterRunwayLine(const string& aptDat,
|
||||||
unsigned int lineNum,
|
unsigned int lineNum,
|
||||||
const vector<string>& token)
|
const vector<string>& token)
|
||||||
{
|
{
|
||||||
if (token.size() < 9) {
|
if (token.size() < 9) {
|
||||||
SG_LOG( SG_GENERAL, SG_WARN,
|
SG_LOG( SG_GENERAL, SG_WARN,
|
||||||
aptDat << ":" << lineNum << ": invalid v850 water runway line " <<
|
aptDat << ":" << lineNum << ": invalid water runway line " <<
|
||||||
"(row code 101): at least 9 fields are required" );
|
"(row code 101): at least 9 fields are required" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -676,12 +598,12 @@ void APTLoader::parseWaterRunwayLine850(const string& aptDat,
|
||||||
cache->setRunwayReciprocal(rwy, reciprocal);
|
cache->setRunwayReciprocal(rwy, reciprocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void APTLoader::parseHelipadLine850(const string& aptDat, unsigned int lineNum,
|
void APTLoader::parseHelipadLine(const string& aptDat, unsigned int lineNum,
|
||||||
const vector<string>& token)
|
const vector<string>& token)
|
||||||
{
|
{
|
||||||
if (token.size() < 12) {
|
if (token.size() < 12) {
|
||||||
SG_LOG( SG_GENERAL, SG_WARN,
|
SG_LOG( SG_GENERAL, SG_WARN,
|
||||||
aptDat << ":" << lineNum << ": invalid v850 helipad line " <<
|
aptDat << ":" << lineNum << ": invalid helipad line " <<
|
||||||
"(row code 102): at least 12 fields are required" );
|
"(row code 102): at least 12 fields are required" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -729,7 +651,7 @@ void APTLoader::parseViewpointLine(const string& aptDat, unsigned int lineNum,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void APTLoader::parsePavementLine850(const vector<string>& token)
|
void APTLoader::parsePavementLine(const vector<string>& token)
|
||||||
{
|
{
|
||||||
if ( token.size() >= 5 ) {
|
if ( token.size() >= 5 ) {
|
||||||
pavement_ident = token[4];
|
pavement_ident = token[4];
|
||||||
|
@ -741,7 +663,7 @@ void APTLoader::parsePavementLine850(const vector<string>& token)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void APTLoader::parseNodeLine850(NodeList *nodelist,
|
void APTLoader::parseNodeLine(NodeList *nodelist,
|
||||||
const string& aptDat,
|
const string& aptDat,
|
||||||
unsigned int lineNum, int rowCode,
|
unsigned int lineNum, int rowCode,
|
||||||
const vector<string>& token)
|
const vector<string>& token)
|
||||||
|
@ -751,7 +673,7 @@ void APTLoader::parseNodeLine850(NodeList *nodelist,
|
||||||
|
|
||||||
if (token.size() < minNbTokens[rowCode-111]) {
|
if (token.size() < minNbTokens[rowCode-111]) {
|
||||||
SG_LOG( SG_GENERAL, SG_WARN,
|
SG_LOG( SG_GENERAL, SG_WARN,
|
||||||
aptDat << ":" << lineNum << ": invalid v850 node line " <<
|
aptDat << ":" << lineNum << ": invalid node line " <<
|
||||||
"(row code " << rowCode << "): at least " <<
|
"(row code " << rowCode << "): at least " <<
|
||||||
minNbTokens[rowCode-111] << " fields are required" );
|
minNbTokens[rowCode-111] << " fields are required" );
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -109,18 +109,17 @@ private:
|
||||||
void parseAirportLine(unsigned int rowCode,
|
void parseAirportLine(unsigned int rowCode,
|
||||||
const std::vector<std::string>& token);
|
const std::vector<std::string>& token);
|
||||||
void finishAirport(const std::string& aptDat);
|
void finishAirport(const std::string& aptDat);
|
||||||
void parseRunwayLine810(const std::string& aptDat, unsigned int lineNum,
|
void parseRunwayLine(const std::string& aptDat, unsigned int lineNum,
|
||||||
const std::vector<std::string>& token);
|
const std::vector<std::string>& token);
|
||||||
void parseRunwayLine850(const std::string& aptDat, unsigned int lineNum,
|
void parseWaterRunwayLine(const std::string& aptDat, unsigned int lineNum,
|
||||||
const std::vector<std::string>& token);
|
|
||||||
void parseWaterRunwayLine850(const std::string& aptDat, unsigned int lineNum,
|
|
||||||
const std::vector<std::string>& token);
|
const std::vector<std::string>& token);
|
||||||
void parseHelipadLine850(const std::string& aptDat, unsigned int lineNum,
|
void parseHelipadLine(const std::string& aptDat, unsigned int lineNum,
|
||||||
const std::vector<std::string>& token);
|
const std::vector<std::string>& token);
|
||||||
void parseViewpointLine(const std::string& aptDat, unsigned int lineNum,
|
void parseViewpointLine(const std::string& aptDat, unsigned int lineNum,
|
||||||
const std::vector<std::string>& token);
|
const std::vector<std::string>& token);
|
||||||
void parsePavementLine850(const std::vector<std::string>& token);
|
void parsePavementLine(const std::vector<std::string>& token);
|
||||||
void parseNodeLine850(
|
|
||||||
|
void parseNodeLine(
|
||||||
NodeList *nodelist,
|
NodeList *nodelist,
|
||||||
const std::string& aptDat, unsigned int lineNum, int rowCode,
|
const std::string& aptDat, unsigned int lineNum, int rowCode,
|
||||||
const std::vector<std::string>& token);
|
const std::vector<std::string>& token);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// pavement.cxx - class to represent complex taxiway specified in v850 apt.dat
|
// pavement.cxx - class to represent complex taxiway specified in apt.dat
|
||||||
//
|
//
|
||||||
// Copyright (C) 2009 Frederic Bouvier
|
// Copyright (C) 2009 Frederic Bouvier
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// pavement.hxx - class to represent complex taxiway specified in v850 apt.dat
|
// pavement.hxx - class to represent complex taxiway specified in apt.dat
|
||||||
//
|
//
|
||||||
// Copyright (C) 2009 Frederic Bouvier
|
// Copyright (C) 2009 Frederic Bouvier
|
||||||
//
|
//
|
||||||
|
|
Loading…
Add table
Reference in a new issue