AI Improvements
* Relax runway exit route requirement to 80° * Ensure parking is only reset if airport for AI aircraft has changed * Heading Error signed and arrival lead distance
This commit is contained in:
parent
06c03a0672
commit
f1a44c98df
11 changed files with 381 additions and 187 deletions
|
@ -255,9 +255,10 @@ void FGAIAircraft::ClimbTo(double alt_ft ) {
|
|||
|
||||
void FGAIAircraft::TurnTo(double heading) {
|
||||
if( fabs(heading) < 0.1 ) {
|
||||
SG_LOG(SG_AI, SG_WARN, "Heading reset");
|
||||
SG_LOG(SG_AI, SG_WARN, "Heading reset to zero");
|
||||
}
|
||||
tgt_heading = heading;
|
||||
// SG_LOG(SG_AI, SG_BULK, "Turn tgt_heading to " << tgt_heading);
|
||||
hdg_lock = true;
|
||||
}
|
||||
|
||||
|
@ -397,8 +398,11 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) {
|
|||
}
|
||||
}
|
||||
|
||||
if (next) {
|
||||
if (next && !curr->contains("END") && !curr->contains("PushBackPointlegend")) {
|
||||
fp->setLeadDistance(tgt_speed, tgt_heading, curr, next);
|
||||
} else {
|
||||
// If we are ending in a parking
|
||||
fp->setLeadDistance(1);
|
||||
}
|
||||
|
||||
// Calculate a target altitude for any leg in which at least one waypoint is in the air.
|
||||
|
@ -768,11 +772,12 @@ void FGAIAircraft::handleFirstWaypoint() {
|
|||
|
||||
//TODO fp should handle this
|
||||
fp->IncrementWaypoint(eraseWaypoints);
|
||||
if (!(fp->getNextWaypoint()) && trafficRef)
|
||||
if (!(fp->getNextWaypoint()) && trafficRef) {
|
||||
if (!loadNextLeg()) {
|
||||
setDie(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
prev = fp->getPreviousWaypoint(); //first waypoint
|
||||
SG_LOG(SG_AI, SG_BULK, "Previous WP \t" << prev->getName());
|
||||
|
@ -785,7 +790,11 @@ void FGAIAircraft::handleFirstWaypoint() {
|
|||
|
||||
setLatitude(prev->getLatitude());
|
||||
setLongitude(prev->getLongitude());
|
||||
setSpeed(prev->getSpeed());
|
||||
if(fp->getLeg()==1) {
|
||||
setSpeed(0);
|
||||
} else {
|
||||
setSpeed(prev->getSpeed());
|
||||
}
|
||||
setAltitude(prev->getAltitude());
|
||||
|
||||
if (prev->getSpeed() > 0.0)
|
||||
|
@ -798,8 +807,11 @@ void FGAIAircraft::handleFirstWaypoint() {
|
|||
// If next doesn't exist, as in incrementally created flightplans for
|
||||
// AI/Trafficmanager created plans,
|
||||
// Make sure lead distance is initialized otherwise
|
||||
if (next) {
|
||||
// If we are ending in a parking
|
||||
if (next && !curr->contains("END") && !curr->contains("PushBackPointlegend")) {
|
||||
fp->setLeadDistance(speed, hdg, curr, next);
|
||||
} else {
|
||||
fp->setLeadDistance(1);
|
||||
}
|
||||
|
||||
if (curr->getCrossat() > -1000.0) //use a calculated descent/climb rate
|
||||
|
@ -828,7 +840,6 @@ void FGAIAircraft::handleFirstWaypoint() {
|
|||
prevSpeed = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check Execution time (currently once every 100 ms)
|
||||
* Add a bit of randomization to prevent the execution of all flight plans
|
||||
|
@ -855,18 +866,35 @@ bool FGAIAircraft::leadPointReached(FGAIWaypoint* curr, FGAIWaypoint* next, int
|
|||
double dist_to_go_m = fp->getDistanceToGo(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr);
|
||||
// Leaddistance should be ft
|
||||
double lead_dist = fp->getLeadDistance();
|
||||
// experimental: Use fabs, because speed can be negative (I hope) during push_back.
|
||||
if ((dist_to_go_m < fabs(10.0* speed)) && (speed < 0) && (tgt_speed < 0) && fp->getCurrentWaypoint()->contains("PushBackPoint")) {
|
||||
tgt_speed = -(dist_to_go_m / 10.0);
|
||||
if (tgt_speed > -0.5) {
|
||||
tgt_speed = -0.5;
|
||||
const double arrivalDist = fabs(10.0*fp->getCurrentWaypoint()->getSpeed());
|
||||
// arrive at pushback end
|
||||
if ((dist_to_go_m < arrivalDist) && (speed < 0) && (tgt_speed < 0) && fp->getCurrentWaypoint()->contains("PushBackPoint")) {
|
||||
// tgt_speed = -(dist_to_go_m / 10.0);
|
||||
tgt_speed = -std::sqrt((pow(arrivalDist,2)-pow(arrivalDist-dist_to_go_m,2)));
|
||||
SG_LOG(SG_AI, SG_BULK, "tgt_speed " << tgt_speed);
|
||||
if (tgt_speed > -1) {
|
||||
// Speed is int and cannot go below 1 knot
|
||||
tgt_speed = -1;
|
||||
}
|
||||
|
||||
if (fp->getPreviousWaypoint()->getSpeed() < tgt_speed) {
|
||||
SG_LOG(SG_AI, SG_BULK, "Set speed of WP from " << fp->getPreviousWaypoint()->getSpeed() << " to " << tgt_speed);
|
||||
fp->getPreviousWaypoint()->setSpeed(tgt_speed);
|
||||
}
|
||||
}
|
||||
}
|
||||
// arrive at parking
|
||||
if ((dist_to_go_m < arrivalDist) && (speed > 0) && (tgt_speed > 0) && fp->getCurrentWaypoint()->contains("END")) {
|
||||
tgt_speed = (dist_to_go_m / 10.0);
|
||||
if (tgt_speed < 1) {
|
||||
// Speed is int and cannot go below 1 knot
|
||||
tgt_speed = 1;
|
||||
}
|
||||
|
||||
if (fp->getPreviousWaypoint()->getSpeed() < tgt_speed) {
|
||||
SG_LOG(SG_AI, SG_BULK, "Set speed of WP from " << fp->getPreviousWaypoint()->getSpeed() << " to " << tgt_speed);
|
||||
fp->getPreviousWaypoint()->setSpeed(tgt_speed);
|
||||
}
|
||||
}
|
||||
|
||||
if (lead_dist < fabs(2*speed)) {
|
||||
//don't skip over the waypoint
|
||||
|
@ -903,15 +931,22 @@ bool FGAIAircraft::leadPointReached(FGAIWaypoint* curr, FGAIWaypoint* next, int
|
|||
|
||||
if ((dist_to_go_m < lead_dist) ||
|
||||
((dist_to_go_m > prev_dist_to_go) && (bearing > (minBearing * 1.1))) ) {
|
||||
SG_LOG(SG_AI, SG_BULK, "Leadpoint reached " << bearing << "\t" << nextBearing);
|
||||
SG_LOG(SG_AI, SG_BULK, "Leadpoint reached Bearing : " << bearing << "\tNext Bearing : " << nextBearing);
|
||||
minBearing = 360;
|
||||
speedFraction = 1.0;
|
||||
prev_dist_to_go = HUGE_VAL;
|
||||
return true;
|
||||
} else {
|
||||
if (prev_dist_to_go == dist_to_go_m) {
|
||||
if (prev_dist_to_go == dist_to_go_m && fabs(groundTargetSpeed)>0) {
|
||||
//FIXME must be suppressed when parked
|
||||
SG_LOG(SG_AI, SG_WARN, "Aircraft " << _callsign << " stuck. Speed " << speed);
|
||||
SG_LOG(SG_AI, SG_BULK, "Aircraft " << _callsign << " stuck. Speed " << speed);
|
||||
stuckCounter++;
|
||||
if (stuckCounter>AI_STUCK_LIMIT) {
|
||||
SG_LOG(SG_AI, SG_WARN, "Stuck flight " << _callsign << " killed" );
|
||||
setDie(true);
|
||||
}
|
||||
} else {
|
||||
stuckCounter = 0;
|
||||
}
|
||||
prev_dist_to_go = dist_to_go_m;
|
||||
return false;
|
||||
|
@ -966,6 +1001,8 @@ bool FGAIAircraft::handleAirportEndPoints(FGAIWaypoint* prev, time_t now) {
|
|||
// This is the last taxi waypoint, and marks the the end of the flight plan
|
||||
// so, the schedule should update and wait for the next departure time.
|
||||
if (prev->contains("END")) {
|
||||
SG_LOG(SG_AI, SG_BULK, "Reached " << prev->getName() );
|
||||
|
||||
//FIXME Heading Error should be reset
|
||||
time_t nextDeparture = trafficRef->getDepartureTime();
|
||||
// make sure to wait at least 20 minutes at parking to prevent "nervous" taxi behavior
|
||||
|
@ -985,11 +1022,7 @@ bool FGAIAircraft::handleAirportEndPoints(FGAIWaypoint* prev, time_t now) {
|
|||
* @param curr
|
||||
*/
|
||||
void FGAIAircraft::controlHeading(FGAIWaypoint* curr) {
|
||||
double calc_bearing = fp->getBearing(pos, curr);
|
||||
if (speed < 0) {
|
||||
calc_bearing +=180;
|
||||
SG_NORMALIZE_RANGE(calc_bearing, 0.0, 360.0);
|
||||
}
|
||||
const double calc_bearing = speed < 0?SGMiscd::normalizePeriodic(0, 360, fp->getBearing(pos, curr) + 180.0):fp->getBearing(pos, curr);
|
||||
|
||||
if (fgIsFinite(calc_bearing)) {
|
||||
double hdg_error = calc_bearing - tgt_heading;
|
||||
|
@ -1020,7 +1053,12 @@ void FGAIAircraft::controlSpeed(FGAIWaypoint* curr, FGAIWaypoint* next) {
|
|||
if (fabs(speed_diff) > 10) {
|
||||
prevSpeed = speed;
|
||||
if (next) {
|
||||
fp->setLeadDistance(speed, tgt_heading, curr, next);
|
||||
if (next && !curr->contains("END") && !curr->contains("PushBackPointlegend")) {
|
||||
fp->setLeadDistance(speed, tgt_heading, curr, next);
|
||||
} else {
|
||||
// If we are ending in a parking the heading will be a
|
||||
fp->setLeadDistance(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1100,19 +1138,21 @@ void FGAIAircraft::updateHeading(double dt) {
|
|||
if (roll != 0.0) {
|
||||
// If on ground, calculate heading change directly
|
||||
if (onGround()) {
|
||||
double headingDiff = fabs(hdg-tgt_heading);
|
||||
|
||||
if (headingDiff > 180) {
|
||||
headingDiff = fabs(headingDiff - 360);
|
||||
}
|
||||
const double headingDiff = SGMiscd::normalizePeriodic(-180, 180, hdg-tgt_heading);
|
||||
|
||||
// When pushback behind us we still want to move but ...
|
||||
groundTargetSpeed = tgt_speed * cos(headingDiff * SG_DEGREES_TO_RADIANS);
|
||||
|
||||
if (sign(groundTargetSpeed) != sign(tgt_speed)) {
|
||||
if (fabs(speed) < 2 ) {
|
||||
if (sign(groundTargetSpeed) != sign(tgt_speed) && fabs(tgt_speed) > 0) {
|
||||
if (fabs(speed) < 2 && fp->isActive(globals->get_time_params()->get_cur_time())) {
|
||||
// This seems to happen in case there is a change from forward to pushback.
|
||||
// which should never happen.
|
||||
SG_LOG(SG_AI, SG_BULK, "Oh dear we're stuck. Speed is " << speed );
|
||||
SG_LOG(SG_AI, SG_BULK, "Oh dear " << _callsign << " might get stuck aka next point is behind us. Speed is " << speed );
|
||||
stuckCounter++;
|
||||
if (stuckCounter>AI_STUCK_LIMIT) {
|
||||
SG_LOG(SG_AI, SG_WARN, "Stuck flight " << _callsign << " killed" );
|
||||
setDie(true);
|
||||
}
|
||||
}
|
||||
// Negative Cosinus means angle > 90°
|
||||
groundTargetSpeed = 0.21 * sign(tgt_speed); // to prevent speed getting stuck in 'negative' mode
|
||||
|
@ -1120,12 +1160,18 @@ void FGAIAircraft::updateHeading(double dt) {
|
|||
|
||||
// Only update the target values when we're not moving because otherwise we might introduce an enormous target change rate while waiting a the gate, or holding.
|
||||
if (speed != 0) {
|
||||
if (headingDiff > 30.0) {
|
||||
if (fabs(headingDiff) > 30.0) {
|
||||
// invert if pushed backward
|
||||
headingChangeRate += 10.0 * dt * sign(roll);
|
||||
if( sign(headingChangeRate) == sign(headingDiff)) {
|
||||
// left/right change
|
||||
headingChangeRate = 10.0 * dt * sign(headingDiff) * -1;
|
||||
} else {
|
||||
headingChangeRate -= 10.0 * dt * sign(headingDiff);
|
||||
}
|
||||
|
||||
// Clamp the maximum steering rate to 30 degrees per second,
|
||||
// But only do this when the heading error is decreasing.
|
||||
// FIXME
|
||||
if ((headingDiff < headingError)) {
|
||||
if (headingChangeRate > 30)
|
||||
headingChangeRate = 30;
|
||||
|
@ -1134,18 +1180,29 @@ void FGAIAircraft::updateHeading(double dt) {
|
|||
}
|
||||
} else {
|
||||
if (speed != 0) {
|
||||
if (fabs(headingChangeRate) > headingDiff)
|
||||
if( sign(headingChangeRate) == sign(headingDiff)) {
|
||||
// left/right change
|
||||
headingChangeRate = 3 * dt * sign(headingDiff) * -1;
|
||||
} else {
|
||||
headingChangeRate -= 3 * dt * sign(headingDiff);
|
||||
}
|
||||
/*
|
||||
if (headingChangeRate > headingDiff ||
|
||||
headingChangeRate < headingDiff) {
|
||||
headingChangeRate = headingDiff*sign(roll);
|
||||
else
|
||||
}
|
||||
else {
|
||||
headingChangeRate += dt * sign(roll);
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hdg += headingChangeRate * dt * sqrt(fabs(speed) / 15);
|
||||
SG_NORMALIZE_RANGE(headingDiff, 0.0, 360.0);
|
||||
|
||||
headingError = headingDiff;
|
||||
// SG_LOG(SG_AI, SG_BULK, "Headingerror " << headingError );
|
||||
if (fabs(headingError) < 1.0) {
|
||||
hdg = tgt_heading;
|
||||
}
|
||||
|
@ -1262,8 +1319,6 @@ void FGAIAircraft::handleATCRequests(double dt)
|
|||
if (!this->getTrafficRef()) {
|
||||
return;
|
||||
}
|
||||
time_t startTime = this->getTrafficRef()->getDepartureTime(); /* <startTime> is unused. */
|
||||
time_t now = globals->get_time_params()->get_cur_time(); /* <now> is unused. */
|
||||
|
||||
//TODO implement NullController for having no ATC to save the conditionals
|
||||
if (controller) {
|
||||
|
@ -1491,9 +1546,9 @@ void FGAIAircraft::dumpCSVHeader(std::ofstream& o) {
|
|||
o << "Lat\t";
|
||||
o << "Lon\t";
|
||||
o << "Callsign\t";
|
||||
o << "heading change rate\t";
|
||||
o << "headingErr\t";
|
||||
o << "headingDiff\t";
|
||||
o << "headingChangeRate\t";
|
||||
o << "headingError\t";
|
||||
o << "hdg\t";
|
||||
o << "tgt_heading\t";
|
||||
o << "tgt_speed\t";
|
||||
|
@ -1504,9 +1559,7 @@ void FGAIAircraft::dumpCSVHeader(std::ofstream& o) {
|
|||
o << "groundTargetSpeed\t";
|
||||
o << "getVerticalSpeedFPM\t";
|
||||
o << "getTrueHeadingDeg\t";
|
||||
o << "Bearing\t";
|
||||
o << "headingChangeRate\t";
|
||||
o << "headingError\t";
|
||||
o << "bearingToWP\t";
|
||||
|
||||
o << "Name\t";
|
||||
o << "WP Lat\t";
|
||||
|
@ -1519,25 +1572,23 @@ void FGAIAircraft::dumpCSVHeader(std::ofstream& o) {
|
|||
o << "Leg\t";
|
||||
o << "Num WP\t";
|
||||
o << "Leaddistance\t";
|
||||
o << "no_roll";
|
||||
o << "no_roll\t";
|
||||
o << "roll\t";
|
||||
o << "stuckCounter";
|
||||
o << endl;
|
||||
}
|
||||
|
||||
void FGAIAircraft::dumpCSV(std::ofstream& o, int lineIndex) {
|
||||
double headingDiff = fabs(hdg-tgt_heading);
|
||||
|
||||
if (headingDiff > 180) {
|
||||
headingDiff = fabs(headingDiff - 360);
|
||||
}
|
||||
const double headingDiff = SGMiscd::normalizePeriodic(-180, 180, hdg-tgt_heading);
|
||||
|
||||
o << lineIndex << "\t";
|
||||
o << setprecision(12);
|
||||
o << this->getGeodPos().getLatitudeDeg() << "\t";
|
||||
o << this->getGeodPos().getLongitudeDeg() << "\t";
|
||||
o << this->getCallSign() << "\t";
|
||||
o << headingChangeRate << "\t";
|
||||
o << headingError << "\t";
|
||||
o << headingDiff << "\t";
|
||||
o << headingChangeRate << "\t";
|
||||
o << headingError << "\t";
|
||||
o << hdg << "\t";
|
||||
o << tgt_heading << "\t";
|
||||
o << tgt_speed << "\t";
|
||||
|
@ -1550,8 +1601,6 @@ void FGAIAircraft::dumpCSV(std::ofstream& o, int lineIndex) {
|
|||
o << round(this->getVerticalSpeedFPM()) << "\t";
|
||||
o << this->getTrueHeadingDeg() << "\t";
|
||||
FGAIFlightPlan* fp = this->GetFlightPlan();
|
||||
o << headingChangeRate << "\t";
|
||||
o << headingError << "\t";
|
||||
FGAIWaypoint* currentWP = this->GetFlightPlan()->getCurrentWaypoint();
|
||||
if (currentWP) {
|
||||
o << this->GetFlightPlan()->getBearing(this->getGeodPos(), this->GetFlightPlan()->getCurrentWaypoint()) << "\t";
|
||||
|
@ -1565,16 +1614,18 @@ void FGAIAircraft::dumpCSV(std::ofstream& o, int lineIndex) {
|
|||
double dist_to_go_m = fp->getDistanceToGo(pos.getLatitudeDeg(), pos.getLongitudeDeg(), currentWP);
|
||||
o << dist_to_go_m << "\t";
|
||||
} else {
|
||||
o << "\t\t\t\t\t\t\t\t";
|
||||
o << "No WP\t\t\t\t\t\t\t\t";
|
||||
}
|
||||
if (fp->isValidPlan()) {
|
||||
o << fp->getLeg() << "\t";
|
||||
o << fp->getNrOfWayPoints() << "\t";
|
||||
o << fp->getLeadDistance() << "\t";
|
||||
} else {
|
||||
o << "NotValid\t\t";
|
||||
o << "FP NotValid\t\t";
|
||||
}
|
||||
o << this->onGround();
|
||||
o << this->onGround() << "\t";
|
||||
o << roll << "\t";
|
||||
o << stuckCounter;
|
||||
o << endl;
|
||||
}
|
||||
|
||||
|
@ -1587,4 +1638,4 @@ std::string FGAIAircraft::getTimeString(int timeOffset)
|
|||
tm* timeinfo = gmtime(&rawtime);
|
||||
strftime(ret, 11, "%w/%H:%M:%S", timeinfo);
|
||||
return ret;
|
||||
}
|
||||
}
|
|
@ -128,6 +128,7 @@ private:
|
|||
double headingError;
|
||||
double minBearing;
|
||||
double speedFraction;
|
||||
/**Zero if FP is not active*/
|
||||
double groundTargetSpeed;
|
||||
double groundOffset;
|
||||
|
||||
|
@ -172,6 +173,9 @@ private:
|
|||
std::string transponderCode;
|
||||
|
||||
int spinCounter;
|
||||
/**Kills a flight when it's stuck */
|
||||
const int AI_STUCK_LIMIT = 100;
|
||||
int stuckCounter;
|
||||
double prevSpeed;
|
||||
double prev_dist_to_go;
|
||||
|
||||
|
|
|
@ -457,6 +457,9 @@ void FGAIFlightPlan::setLeadDistance(double speed, double bearing,
|
|||
|
||||
//lead_distance = turn_radius * sin(leadInAngle * SG_DEGREES_TO_RADIANS);
|
||||
lead_distance = turn_radius * tan((leadInAngle * SG_DEGREES_TO_RADIANS)/2);
|
||||
if (lead_distance > 1000) {
|
||||
SG_LOG(SG_AI, SG_BULK, "Excessive leaddistance possible direction change " << lead_distance << " leadInAngle " << leadInAngle << " inbound " << inbound << " outbound " << outbound);
|
||||
}
|
||||
/*
|
||||
if ((lead_distance > (3*turn_radius)) && (current->on_ground == false)) {
|
||||
SG_LOG(SG_AI, SG_ALERT, "Warning: Lead-in distance is large. Inbound = " << inbound
|
||||
|
@ -531,18 +534,19 @@ void FGAIFlightPlan::addWaypoint(FGAIWaypoint* wpt)
|
|||
|
||||
void FGAIFlightPlan::pushBackWaypoint(FGAIWaypoint *wpt)
|
||||
{
|
||||
const size_t pos = std::distance(waypoints.cbegin(), wpt_iterator);
|
||||
|
||||
if (!waypoints.empty()) {
|
||||
const double dist = SGGeodesy::distanceM( waypoints.back()->getPos(), wpt->getPos());
|
||||
if ( dist < 0.5 ) {
|
||||
SG_LOG(SG_AI, SG_DEV_ALERT, "Double WP : \t" << wpt->getName() << " not added ");
|
||||
size_t pos = wpt_iterator - waypoints.begin();
|
||||
if (waypoints.size()>0) {
|
||||
double dist = SGGeodesy::distanceM( waypoints.back()->getPos(), wpt->getPos());
|
||||
if( dist == 0 ) {
|
||||
SG_LOG(SG_AI, SG_DEBUG, "Double WP : \t" << wpt->getName() << " not added ");
|
||||
} else {
|
||||
waypoints.push_back(wpt);
|
||||
SG_LOG(SG_AI, SG_BULK, "Added WP : \t" << setprecision(12) << wpt->getName() << "\t" << wpt->getPos() << "\t" << wpt->getSpeed());
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
waypoints.push_back(wpt);
|
||||
SG_LOG(SG_AI, SG_BULK, "Added WP : \t" << wpt->getName() << "\t" << wpt->getPos() << "\t" << wpt->getSpeed());
|
||||
|
||||
SG_LOG(SG_AI, SG_BULK, "Added WP : \t" << setprecision(12) << wpt->getName() << "\t" << wpt->getPos() << "\t" << wpt->getSpeed());
|
||||
}
|
||||
// std::vector::push_back invalidates waypoints
|
||||
// so we should restore wpt_iterator after push_back
|
||||
// (or it could be an index in the vector)
|
||||
|
|
|
@ -417,7 +417,7 @@ void FGAIFlightPlan::createDefaultLandingTaxi(FGAIAircraft * ac,
|
|||
pushBackWaypoint(wpt);
|
||||
|
||||
if (gate.isValid()) {
|
||||
wpt = createOnGround(ac, "ENDtaxi", gate.parking()->geod(), airportElev,
|
||||
wpt = createOnGround(ac, "END-taxi", gate.parking()->geod(), airportElev,
|
||||
ac->getPerformance()->vTaxi());
|
||||
pushBackWaypoint(wpt);
|
||||
}
|
||||
|
@ -468,14 +468,16 @@ bool FGAIFlightPlan::createLandingTaxi(FGAIAircraft * ac, FGAirport * apt,
|
|||
// int route;
|
||||
for (int i = 0; i < size - 2; i++) {
|
||||
taxiRoute.next(node, &route);
|
||||
char buffer[10];
|
||||
snprintf(buffer, 10, "%d", node->getIndex());
|
||||
char buffer[16];
|
||||
snprintf(buffer, 16, "landingtaxi-%d", node->getIndex());
|
||||
FGAIWaypoint *wpt =
|
||||
createOnGround(ac, buffer, node->geod(), apt->getElevation(),
|
||||
ac->getPerformance()->vTaxi());
|
||||
|
||||
wpt->setRouteIndex(route);
|
||||
pushBackWaypoint(wpt);
|
||||
if( !waypoints.back() || SGGeodesy::distanceM( waypoints.back()->getPos(), wpt->getPos()) > 0 ) {
|
||||
pushBackWaypoint(wpt);
|
||||
}
|
||||
}
|
||||
SG_LOG(SG_AI, SG_BULK, "Created taxi from " << runwayNode->getIndex() << " to " << gate.parking()->ident() << " at " << apt->getId());
|
||||
|
||||
|
@ -1113,11 +1115,11 @@ bool FGAIFlightPlan::createParking(FGAIAircraft * ac, FGAirport * apt,
|
|||
|
||||
SGGeodesy::direct(parking->geod(), heading, 0.1 * parking->getRadius(),
|
||||
pos, az);
|
||||
wpt = createOnGround(ac, "taxiStart2", pos, aptElev, vTaxiReduced);
|
||||
wpt = createOnGround(ac, "taxiStart2", pos, aptElev, vTaxiReduced/2);
|
||||
pushBackWaypoint(wpt);
|
||||
|
||||
wpt = createOnGround(ac, "END-Parking", parking->geod(), aptElev,
|
||||
vTaxiReduced);
|
||||
vTaxiReduced/3);
|
||||
pushBackWaypoint(wpt);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -43,7 +43,8 @@ using std::string;
|
|||
|
||||
// TODO: Use James Turner's createOnGround functions.
|
||||
bool FGAIFlightPlan::createPushBack(FGAIAircraft *ac,
|
||||
bool firstFlight, FGAirport *dep,
|
||||
bool firstFlight,
|
||||
FGAirport *dep,
|
||||
double radius,
|
||||
const string& fltType,
|
||||
const string& aircraftType,
|
||||
|
@ -59,32 +60,34 @@ bool FGAIFlightPlan::createPushBack(FGAIAircraft *ac,
|
|||
|
||||
if (!(dep->getDynamics()->getGroundController()->exists())) {
|
||||
//cerr << "Push Back fallback" << endl;
|
||||
SG_LOG(SG_AI, SG_DEV_WARN, "No groundcontroller createPushBackFallBack at " << dep->getId());
|
||||
createPushBackFallBack(ac, firstFlight, dep,
|
||||
radius, fltType, aircraftType, airline);
|
||||
return true;
|
||||
}
|
||||
|
||||
// establish the parking position / gate if required
|
||||
if (firstFlight) {
|
||||
// if the airport has no parking positions defined, don't log
|
||||
// the warning below.
|
||||
if (!dep->getDynamics()->hasParkings()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (firstFlight || !dep->getDynamics()->hasParking(gate.parking())) {
|
||||
// establish the parking position / gate
|
||||
// if the airport has no parking positions defined, don't log
|
||||
// the warning below.
|
||||
if (!dep->getDynamics()->hasParkings()) {
|
||||
return false;
|
||||
}
|
||||
gate = dep->getDynamics()->getAvailableParking(radius, fltType,
|
||||
aircraftType, airline);
|
||||
aircraftType, airline);
|
||||
if (!gate.isValid()) {
|
||||
SG_LOG(SG_AI, SG_DEV_WARN, "Could not find parking for a " <<
|
||||
aircraftType <<
|
||||
" of flight type " << fltType <<
|
||||
" of airline " << airline <<
|
||||
" at airport " << dep->getId());
|
||||
aircraftType <<
|
||||
" of flight type " << fltType <<
|
||||
" of airline " << airline <<
|
||||
" at airport " << dep->getId());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!gate.isValid()) {
|
||||
SG_LOG(SG_AI, SG_DEV_WARN, "Gate " << gate.parking()->ident() << " not valid createPushBackFallBack at " << dep->getId());
|
||||
createPushBackFallBack(ac, firstFlight, dep,
|
||||
radius, fltType, aircraftType, airline);
|
||||
return true;
|
||||
|
@ -95,23 +98,28 @@ bool FGAIFlightPlan::createPushBack(FGAIAircraft *ac,
|
|||
FGParking *parking = gate.parking();
|
||||
if (parking && parking->getPushBackPoint() != nullptr) {
|
||||
FGTaxiRoute route = groundNet->findShortestRoute(parking, parking->getPushBackPoint(), false);
|
||||
SG_LOG(SG_AI, SG_BULK, "Creating Pushback : \t" << parking->getPushBackPoint()->getIndex());
|
||||
SG_LOG(SG_AI, SG_BULK, "Creating Pushback from " << parking->ident() << " to " << parking->getPushBackPoint()->getIndex());
|
||||
|
||||
int size = route.size();
|
||||
if (size < 2) {
|
||||
SG_LOG(SG_AI, SG_DEV_WARN, "Push back route from gate " << parking->ident() << " has only " << size << " nodes.");
|
||||
SG_LOG(SG_AI, SG_DEV_WARN, "Using " << parking->getPushBackPoint());
|
||||
SG_LOG(SG_AI, SG_DEV_WARN, "Push back route from gate " << parking->ident() << " has only " << size << " nodes.\n" << "Using " << parking->getPushBackPoint());
|
||||
}
|
||||
|
||||
route.first();
|
||||
FGTaxiNodeRef node;
|
||||
int rte;
|
||||
|
||||
if (waypoints.size()>0) {
|
||||
// This will be a parking from a previous leg which still contains the forward speed
|
||||
waypoints.back()->setSpeed(vTaxiBackward);
|
||||
}
|
||||
|
||||
|
||||
while (route.next(node, &rte))
|
||||
{
|
||||
char buffer[20];
|
||||
snprintf (buffer, sizeof(buffer), "pushback-%d4", (short)node->getIndex());
|
||||
FGAIWaypoint *wpt = createOnGround(ac, string(buffer), node->geod(), dep->getElevation(), -vTaxiBackward);
|
||||
sprintf (buffer, "pushback-%03d", (short)node->getIndex());
|
||||
FGAIWaypoint *wpt = createOnGround(ac, string(buffer), node->geod(), dep->getElevation(), vTaxiBackward);
|
||||
|
||||
/*
|
||||
if (previous) {
|
||||
|
@ -143,11 +151,11 @@ bool FGAIFlightPlan::createPushBack(FGAIAircraft *ac,
|
|||
SG_LOG(SG_AI, SG_DEV_WARN, "Gate " << parking->ident() << " at " << dep->getId()
|
||||
<< " doesn't seem to have pushforward routes associated with it.");
|
||||
|
||||
FGAIWaypoint *wpt = createOnGround(ac, string("park"), dep->geod(), dep->getElevation(), vTaxiReduced);
|
||||
FGAIWaypoint *wpt = createOnGround(ac, string("park"), parking->geod(), dep->getElevation(), vTaxiReduced);
|
||||
pushBackWaypoint(wpt);
|
||||
|
||||
SGGeod coord;
|
||||
SGGeodesy::direct(dep->geod(), parking->getHeading(), 2.0, coord, az2);
|
||||
SGGeodesy::direct(parking->geod(), parking->getHeading(), 2.0, coord, az2);
|
||||
wpt = createOnGround(ac, string("taxiStart"), coord, dep->getElevation(), vTaxiReduced);
|
||||
pushBackWaypoint(wpt);
|
||||
return true;
|
||||
|
@ -158,16 +166,20 @@ bool FGAIFlightPlan::createPushBack(FGAIAircraft *ac,
|
|||
|
||||
double parkingHeading = parking->getHeading();
|
||||
|
||||
SG_LOG(SG_AI, SG_BULK, "Creating Pushforward : \t" << pushForwardSegment->getEnd()->getIndex() << " Length : \t" << distance);
|
||||
|
||||
int numSegments = distance/2.0;
|
||||
SG_LOG(SG_AI, SG_BULK, "Creating Pushforward from ID " << pushForwardSegment->getEnd()->getIndex() << " Length : \t" << distance);
|
||||
// Add the parking if on first leg and not repeat
|
||||
if (waypoints.size() == 0) {
|
||||
pushBackWaypoint( createOnGround(ac, parking->getName(), parking->geod(), dep->getElevation(), vTaxiReduced));
|
||||
}
|
||||
// Make sure we have at least three WPs
|
||||
int numSegments = distance>15?(distance/5.0):3;
|
||||
for (int i = 1; i < numSegments; i++) {
|
||||
SGGeod pushForwardPt;
|
||||
|
||||
SGGeodesy::direct(parking->geod(), parkingHeading,
|
||||
(((double)i / numSegments) * distance), pushForwardPt, az2);
|
||||
char buffer[20];
|
||||
snprintf(buffer, sizeof(buffer), "pushforward-%d4", (short)i);
|
||||
sprintf(buffer, "pushforward-%03d", (short)i);
|
||||
FGAIWaypoint *wpt = createOnGround(ac, string(buffer), pushForwardPt, dep->getElevation(), vTaxiReduced);
|
||||
|
||||
wpt->setRouteIndex(pushForwardSegment->getIndex());
|
||||
|
|
|
@ -287,6 +287,14 @@ FGParking* FGAirportDynamics::innerGetAvailableParking(double radius, const stri
|
|||
return candidates.front();
|
||||
}
|
||||
|
||||
bool FGAirportDynamics::hasParking(FGParking* parking) const
|
||||
{
|
||||
return std::find(parent()->groundNetwork()->allParkings().begin(),
|
||||
parent()->groundNetwork()->allParkings().end(),
|
||||
parking)
|
||||
!= parent()->groundNetwork()->allParkings().end();
|
||||
}
|
||||
|
||||
bool FGAirportDynamics::hasParkings() const
|
||||
{
|
||||
return !parent()->groundNetwork()->allParkings().empty();
|
||||
|
|
|
@ -116,6 +116,8 @@ public:
|
|||
std::string& runway,
|
||||
double heading );
|
||||
|
||||
bool hasParking(FGParking* parking) const;
|
||||
|
||||
bool hasParkings() const;
|
||||
|
||||
/**
|
||||
|
|
|
@ -301,7 +301,7 @@ FGTaxiNodeRef FGGroundNetwork::findNearestNodeOnRunway(const SGGeod & aGeod, FGR
|
|||
double exitHeading = SGGeodesy::courseDeg((*it)->geod(),
|
||||
(exitSegments.back())->geod());
|
||||
diff = fabs(aRunway->headingDeg() - exitHeading);
|
||||
if (diff > 10) {
|
||||
if (diff > 80) {
|
||||
// Only exits going in our direction
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0"?>
|
||||
<groundnet>
|
||||
<version>1</version>
|
||||
<fgaversion>Sun, 09 May 2021 19:33:40 GMT by FlightgearAirports 0.0.31</fgaversion>
|
||||
<name>unknown</name>
|
||||
<fgaversion>Wed, 11 Aug 2021 18:28:41 GMT by FlightgearAirports 0.0.33</fgaversion>
|
||||
<name>PortreeKid</name>
|
||||
<frequencies>
|
||||
<APPROACH>13510</APPROACH>
|
||||
<DEPARTURE>11840</DEPARTURE>
|
||||
|
@ -17,8 +17,8 @@
|
|||
<TOWER>12470</TOWER>
|
||||
</frequencies>
|
||||
<parkingList>
|
||||
<Parking index="2" type="gate" lat="S33 55.6818" lon="E151 10.7652" heading="60.0" radius="40" name="Startup Location" number="undefined" pushBackRoute="241"/>
|
||||
<Parking index="3" type="gate" lat="S33 55.647" lon="E151 10.7772" heading="147.0" radius="40" name="Startup Location" number="undefined" pushBackRoute="245"/>
|
||||
<Parking index="2" type="gate" lat="S33 55.6818" lon="E151 10.7652" heading="60.0" radius="40" name="Startup Location" number="undefined" pushBackRoute="237"/>
|
||||
<Parking index="3" type="gate" lat="S33 55.647" lon="E151 10.7772" heading="147.0" radius="40" name="Startup Location" number="undefined" pushBackRoute="241"/>
|
||||
<Parking index="4" type="ga" lat="S33 56.0412" lon="E151 11.2842" heading="189.0" radius="8" name="107" number="undefined"/>
|
||||
<Parking index="5" type="ga" lat="S33 56.043" lon="E151 11.2968" heading="189.0" radius="8" name="106" number="undefined"/>
|
||||
<Parking index="6" type="ga" lat="S33 56.0448" lon="E151 11.3112" heading="189.0" radius="8" name="105" number="undefined"/>
|
||||
|
@ -30,83 +30,83 @@
|
|||
<Parking index="17" type="gate" lat="S33 56.601" lon="E151 10.821" heading="164.0" radius="18" name="REMOTE-" number="102B"/>
|
||||
<Parking index="18" type="gate" lat="S33 56.6058" lon="E151 10.7952" heading="164.0" radius="18" name="REMOTE-" number="102A"/>
|
||||
<Parking index="20" type="gate" lat="S33 56.238" lon="E151 10.1688" heading="254.0" radius="33" name="T1-" airlineCodes="QFA" number="31"/>
|
||||
<Parking index="35" type="gate" lat="S33 56.7498" lon="E151 10.0512" heading="164.0" radius="33" name="REMOTE-" number="77" pushBackRoute="1234"/>
|
||||
<Parking index="37" type="gate" lat="S33 56.7402" lon="E151 10.0968" heading="164.0" radius="33" name="REMOTE-" number="76" pushBackRoute="1253"/>
|
||||
<Parking index="40" type="gate" lat="S33 56.235" lon="E151 10.746" heading="59.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="45A" pushBackRoute="1005"/>
|
||||
<Parking index="41" type="gate" lat="S33 56.2248" lon="E151 10.7862" heading="326.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="44A" pushBackRoute="1442"/>
|
||||
<Parking index="42" type="gate" lat="S33 56.1558" lon="E151 10.6218" heading="79.2" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="59" pushBackRoute="876"/>
|
||||
<Parking index="35" type="gate" lat="S33 56.7498" lon="E151 10.0512" heading="164.0" radius="33" name="REMOTE-" number="77" pushBackRoute="1216"/>
|
||||
<Parking index="37" type="gate" lat="S33 56.7402" lon="E151 10.0968" heading="164.0" radius="33" name="REMOTE-" number="76" pushBackRoute="1235"/>
|
||||
<Parking index="40" type="gate" lat="S33 56.235" lon="E151 10.746" heading="59.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="45A" pushBackRoute="1000"/>
|
||||
<Parking index="41" type="gate" lat="S33 56.2248" lon="E151 10.7862" heading="326.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="44A" pushBackRoute="1421"/>
|
||||
<Parking index="42" type="gate" lat="S33 56.1558" lon="E151 10.6218" heading="79.2" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="59" pushBackRoute="871"/>
|
||||
<Parking index="47" type="gate" lat="S33 56.1102" lon="E151 10.8732" heading="190.0" radius="14" name="F-" airlineCodes="RXA" number="02"/>
|
||||
<Parking index="48" type="gate" lat="S33 56.1588" lon="E151 10.65" heading="303.2" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="58" pushBackRoute="1003"/>
|
||||
<Parking index="49" type="gate" lat="S33 56.2062" lon="E151 10.794" heading="280.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="42" pushBackRoute="1437"/>
|
||||
<Parking index="50" type="gate" lat="S33 56.358" lon="E151 10.0182" heading="262.0" radius="26" name="T1-" airlineCodes="XAX,TGW,AVN,ANG,FJI " number="55" pushBackRoute="501"/>
|
||||
<Parking index="51" type="gate" lat="S33 56.2578" lon="E151 10.092" heading="74.0" radius="33" name="T1-" airlineCodes="QFA" number="30" pushBackRoute="559"/>
|
||||
<Parking index="52" type="cargo" lat="S33 55.953" lon="E151 10.0842" heading="296.7" radius="34" name="FREGHT-" number="06" pushBackRoute="1060"/>
|
||||
<Parking index="53" type="gate" lat="S33 56.4342" lon="E151 9.831" heading="47.2" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="61" pushBackRoute="611"/>
|
||||
<Parking index="54" type="gate" lat="S33 56.3148" lon="E151 9.906" heading="83.2" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="50" pushBackRoute="752"/>
|
||||
<Parking index="55" type="gate" lat="S33 56.0838" lon="E151 10.755" heading="99.7" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="31A" pushBackRoute="1482"/>
|
||||
<Parking index="56" type="gate" lat="S33 56.0868" lon="E151 10.8162" heading="279.4" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="32" pushBackRoute="394"/>
|
||||
<Parking index="57" type="gate" lat="S33 56.106" lon="E151 10.8072" heading="286.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="34" pushBackRoute="1080"/>
|
||||
<Parking index="58" type="gate" lat="S33 56.133" lon="E151 10.8012" heading="279.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="36" pushBackRoute="388"/>
|
||||
<Parking index="59" type="gate" lat="S33 56.1588" lon="E151 10.7928" heading="280.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="38" pushBackRoute="382"/>
|
||||
<Parking index="60" type="gate" lat="S33 56.175" lon="E151 10.74" heading="99.2" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="39" pushBackRoute="1003"/>
|
||||
<Parking index="61" type="gate" lat="S33 56.145" lon="E151 10.7442" heading="100.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="35" pushBackRoute="1002"/>
|
||||
<Parking index="62" type="gate" lat="S33 56.1138" lon="E151 10.7538" heading="100.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="33" pushBackRoute="1001"/>
|
||||
<Parking index="63" type="gate" lat="S33 56.091" lon="E151 10.665" heading="280.3" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="52" pushBackRoute="1482"/>
|
||||
<Parking index="64" type="gate" lat="S33 56.1138" lon="E151 10.656" heading="279.7" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="54" pushBackRoute="1496"/>
|
||||
<Parking index="65" type="gate" lat="S33 56.1372" lon="E151 10.6512" heading="280.2" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="56" pushBackRoute="1002"/>
|
||||
<Parking index="66" type="gate" lat="S33 56.1348" lon="E151 10.614" heading="99.9" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="57" pushBackRoute="877"/>
|
||||
<Parking index="67" type="gate" lat="S33 56.1078" lon="E151 10.6182" heading="100.0" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="55" pushBackRoute="878"/>
|
||||
<Parking index="68" type="gate" lat="S33 56.0772" lon="E151 10.623" heading="99.4" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="53" pushBackRoute="881"/>
|
||||
<Parking index="69" type="gate" lat="S33 56.046" lon="E151 10.629" heading="100.2" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="49" pushBackRoute="997"/>
|
||||
<Parking index="71" type="gate" lat="S33 55.9098" lon="E151 10.815" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="02" pushBackRoute="987"/>
|
||||
<Parking index="72" type="gate" lat="S33 55.914" lon="E151 10.8438" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="01" pushBackRoute="988"/>
|
||||
<Parking index="73" type="gate" lat="S33 55.9332" lon="E151 10.6062" heading="70.3" radius="18" name="T3-" airlineCodes="QFA" number="14" pushBackRoute="888"/>
|
||||
<Parking index="74" type="gate" lat="S33 55.9182" lon="E151 10.5858" heading="85.2" radius="18" name="T3-" airlineCodes="QFA" number="12" pushBackRoute="889"/>
|
||||
<Parking index="75" type="gate" lat="S33 55.8942" lon="E151 10.5792" heading="115.1" radius="33" name="T3-" airlineCodes="QFA" number="11" pushBackRoute="993"/>
|
||||
<Parking index="76" type="gate" lat="S33 55.851" lon="E151 10.5738" heading="168.0" radius="33" name="T3-" airlineCodes="QFA" number="10" pushBackRoute="890"/>
|
||||
<Parking index="77" type="gate" lat="S33 55.86" lon="E151 10.6038" heading="188.2" radius="18" name="T3-" airlineCodes="QFA" number="09" pushBackRoute="891"/>
|
||||
<Parking index="78" type="gate" lat="S33 55.8732" lon="E151 10.6278" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="08" pushBackRoute="892"/>
|
||||
<Parking index="79" type="gate" lat="S33 55.878" lon="E151 10.6542" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="07" pushBackRoute="905"/>
|
||||
<Parking index="80" type="gate" lat="S33 55.89" lon="E151 10.6812" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="06" pushBackRoute="906"/>
|
||||
<Parking index="81" type="gate" lat="S33 55.8942" lon="E151 10.7142" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="05" pushBackRoute="907"/>
|
||||
<Parking index="82" type="gate" lat="S33 55.8882" lon="E151 10.7502" heading="190.0" radius="33" name="T3-" airlineCodes="QFA" number="04" pushBackRoute="990"/>
|
||||
<Parking index="83" type="gate" lat="S33 55.9038" lon="E151 10.782" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="03" pushBackRoute="989"/>
|
||||
<Parking index="84" type="gate" lat="S33 56.3562" lon="E151 9.8748" heading="149.5" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="54" pushBackRoute="752"/>
|
||||
<Parking index="85" type="gate" lat="S33 56.3982" lon="E151 9.8238" heading="83.2" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="63" pushBackRoute="621"/>
|
||||
<Parking index="86" type="gate" lat="S33 56.4288" lon="E151 9.8772" heading="344.0" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="60" pushBackRoute="608"/>
|
||||
<Parking index="87" type="gate" lat="S33 56.418" lon="E151 9.9228" heading="344.0" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="59" pushBackRoute="584"/>
|
||||
<Parking index="88" type="gate" lat="S33 56.409" lon="E151 9.969" heading="344.0" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="58" pushBackRoute="581"/>
|
||||
<Parking index="89" type="gate" lat="S33 56.388" lon="E151 10.011" heading="304.0" radius="40" name="T1-" airlineCodes="UAE" number="57" pushBackRoute="1106"/>
|
||||
<Parking index="90" type="gate" lat="S33 56.3322" lon="E151 9.9918" heading="254.0" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA,QFA" number="53" pushBackRoute="564"/>
|
||||
<Parking index="91" type="gate" lat="S33 56.295" lon="E151 9.9732" heading="254.0" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA,QFA" number="51" pushBackRoute="562"/>
|
||||
<Parking index="92" type="gate" lat="S33 56.2962" lon="E151 10.1052" heading="74.0" radius="33" name="T1-" airlineCodes="QFA" number="32" pushBackRoute="502"/>
|
||||
<Parking index="93" type="gate" lat="S33 56.334" lon="E151 10.1148" heading="74.0" radius="33" name="T1-" airlineCodes="QFA" number="34" pushBackRoute="1127"/>
|
||||
<Parking index="94" type="gate" lat="S33 56.3718" lon="E151 10.131" heading="74.0" radius="33" name="T1-" airlineCodes="QFA" number="36" pushBackRoute="499"/>
|
||||
<Parking index="48" type="gate" lat="S33 56.1588" lon="E151 10.65" heading="303.2" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="58" pushBackRoute="998"/>
|
||||
<Parking index="49" type="gate" lat="S33 56.2062" lon="E151 10.794" heading="280.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="42" pushBackRoute="1416"/>
|
||||
<Parking index="50" type="gate" lat="S33 56.358" lon="E151 10.0182" heading="262.0" radius="26" name="T1-" airlineCodes="XAX,TGW,AVN,ANG,FJI " number="55" pushBackRoute="497"/>
|
||||
<Parking index="51" type="gate" lat="S33 56.2578" lon="E151 10.092" heading="74.0" radius="33" name="T1-" airlineCodes="QFA" number="30" pushBackRoute="555"/>
|
||||
<Parking index="52" type="cargo" lat="S33 55.953" lon="E151 10.0842" heading="296.7" radius="34" name="FREGHT-" number="06" pushBackRoute="1054"/>
|
||||
<Parking index="53" type="gate" lat="S33 56.4342" lon="E151 9.831" heading="47.2" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="61" pushBackRoute="606"/>
|
||||
<Parking index="54" type="gate" lat="S33 56.3148" lon="E151 9.906" heading="83.2" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="50" pushBackRoute="747"/>
|
||||
<Parking index="55" type="gate" lat="S33 56.0838" lon="E151 10.755" heading="99.7" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="31A" pushBackRoute="1461"/>
|
||||
<Parking index="56" type="gate" lat="S33 56.0868" lon="E151 10.8162" heading="279.4" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="32" pushBackRoute="390"/>
|
||||
<Parking index="57" type="gate" lat="S33 56.106" lon="E151 10.8072" heading="286.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="34" pushBackRoute="1074"/>
|
||||
<Parking index="58" type="gate" lat="S33 56.133" lon="E151 10.8012" heading="279.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="36" pushBackRoute="384"/>
|
||||
<Parking index="59" type="gate" lat="S33 56.1588" lon="E151 10.7928" heading="280.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="38" pushBackRoute="378"/>
|
||||
<Parking index="60" type="gate" lat="S33 56.175" lon="E151 10.74" heading="99.2" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="39" pushBackRoute="998"/>
|
||||
<Parking index="61" type="gate" lat="S33 56.145" lon="E151 10.7442" heading="100.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="35" pushBackRoute="997"/>
|
||||
<Parking index="62" type="gate" lat="S33 56.1138" lon="E151 10.7538" heading="100.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="33" pushBackRoute="996"/>
|
||||
<Parking index="63" type="gate" lat="S33 56.091" lon="E151 10.665" heading="280.3" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="52" pushBackRoute="1461"/>
|
||||
<Parking index="64" type="gate" lat="S33 56.1138" lon="E151 10.656" heading="279.7" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="54" pushBackRoute="1475"/>
|
||||
<Parking index="65" type="gate" lat="S33 56.1372" lon="E151 10.6512" heading="280.2" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="56" pushBackRoute="997"/>
|
||||
<Parking index="66" type="gate" lat="S33 56.1348" lon="E151 10.614" heading="99.9" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="57" pushBackRoute="872"/>
|
||||
<Parking index="67" type="gate" lat="S33 56.1078" lon="E151 10.6182" heading="100.0" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="55" pushBackRoute="873"/>
|
||||
<Parking index="68" type="gate" lat="S33 56.0772" lon="E151 10.623" heading="99.4" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="53" pushBackRoute="876"/>
|
||||
<Parking index="69" type="gate" lat="S33 56.046" lon="E151 10.629" heading="100.2" radius="18" name="T2-" airlineCodes="VOZ,OZW" number="49" pushBackRoute="992"/>
|
||||
<Parking index="71" type="gate" lat="S33 55.9098" lon="E151 10.815" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="02" pushBackRoute="982"/>
|
||||
<Parking index="72" type="gate" lat="S33 55.914" lon="E151 10.8438" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="01" pushBackRoute="983"/>
|
||||
<Parking index="73" type="gate" lat="S33 55.9332" lon="E151 10.6062" heading="70.3" radius="18" name="T3-" airlineCodes="QFA" number="14" pushBackRoute="883"/>
|
||||
<Parking index="74" type="gate" lat="S33 55.9182" lon="E151 10.5858" heading="85.2" radius="18" name="T3-" airlineCodes="QFA" number="12" pushBackRoute="884"/>
|
||||
<Parking index="75" type="gate" lat="S33 55.8942" lon="E151 10.5792" heading="115.1" radius="33" name="T3-" airlineCodes="QFA" number="11" pushBackRoute="988"/>
|
||||
<Parking index="76" type="gate" lat="S33 55.851" lon="E151 10.5738" heading="168.0" radius="33" name="T3-" airlineCodes="QFA" number="10" pushBackRoute="885"/>
|
||||
<Parking index="77" type="gate" lat="S33 55.86" lon="E151 10.6038" heading="188.2" radius="18" name="T3-" airlineCodes="QFA" number="09" pushBackRoute="886"/>
|
||||
<Parking index="78" type="gate" lat="S33 55.8732" lon="E151 10.6278" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="08" pushBackRoute="887"/>
|
||||
<Parking index="79" type="gate" lat="S33 55.878" lon="E151 10.6542" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="07" pushBackRoute="900"/>
|
||||
<Parking index="80" type="gate" lat="S33 55.89" lon="E151 10.6812" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="06" pushBackRoute="901"/>
|
||||
<Parking index="81" type="gate" lat="S33 55.8942" lon="E151 10.7142" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="05" pushBackRoute="902"/>
|
||||
<Parking index="82" type="gate" lat="S33 55.8882" lon="E151 10.7502" heading="190.0" radius="33" name="T3-" airlineCodes="QFA" number="04" pushBackRoute="985"/>
|
||||
<Parking index="83" type="gate" lat="S33 55.9038" lon="E151 10.782" heading="190.0" radius="18" name="T3-" airlineCodes="QFA" number="03" pushBackRoute="984"/>
|
||||
<Parking index="84" type="gate" lat="S33 56.3562" lon="E151 9.8748" heading="149.5" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="54" pushBackRoute="747"/>
|
||||
<Parking index="85" type="gate" lat="S33 56.3982" lon="E151 9.8238" heading="83.2" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="63" pushBackRoute="616"/>
|
||||
<Parking index="86" type="gate" lat="S33 56.4288" lon="E151 9.8772" heading="344.0" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="60" pushBackRoute="603"/>
|
||||
<Parking index="87" type="gate" lat="S33 56.418" lon="E151 9.9228" heading="344.0" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="59" pushBackRoute="579"/>
|
||||
<Parking index="88" type="gate" lat="S33 56.409" lon="E151 9.969" heading="344.0" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="58" pushBackRoute="576"/>
|
||||
<Parking index="89" type="gate" lat="S33 56.388" lon="E151 10.011" heading="304.0" radius="40" name="T1-" airlineCodes="UAE" number="57" pushBackRoute="1100"/>
|
||||
<Parking index="90" type="gate" lat="S33 56.3322" lon="E151 9.9918" heading="254.0" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA,QFA" number="53" pushBackRoute="560"/>
|
||||
<Parking index="91" type="gate" lat="S33 56.295" lon="E151 9.9732" heading="254.0" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA,QFA" number="51" pushBackRoute="558"/>
|
||||
<Parking index="92" type="gate" lat="S33 56.2962" lon="E151 10.1052" heading="74.0" radius="33" name="T1-" airlineCodes="QFA" number="32" pushBackRoute="498"/>
|
||||
<Parking index="93" type="gate" lat="S33 56.334" lon="E151 10.1148" heading="74.0" radius="33" name="T1-" airlineCodes="QFA" number="34" pushBackRoute="1121"/>
|
||||
<Parking index="94" type="gate" lat="S33 56.3718" lon="E151 10.131" heading="74.0" radius="33" name="T1-" airlineCodes="QFA" number="36" pushBackRoute="495"/>
|
||||
<Parking index="95" type="gate" lat="S33 56.3538" lon="E151 10.1928" heading="255.0" radius="33" name="T1-" airlineCodes="QFA" number="37"/>
|
||||
<Parking index="96" type="gate" lat="S33 56.316" lon="E151 10.179" heading="255.0" radius="33" name="T1-" airlineCodes="QFA" number="35"/>
|
||||
<Parking index="97" type="gate" lat="S33 56.277" lon="E151 10.173" heading="255.0" radius="33" name="T1-" airlineCodes="QFA" number="33" pushBackRoute="633"/>
|
||||
<Parking index="98" type="gate" lat="S33 56.1678" lon="E151 10.2072" heading="167.8" radius="33" name="T1-" airlineCodes="UAE,ETD,QFA" number="25" pushBackRoute="1062"/>
|
||||
<Parking index="99" type="gate" lat="S33 56.175" lon="E151 10.152" heading="178.0" radius="40" name="T1-" airlineCodes="UAE,ETD,QFA" number="24" pushBackRoute="1063"/>
|
||||
<Parking index="100" type="gate" lat="S33 56.139" lon="E151 10.089" heading="238.6" radius="40" name="T1-" airlineCodes="UAE,ETD" number="10" pushBackRoute="1063"/>
|
||||
<Parking index="101" type="cargo" lat="S33 55.8642" lon="E151 10.0758" heading="257.9" radius="33" name="FREGHT-" number="04" pushBackRoute="1058"/>
|
||||
<Parking index="102" type="gate" lat="S33 56.088" lon="E151 10.0722" heading="257.6" radius="40" name="T1-" airlineCodes="UAE,ETD" number="09" pushBackRoute="1064"/>
|
||||
<Parking index="103" type="cargo" lat="S33 55.7892" lon="E151 10.0518" heading="258.5" radius="33" name="FREGHT-" number="02" pushBackRoute="1199"/>
|
||||
<Parking index="104" type="cargo" lat="S33 55.74" lon="E151 10.1022" heading="347.0" radius="40" name="FREGHT-" number="01" pushBackRoute="1199"/>
|
||||
<Parking index="105" type="cargo" lat="S33 55.827" lon="E151 10.062" heading="257.2" radius="33" name="FREGHT-" number="03" pushBackRoute="129"/>
|
||||
<Parking index="106" type="gate" lat="S33 56.3712" lon="E151 9.8412" heading="124.1" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="56" pushBackRoute="628"/>
|
||||
<Parking index="97" type="gate" lat="S33 56.277" lon="E151 10.173" heading="255.0" radius="33" name="T1-" airlineCodes="QFA" number="33" pushBackRoute="628"/>
|
||||
<Parking index="98" type="gate" lat="S33 56.1678" lon="E151 10.2072" heading="167.8" radius="33" name="T1-" airlineCodes="UAE,ETD,QFA" number="25" pushBackRoute="1056"/>
|
||||
<Parking index="99" type="gate" lat="S33 56.175" lon="E151 10.152" heading="178.0" radius="40" name="T1-" airlineCodes="UAE,ETD,QFA" number="24" pushBackRoute="1057"/>
|
||||
<Parking index="100" type="gate" lat="S33 56.139" lon="E151 10.089" heading="238.6" radius="40" name="T1-" airlineCodes="UAE,ETD" number="10" pushBackRoute="1057"/>
|
||||
<Parking index="101" type="cargo" lat="S33 55.8642" lon="E151 10.0758" heading="257.9" radius="33" name="FREGHT-" number="04" pushBackRoute="1052"/>
|
||||
<Parking index="102" type="gate" lat="S33 56.088" lon="E151 10.0722" heading="257.6" radius="40" name="T1-" airlineCodes="UAE,ETD" number="09" pushBackRoute="1058"/>
|
||||
<Parking index="103" type="cargo" lat="S33 55.7892" lon="E151 10.0518" heading="258.5" radius="33" name="FREGHT-" number="02" pushBackRoute="1181"/>
|
||||
<Parking index="104" type="cargo" lat="S33 55.74" lon="E151 10.1022" heading="347.0" radius="40" name="FREGHT-" number="01" pushBackRoute="1181"/>
|
||||
<Parking index="105" type="cargo" lat="S33 55.827" lon="E151 10.062" heading="257.2" radius="33" name="FREGHT-" number="03" pushBackRoute="125"/>
|
||||
<Parking index="106" type="gate" lat="S33 56.3712" lon="E151 9.8412" heading="124.1" radius="33" name="T1-" airlineCodes="UAL,THA,SIA,PAL,JAL,ACA,CSN,DAL,CCA,ANA,AAL,LAN,MAS,BAW,ANZ,AAR,ACI,QTR,HAL,FJI,CAL,HVN,KAL,AIC,CPA,GIA" number="56" pushBackRoute="623"/>
|
||||
<Parking index="107" type="gate" lat="S33 56.04" lon="E151 10.065" heading="257.9" radius="40" name="T1-" airlineCodes="UAE,ETD" number="08"/>
|
||||
<Parking index="108" type="cargo" lat="S33 55.9032" lon="E151 10.0818" heading="257.6" radius="33" name="FREGHT-" number="05" pushBackRoute="1059"/>
|
||||
<Parking index="109" type="gate" lat="S33 55.9578" lon="E151 10.6062" heading="85.0" radius="17.3" name="T3-" airlineCodes="QFA" number="16" pushBackRoute="888"/>
|
||||
<Parking index="110" type="gate" lat="S33 56.196" lon="E151 10.731" heading="90.5" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="41" pushBackRoute="1004"/>
|
||||
<Parking index="111" type="gate" lat="S33 56.2212" lon="E151 10.7202" heading="79.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="43" pushBackRoute="1006"/>
|
||||
<Parking index="112" type="gate" lat="S33 56.181" lon="E151 10.788" heading="277.9" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="40" pushBackRoute="1440"/>
|
||||
<Parking index="118" type="gate" lat="S33 56.0622" lon="E151 10.191" heading="12.6" radius="33" name="T1-" airlineCodes="XAX,TGW,AVN,ANG,FJI " number="11" pushBackRoute="1212"/>
|
||||
<Parking index="119" type="gate" lat="S33 56.0262" lon="E151 10.1778" heading="129.6" radius="33" name="T1-" airlineCodes="XAX,TGW,AVN,ANG,FJI " number="12" pushBackRoute="1061"/>
|
||||
<Parking index="120" type="gate" lat="S33 55.701" lon="E151 10.4928" heading="78.0" radius="33" name="REMOTE-" number="85" pushBackRoute="1527"/>
|
||||
<Parking index="121" type="gate" lat="S33 55.6632" lon="E151 10.4772" heading="78.0" radius="33" name="REMOTE-" number="84" pushBackRoute="280"/>
|
||||
<Parking index="122" type="gate" lat="S33 55.623" lon="E151 10.47" heading="78.0" radius="33" name="REMOTE-" number="83" pushBackRoute="279"/>
|
||||
<Parking index="108" type="cargo" lat="S33 55.9032" lon="E151 10.0818" heading="257.6" radius="33" name="FREGHT-" number="05" pushBackRoute="1053"/>
|
||||
<Parking index="109" type="gate" lat="S33 55.9578" lon="E151 10.6062" heading="85.0" radius="17.3" name="T3-" airlineCodes="QFA" number="16" pushBackRoute="883"/>
|
||||
<Parking index="110" type="gate" lat="S33 56.196" lon="E151 10.731" heading="90.5" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="41" pushBackRoute="999"/>
|
||||
<Parking index="111" type="gate" lat="S33 56.2212" lon="E151 10.7202" heading="79.0" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="43" pushBackRoute="1001"/>
|
||||
<Parking index="112" type="gate" lat="S33 56.181" lon="E151 10.788" heading="277.9" radius="18" name="T2-" airlineCodes="VOZ, OZW" number="40" pushBackRoute="1419"/>
|
||||
<Parking index="118" type="gate" lat="S33 56.0622" lon="E151 10.191" heading="12.6" radius="33" name="T1-" airlineCodes="XAX,TGW,AVN,ANG,FJI " number="11" pushBackRoute="1194"/>
|
||||
<Parking index="119" type="gate" lat="S33 56.0262" lon="E151 10.1778" heading="129.6" radius="33" name="T1-" airlineCodes="XAX,TGW,AVN,ANG,FJI " number="12" pushBackRoute="1055"/>
|
||||
<Parking index="120" type="gate" lat="S33 55.701" lon="E151 10.4928" heading="78.0" radius="33" name="REMOTE-" number="85" pushBackRoute="1506"/>
|
||||
<Parking index="121" type="gate" lat="S33 55.6632" lon="E151 10.4772" heading="78.0" radius="33" name="REMOTE-" number="84" pushBackRoute="276"/>
|
||||
<Parking index="122" type="gate" lat="S33 55.623" lon="E151 10.47" heading="78.0" radius="33" name="REMOTE-" number="83" pushBackRoute="275"/>
|
||||
<Parking index="123" type="gate" lat="S33 56.0898" lon="E151 10.878" heading="190.0" radius="14" name="F-" airlineCodes="RXA" number="01"/>
|
||||
<Parking index="124" type="gate" lat="S33 55.6128" lon="E151 10.8108" heading="100.0" radius="33" name="Startup Location" number="undefined" pushBackRoute="244"/>
|
||||
<Parking index="124" type="gate" lat="S33 55.6128" lon="E151 10.8108" heading="100.0" radius="33" name="Startup Location" number="undefined" pushBackRoute="240"/>
|
||||
</parkingList>
|
||||
<TaxiNodes>
|
||||
<node index="10" lat="S33 56.67" lon="E151 10.344" isOnRunway="0"/>
|
||||
|
@ -174,7 +174,7 @@
|
|||
<node index="154" lat="S33 56.7108" lon="E151 10.5522" isOnRunway="1" holdPointType="none"/>
|
||||
<node index="155" lat="S33 56.7168" lon="E151 10.5642" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="156" lat="S33 56.7198" lon="E151 10.578" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="157" lat="S33 56.7198" lon="E151 10.596" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="157" lat="S33 56.720151" lon="E151 10.596707" isOnRunway="0"/>
|
||||
<node index="158" lat="S33 56.682" lon="E151 10.668" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="159" lat="S33 56.6898" lon="E151 10.6692" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="160" lat="S33 56.697" lon="E151 10.6668" isOnRunway="0" holdPointType="none"/>
|
||||
|
@ -182,7 +182,7 @@
|
|||
<node index="162" lat="S33 56.7078" lon="E151 10.656" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="163" lat="S33 56.703" lon="E151 10.6968" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="164" lat="S33 56.7042" lon="E151 10.6878" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="165" lat="S33 56.7108" lon="E151 10.6482" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="165" lat="S33 56.711339" lon="E151 10.647883" isOnRunway="0"/>
|
||||
<node index="166" lat="S33 56.6982" lon="E151 10.6908" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="167" lat="S33 56.6952" lon="E151 10.6818" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="168" lat="S33 56.6892" lon="E151 10.6752" isOnRunway="0" holdPointType="none"/>
|
||||
|
@ -1386,7 +1386,7 @@
|
|||
<node index="1366" lat="S33 56.601" lon="E151 10.665" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="1367" lat="S33 56.6058" lon="E151 10.6572" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="1368" lat="S33 56.6118" lon="E151 10.65" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="1369" lat="S33 56.619" lon="E151 10.6482" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="1369" lat="S33 56.6244" lon="E151 10.65" isOnRunway="0"/>
|
||||
<node index="1370" lat="S33 56.1048" lon="E151 11.3088" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="1371" lat="S33 56.076" lon="E151 11.3202" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="1372" lat="S33 56.0712" lon="E151 11.3208" isOnRunway="0" holdPointType="none"/>
|
||||
|
@ -1528,6 +1528,41 @@
|
|||
<node index="1508" lat="S33 55.662" lon="E151 10.4382" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="1509" lat="S33 55.665" lon="E151 10.4622" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="1510" lat="S33 55.605" lon="E151 10.7508" isOnRunway="0" holdPointType="none"/>
|
||||
<node index="1511" lat="S33 56.6508" lon="E151 10.5276" isOnRunway="1"/>
|
||||
<node index="1512" lat="S33 56.6298" lon="E151 10.5432" isOnRunway="0"/>
|
||||
<node index="1513" lat="S33 56.6208" lon="E151 10.5846" isOnRunway="0"/>
|
||||
<node index="1514" lat="S33 56.6136" lon="E151 10.6128" isOnRunway="0"/>
|
||||
<node index="1515" lat="S33 56.607471" lon="E151 10.62664" isOnRunway="0"/>
|
||||
<node index="1516" lat="S33 56.597592" lon="E151 10.634365" isOnRunway="0"/>
|
||||
<node index="1517" lat="S33 56.5476" lon="E151 10.6242" isOnRunway="0"/>
|
||||
<node index="1518" lat="S33 56.5824" lon="E151 10.6362" isOnRunway="0"/>
|
||||
<node index="1519" lat="S33 56.6178" lon="E151 10.6368" isOnRunway="0"/>
|
||||
<node index="1520" lat="S33 56.6142" lon="E151 10.6254" isOnRunway="0"/>
|
||||
<node index="1521" lat="S33 56.6178" lon="E151 10.5204" isOnRunway="1"/>
|
||||
<node index="1522" lat="S33 56.625" lon="E151 10.5294" isOnRunway="1"/>
|
||||
<node index="1523" lat="S33 56.6376" lon="E151 10.5312" isOnRunway="0"/>
|
||||
<node index="1524" lat="S33 56.62458" lon="E151 10.56648" isOnRunway="0"/>
|
||||
<node index="1525" lat="S33 56.550596" lon="E151 10.500147" isOnRunway="1"/>
|
||||
<node index="1526" lat="S33 56.560743" lon="E151 10.505619" isOnRunway="1"/>
|
||||
<node index="1527" lat="S33 56.601063" lon="E151 10.533621" isOnRunway="0"/>
|
||||
<node index="1528" lat="S33 56.648057" lon="E151 10.568061" isOnRunway="0"/>
|
||||
<node index="1529" lat="S33 56.675026" lon="E151 10.591557" isOnRunway="0"/>
|
||||
<node index="1530" lat="S33 56.687308" lon="E151 10.604432" isOnRunway="0"/>
|
||||
<node index="1531" lat="S33 56.697188" lon="E151 10.614409" isOnRunway="0"/>
|
||||
<node index="1532" lat="S33 56.706266" lon="E151 10.624709" isOnRunway="0"/>
|
||||
<node index="1533" lat="S33 56.603733" lon="E151 10.644021" isOnRunway="0"/>
|
||||
<node index="1534" lat="S33 56.628832" lon="E151 10.641124" isOnRunway="0"/>
|
||||
<node index="1535" lat="S33 56.646722" lon="E151 10.635653" isOnRunway="0"/>
|
||||
<node index="1536" lat="S33 56.729229" lon="E151 10.60411" isOnRunway="0"/>
|
||||
<node index="1537" lat="S33 56.777824" lon="E151 10.59027" isOnRunway="0"/>
|
||||
<node index="1538" lat="S33 56.806127" lon="E151 10.587373" isOnRunway="0"/>
|
||||
<node index="1539" lat="S33 56.841372" lon="E151 10.582867" isOnRunway="1"/>
|
||||
<node index="1540" lat="S33 56.864067" lon="E151 10.582545" isOnRunway="1"/>
|
||||
<node index="1541" lat="S33 56.87982" lon="E151 10.586407" isOnRunway="1"/>
|
||||
<node index="1542" lat="S33 56.761537" lon="E151 10.557117" isOnRunway="1"/>
|
||||
<node index="1543" lat="S33 56.746317" lon="E151 10.560336" isOnRunway="1"/>
|
||||
<node index="1544" lat="S33 56.734836" lon="E151 10.568061" isOnRunway="0"/>
|
||||
<node index="1545" lat="S33 56.726025" lon="E151 10.583189" isOnRunway="0"/>
|
||||
</TaxiNodes>
|
||||
<TaxiWaySegments>
|
||||
<arc begin="2" end="253" isPushBackRoute="1" name="0"/>
|
||||
|
@ -4597,7 +4632,7 @@
|
|||
<arc begin="1368" end="1367" isPushBackRoute="0" name="0"/>
|
||||
<arc begin="1368" end="1369" isPushBackRoute="0" name="0"/>
|
||||
<arc begin="1369" end="1368" isPushBackRoute="0" name="0"/>
|
||||
<arc begin="1369" end="446" isPushBackRoute="0" name="Route"/>
|
||||
<arc begin="1369" end="1533" isPushBackRoute="0" name="Route"/>
|
||||
<arc begin="1371" end="1372" isPushBackRoute="0" name="0"/>
|
||||
<arc begin="1372" end="1371" isPushBackRoute="0" name="0"/>
|
||||
<arc begin="1371" end="1388" isPushBackRoute="0" name="0"/>
|
||||
|
@ -4813,5 +4848,74 @@
|
|||
<arc begin="1505" end="1504" isPushBackRoute="1" name="0"/>
|
||||
<arc begin="1507" end="1508" isPushBackRoute="0" name="0"/>
|
||||
<arc begin="1508" end="1507" isPushBackRoute="0" name="0"/>
|
||||
<arc begin="1511" end="1523" isPushBackRoute="0"/>
|
||||
<arc begin="1523" end="1511" isPushBackRoute="0"/>
|
||||
<arc begin="1523" end="1512" isPushBackRoute="0"/>
|
||||
<arc begin="1512" end="1523" isPushBackRoute="0"/>
|
||||
<arc begin="1512" end="1524" isPushBackRoute="0"/>
|
||||
<arc begin="1524" end="1512" isPushBackRoute="0"/>
|
||||
<arc begin="1513" end="1514" isPushBackRoute="0"/>
|
||||
<arc begin="1514" end="1513" isPushBackRoute="0"/>
|
||||
<arc begin="1514" end="1515" isPushBackRoute="0"/>
|
||||
<arc begin="1515" end="1514" isPushBackRoute="0"/>
|
||||
<arc begin="1517" end="446" isPushBackRoute="0" name="Route"/>
|
||||
<arc begin="1518" end="1517" isPushBackRoute="0" name="Route"/>
|
||||
<arc begin="1369" end="1519" isPushBackRoute="0"/>
|
||||
<arc begin="1519" end="1369" isPushBackRoute="0"/>
|
||||
<arc begin="1519" end="1520" isPushBackRoute="0"/>
|
||||
<arc begin="1520" end="1519" isPushBackRoute="0"/>
|
||||
<arc begin="1520" end="1514" isPushBackRoute="0"/>
|
||||
<arc begin="1514" end="1520" isPushBackRoute="0"/>
|
||||
<arc begin="1516" end="1518" isPushBackRoute="0"/>
|
||||
<arc begin="1518" end="1516" isPushBackRoute="0"/>
|
||||
<arc begin="1521" end="1522" isPushBackRoute="0"/>
|
||||
<arc begin="1522" end="1521" isPushBackRoute="0"/>
|
||||
<arc begin="1522" end="1512" isPushBackRoute="0"/>
|
||||
<arc begin="1512" end="1522" isPushBackRoute="0"/>
|
||||
<arc begin="1516" end="1515" isPushBackRoute="0"/>
|
||||
<arc begin="1515" end="1516" isPushBackRoute="0"/>
|
||||
<arc begin="1524" end="1513" isPushBackRoute="0"/>
|
||||
<arc begin="1513" end="1524" isPushBackRoute="0"/>
|
||||
<arc begin="1525" end="1526" isPushBackRoute="0"/>
|
||||
<arc begin="1526" end="1525" isPushBackRoute="0"/>
|
||||
<arc begin="1526" end="1527" isPushBackRoute="0"/>
|
||||
<arc begin="1527" end="1526" isPushBackRoute="0"/>
|
||||
<arc begin="1527" end="1528" isPushBackRoute="0"/>
|
||||
<arc begin="1528" end="1527" isPushBackRoute="0"/>
|
||||
<arc begin="1528" end="1529" isPushBackRoute="0"/>
|
||||
<arc begin="1529" end="1528" isPushBackRoute="0"/>
|
||||
<arc begin="1529" end="1530" isPushBackRoute="0"/>
|
||||
<arc begin="1530" end="1529" isPushBackRoute="0"/>
|
||||
<arc begin="1530" end="1531" isPushBackRoute="0"/>
|
||||
<arc begin="1531" end="1530" isPushBackRoute="0"/>
|
||||
<arc begin="1531" end="1532" isPushBackRoute="0"/>
|
||||
<arc begin="1532" end="1531" isPushBackRoute="0"/>
|
||||
<arc begin="1532" end="165" isPushBackRoute="0"/>
|
||||
<arc begin="165" end="1532" isPushBackRoute="0"/>
|
||||
<arc begin="1533" end="1518" isPushBackRoute="0" name="Route"/>
|
||||
<arc begin="1533" end="1534" isPushBackRoute="0"/>
|
||||
<arc begin="1534" end="1533" isPushBackRoute="0"/>
|
||||
<arc begin="1534" end="1535" isPushBackRoute="0"/>
|
||||
<arc begin="1535" end="1534" isPushBackRoute="0"/>
|
||||
<arc begin="1535" end="1536" isPushBackRoute="0"/>
|
||||
<arc begin="1536" end="1535" isPushBackRoute="0"/>
|
||||
<arc begin="1536" end="1537" isPushBackRoute="0"/>
|
||||
<arc begin="1537" end="1536" isPushBackRoute="0"/>
|
||||
<arc begin="1537" end="1538" isPushBackRoute="0"/>
|
||||
<arc begin="1538" end="1537" isPushBackRoute="0"/>
|
||||
<arc begin="1538" end="1539" isPushBackRoute="0"/>
|
||||
<arc begin="1539" end="1538" isPushBackRoute="0"/>
|
||||
<arc begin="1539" end="1540" isPushBackRoute="0"/>
|
||||
<arc begin="1540" end="1539" isPushBackRoute="0"/>
|
||||
<arc begin="1540" end="1541" isPushBackRoute="0"/>
|
||||
<arc begin="1541" end="1540" isPushBackRoute="0"/>
|
||||
<arc begin="1542" end="1543" isPushBackRoute="0"/>
|
||||
<arc begin="1543" end="1542" isPushBackRoute="0"/>
|
||||
<arc begin="1543" end="1544" isPushBackRoute="0"/>
|
||||
<arc begin="1544" end="1543" isPushBackRoute="0"/>
|
||||
<arc begin="1544" end="1545" isPushBackRoute="0"/>
|
||||
<arc begin="1545" end="1544" isPushBackRoute="0"/>
|
||||
<arc begin="1545" end="157" isPushBackRoute="0"/>
|
||||
<arc begin="157" end="1545" isPushBackRoute="0"/>
|
||||
</TaxiWaySegments>
|
||||
</groundnet>
|
|
@ -94,7 +94,7 @@ void GroundnetTests::testShortestRoute()
|
|||
FGTaxiNodeRef end = network->findNearestNodeOnRunway(runway->threshold());
|
||||
FGTaxiRoute route = network->findShortestRoute(startParking, end);
|
||||
CPPUNIT_ASSERT_EQUAL(true, network->exists());
|
||||
CPPUNIT_ASSERT_EQUAL(29, route.size());
|
||||
CPPUNIT_ASSERT_EQUAL(25, route.size());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -148,7 +148,7 @@ void TrafficTests::testPushback()
|
|||
|
||||
const double crs = SGGeodesy::courseDeg(departureAirport->geod(), arrivalAirport->geod()); // direct course
|
||||
time_t departureTime = globals->get_time_params()->get_cur_time();
|
||||
departureTime = departureTime - 90;
|
||||
departureTime = departureTime + 90;
|
||||
|
||||
std::unique_ptr<FGAIFlightPlan> fp(new FGAIFlightPlan(aiAircraft,
|
||||
flightPlanName, crs, departureTime,
|
||||
|
@ -164,7 +164,7 @@ void TrafficTests::testPushback()
|
|||
aiAircraft->FGAIBase::setFlightPlan(std::move(fp));
|
||||
globals->get_subsystem<FGAIManager>()->attach(aiAircraft);
|
||||
|
||||
aiAircraft = flyAI(aiAircraft, "flight_EGPH_EGPF_" + std::to_string(departureTime));
|
||||
aiAircraft = flyAI(aiAircraft, "flight_testPushback_EGPH_EGPF_" + std::to_string(departureTime));
|
||||
}
|
||||
|
||||
void TrafficTests::testPushbackCargo()
|
||||
|
@ -205,7 +205,8 @@ void TrafficTests::testPushbackCargo()
|
|||
|
||||
const double crs = SGGeodesy::courseDeg(egph->geod(), egpf->geod()); // direct course
|
||||
time_t departureTime = globals->get_time_params()->get_cur_time();
|
||||
departureTime = departureTime - 90;
|
||||
departureTime = departureTime + 90;
|
||||
|
||||
|
||||
std::unique_ptr<FGAIFlightPlan> fp(new FGAIFlightPlan(aiAircraft,
|
||||
flightPlanName, crs, departureTime,
|
||||
|
@ -264,7 +265,8 @@ void TrafficTests::testChangeRunway()
|
|||
|
||||
const double crs = SGGeodesy::courseDeg(departureAirport->geod(), arrivalAirport->geod()); // direct course
|
||||
time_t departureTime = globals->get_time_params()->get_cur_time();
|
||||
departureTime = departureTime - 90;
|
||||
departureTime = departureTime + 90;
|
||||
|
||||
|
||||
std::unique_ptr<FGAIFlightPlan> fp(new FGAIFlightPlan(aiAircraft,
|
||||
flightPlanName, crs, departureTime,
|
||||
|
@ -321,7 +323,8 @@ void TrafficTests::testPushforward()
|
|||
|
||||
const double crs = SGGeodesy::courseDeg(departureAirport->geod(), arrivalAirport->geod()); // direct course
|
||||
time_t departureTime = globals->get_time_params()->get_cur_time();
|
||||
departureTime = departureTime - 90;
|
||||
departureTime = departureTime + 90;
|
||||
|
||||
|
||||
std::unique_ptr<FGAIFlightPlan> fp(new FGAIFlightPlan(aiAircraft,
|
||||
flightPlanName, crs, departureTime,
|
||||
|
@ -377,7 +380,8 @@ void TrafficTests::testPushforwardSpeedy()
|
|||
|
||||
const double crs = SGGeodesy::courseDeg(departureAirport->geod(), arrivalAirport->geod()); // direct course
|
||||
time_t departureTime = globals->get_time_params()->get_cur_time();
|
||||
departureTime = departureTime - 90;
|
||||
departureTime = departureTime + 90;
|
||||
|
||||
|
||||
std::unique_ptr<FGAIFlightPlan> fp(new FGAIFlightPlan(aiAircraft,
|
||||
flightPlanName, crs, departureTime,
|
||||
|
@ -434,7 +438,8 @@ void TrafficTests::testPushforwardParkYBBN()
|
|||
|
||||
const double crs = SGGeodesy::courseDeg(departureAirport->geod(), arrivalAirport->geod()); // direct course
|
||||
time_t departureTime = globals->get_time_params()->get_cur_time();
|
||||
departureTime = departureTime - 90;
|
||||
departureTime = departureTime + 90;
|
||||
|
||||
|
||||
std::unique_ptr<FGAIFlightPlan> fp(new FGAIFlightPlan(aiAircraft,
|
||||
flightPlanName, crs, departureTime,
|
||||
|
@ -514,7 +519,8 @@ void TrafficTests::testPushforwardParkYBBNRepeatGa()
|
|||
|
||||
const double crs = SGGeodesy::courseDeg(departureAirport->geod(), arrivalAirport->geod()); // direct course
|
||||
time_t departureTime = globals->get_time_params()->get_cur_time();
|
||||
departureTime = departureTime - 90;
|
||||
departureTime = departureTime + 90;
|
||||
|
||||
|
||||
std::unique_ptr<FGAIFlightPlan> fp(new FGAIFlightPlan(aiAircraft,
|
||||
flightPlanName, crs, departureTime,
|
||||
|
@ -589,7 +595,8 @@ void TrafficTests::testPushforwardParkYBBNRepeatGate()
|
|||
|
||||
const double crs = SGGeodesy::courseDeg(departureAirport->geod(), arrivalAirport->geod()); // direct course
|
||||
time_t departureTime = globals->get_time_params()->get_cur_time();
|
||||
departureTime = departureTime - 90;
|
||||
departureTime = departureTime + 90;
|
||||
|
||||
|
||||
std::unique_ptr<FGAIFlightPlan> fp(new FGAIFlightPlan(aiAircraft,
|
||||
flightPlanName, crs, departureTime,
|
||||
|
|
Loading…
Reference in a new issue