49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import * as geolib from "geolib";
|
|
import { computeSpeed } from "../utils/computeSpeed.ts";
|
|
import { generatePerformanceArc } from "../pathGenerators/generatePerformanceArc.ts";
|
|
|
|
export const TerminatorsDF = (
|
|
leg: DFTerminalEntry,
|
|
previousFix: NavFix,
|
|
lastCourse: number,
|
|
waypoint?: Waypoint
|
|
): [NavFix?, LineSegment[]?] => {
|
|
const speed = computeSpeed(leg, previousFix);
|
|
|
|
const targetFix: NavFix = {
|
|
latitude: leg.WptLat,
|
|
longitude: leg.WptLon,
|
|
name: waypoint?.Ident ?? undefined,
|
|
isFlyOver: leg.IsFlyOver,
|
|
altitude: leg.Alt ? leg.Alt.parseAltitude() : previousFix.altitude,
|
|
speed: speed,
|
|
speedConstraint: leg.SpeedLimit,
|
|
altitudeConstraint: leg.Alt,
|
|
};
|
|
|
|
let line: LineSegment[] = [];
|
|
|
|
if (previousFix.isFlyOver) {
|
|
const crsIntoEndpoint = geolib.getGreatCircleBearing(
|
|
previousFix,
|
|
targetFix
|
|
);
|
|
|
|
line = generatePerformanceArc(
|
|
crsIntoEndpoint,
|
|
lastCourse,
|
|
previousFix,
|
|
speed,
|
|
leg.TurnDir,
|
|
previousFix.latitude.equal(targetFix.latitude) &&
|
|
previousFix.longitude.equal(targetFix.longitude)
|
|
);
|
|
} else {
|
|
line.push([previousFix.longitude, previousFix.latitude]);
|
|
}
|
|
|
|
line.push([targetFix.longitude, targetFix.latitude]);
|
|
|
|
return [targetFix, line];
|
|
};
|