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]; };