X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNavaids%2Fnavrecord.cxx;h=041c12f1a663fc84aef85f6b021682eedb01c089;hb=6989f4fb355bf39001aadeb6bee187d5a337b58a;hp=6bb71a54c9d2e40e3506b4e17e451b910e80fd94;hpb=21122fa03ebfb676eacf9c705fb4b2a31416eb78;p=flightgear.git diff --git a/src/Navaids/navrecord.cxx b/src/Navaids/navrecord.cxx index 6bb71a54c..041c12f1a 100644 --- a/src/Navaids/navrecord.cxx +++ b/src/Navaids/navrecord.cxx @@ -91,6 +91,9 @@ void FGNavRecord::initAirportRelation() } mRunway = getRunwayFromName(_name); + if (!mRunway) { + return; + } if (type() != GS) { readAirportSceneryData(); @@ -178,6 +181,38 @@ void FGNavRecord::alignLocaliserWithRunway(double aThreshold) } } +double FGNavRecord::localizerWidth() const +{ + if (!mRunway) { + return 6.0; + } + + SGVec3d thresholdCart(SGVec3d::fromGeod(mRunway->threshold())); + double axisLength = dist(cart(), thresholdCart); + double landingLength = dist(thresholdCart, SGVec3d::fromGeod(mRunway->end())); + +// Reference: http://dcaa.slv.dk:8000/icaodocs/ +// ICAO standard width at threshold is 210 m = 689 feet = approx 700 feet. +// ICAO 3.1.1 half course = DDM = 0.0775 +// ICAO 3.1.3.7.1 Sensitivity 0.00145 DDM/m at threshold +// implies peg-to-peg of 214 m ... we will stick with 210. +// ICAO 3.1.3.7.1 "Course sector angle shall not exceed 6 degrees." + +// Very short runway: less than 1200 m (4000 ft) landing length: + if (landingLength < 1200.0) { +// ICAO fudges localizer sensitivity for very short runways. +// This produces a non-monotonic sensitivity-versus length relation. + axisLength += 1050.0; + } + +// Example: very short: San Diego KMYF (Montgomery Field) ILS RWY 28R +// Example: short: Tom's River KMJX (Robert J. Miller) ILS RWY 6 +// Example: very long: Denver KDEN (Denver) ILS RWY 16R + double raw_width = 210.0 / axisLength * SGD_RADIANS_TO_DEGREES; + return raw_width < 6.0? raw_width : 6.0; + +} + FGTACANRecord::FGTACANRecord(void) : channel(""), freq(0)