Initial
This commit is contained in:
commit
bdc8bb1567
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
node_modules/
|
||||
672
DFD Paths and what to do.md
Normal file
672
DFD Paths and what to do.md
Normal file
@ -0,0 +1,672 @@
|
||||
# References
|
||||
|
||||
- https://www.faa.gov/sites/faa.gov/files/regulations_policies/handbooks_manuals/aviation/instrument_procedures_handbook/FAA-H-8083-16B_Chapter_6.pdf
|
||||
- https://developers.navigraph.com/docs/navigation-data/dfd-data-format#procedure-leg-data-fields-minimum-requirements
|
||||
|
||||
|
||||
# Terminators
|
||||
|
||||
## Arc to Fix (AF)
|
||||
|
||||
### Example
|
||||
|
||||
LGAV BIBE1K SID (Cycle 2507, ID 10653)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `TurnDir`: TurnDirection
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `NavBear`: Theta (fix radial)
|
||||
- `NavDist`: RHO
|
||||
- `Course`: MagCourse (boundary radial)
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly a smooth arc to the fix identified by (`WptID`, `WptLat`, `WptLon`) *or*
|
||||
(`NavID`, `NavLat`, `NavLon`, `NavDist`, `NavBear`).
|
||||
- Arc radius shall be `NavDist`.
|
||||
- Arc center shall be navaid identified by `NavID`, `NavLat`, `NavLon`.
|
||||
- `Course` shall be the boundary radial on which the arc begins (preceding fix lies hereupon).
|
||||
- Arc and turn shall be flown in direction specified by `TurnDir`.
|
||||
|
||||
### Units
|
||||
|
||||
- `NavBear` and `Course` are in **degrees magnetic**.
|
||||
- `NavDist` is in **nmi**. `NavDist` is geodesic (great-circle).
|
||||
|
||||
### Notes
|
||||
|
||||
While similar to an RF, the center point is coded differently.
|
||||
|
||||
|
||||
## Course to Altitude (CA)
|
||||
|
||||
### Example
|
||||
|
||||
LGAV BIBE1L SID (Cycle 2507, ID 10654)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `Course`: MagCourse
|
||||
- `Alt`: Alt1+ (at or above)
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly along `Course` until reaching `Alt`.
|
||||
|
||||
### Units
|
||||
|
||||
- `Course` is in **degrees magnetic**.
|
||||
- `Alt` is in **ft**, but doubles as an FMS constraint.
|
||||
|
||||
### Notes
|
||||
|
||||
The leg terminates upon reaching `Alt`.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
|
||||
|
||||
## Course to DME Distance (CD)
|
||||
|
||||
### Example
|
||||
|
||||
LGAV BIBE2F SID (Cycle 2507, ID 10657)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `Course`: MagCourse
|
||||
- `Distance`: RouteDISTANCEHoldingTime (DME distance)
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly along `Course` until reaching `Distance` from the navaid identified by
|
||||
`NavID`.
|
||||
|
||||
### Units
|
||||
|
||||
- `Course` is in **degrees magnetic**.
|
||||
- `Distance` is in **nmi**. `Distance` is slant **not** geodesic.
|
||||
|
||||
### Notes
|
||||
|
||||
The leg terminates upon reaching `Distance`.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
|
||||
|
||||
## Course to Fix (CF)
|
||||
|
||||
### Example
|
||||
|
||||
LGAV BIBE2F SID (Cycle 2507, ID 10657)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `NavBear`: Theta
|
||||
- `NavDist`: RHO
|
||||
- `Course`: MagCourse
|
||||
- `Distance`: RouteDISTANCEHoldingTime (Path length)
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly `Course` to the fix identified by (`WptID`, `WptLat`, `WptLon`) *or*
|
||||
(`NavID`, `NavLat`, `NavLon`, `NavDist`, `NavBear`).
|
||||
|
||||
### Units
|
||||
|
||||
- `NavBear` and `Course` are in **degrees magnetic**.
|
||||
- `NavDist` and `Distance` are in **nmi**. `NavDist` and `Distance` are geodesic.
|
||||
|
||||
### Notes
|
||||
|
||||
While this might feel like a TF, it isn't.
|
||||
A TF does not specify an exact course to be flown, relying on the computers to figure out the
|
||||
great-circle between the two fixes.
|
||||
|
||||
My guess is, that a CF results in the turn from the preceding fix to be *shifted* so as to
|
||||
ensure the outbound course to the specified fix is equal to the coded course.
|
||||
|
||||
Additionally, if a TurnDir is specified, if a large turn is required to fly `Course`, the turn
|
||||
shall be `TurnDir`.
|
||||
**This is a major difference to TF, these *never* produce such turns.**
|
||||
|
||||
|
||||
## Course to Intercept (CI)
|
||||
|
||||
### Example
|
||||
|
||||
LGAV BIBE1L SID (Cycle 2507, ID 10654)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `Course`: MagCourse
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly `Course` until interception of course of the succeeding leg.
|
||||
|
||||
### Units
|
||||
|
||||
- `Course` is in **degrees magnetic**.
|
||||
|
||||
### Notes
|
||||
|
||||
This needs to look into the succeeding leg in order to calculate the intercept point.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
|
||||
|
||||
## Course to Radial Termination (CR)
|
||||
|
||||
### Example
|
||||
|
||||
LGAV KOR1D SID (Cycle 2507, ID 10679)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `NavBear`: Theta
|
||||
- `Course`: MagCourse
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly `Course` until interception of `NavBear` radial *from* the navaid
|
||||
identified by `NavID`.
|
||||
|
||||
### Units
|
||||
|
||||
- `NavBear` and `Course` are in **degrees magnetic**.
|
||||
|
||||
### Notes
|
||||
|
||||
The leg terminates at the intercept point.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
|
||||
|
||||
## Direct to Fix (DF)
|
||||
|
||||
### Example
|
||||
|
||||
LGAV KOR1D SID (Cycle 2507, ID 10679)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `IsFlyOver`: Flyover
|
||||
|
||||
### Instructions
|
||||
|
||||
- From present position, fly direct to fix identified by `WptID`
|
||||
|
||||
### Units
|
||||
|
||||
- `IsFlyOver`: Boolean indicating if fix is a mandatory fly over.
|
||||
|
||||
|
||||
## Fix to Altitude (FA)
|
||||
|
||||
### Example
|
||||
|
||||
LGAV BIBE2F SID (Cycle 2507, ID 10657)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `NavBear`: Theta
|
||||
- `NavDist`: RHO
|
||||
- `Course`: MagCourse
|
||||
- `Alt`: Alt1+ (at or above)
|
||||
|
||||
### Instructions
|
||||
|
||||
- From the fix identified by (`WptID`, `WptLat`, `WptLon`) *or*
|
||||
(`NavID`, `NavLat`, `NavLon`, `NavDist`, `NavBear`), fly `Course` until reaching `Alt`.
|
||||
|
||||
### Units
|
||||
|
||||
- `NavBear` and `Course` are in **degrees magnetic**.
|
||||
- `NavDist` is in **nmi**. `NavDist` is geodesic.
|
||||
- `Alt` is in **ft**, but doubles as an FMS constraint.
|
||||
|
||||
### Notes
|
||||
|
||||
The leg terminates upon reaching `Alt`.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
|
||||
|
||||
## Track from Fix for Distance (FC)
|
||||
|
||||
### Example
|
||||
|
||||
LIED CAR6F SID (Cycle 2507, ID 11798)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `IsFlyOver`: FlyOver
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `NavBear`: Theta
|
||||
- `NavDist`: RHO
|
||||
- `Course`: MagCourse
|
||||
- `Distance`: RouteDISTANCEHoldingTime (Path length)
|
||||
|
||||
### Instructions
|
||||
|
||||
- From the fix identified by (`WptID`, `WptLat`, `WptLon`) *or*
|
||||
(`NavID`, `NavLat`, `NavLon`, `NavDist`, `NavBear`), fly for `Distance`.
|
||||
|
||||
### Units
|
||||
|
||||
- `NavBear` and `Course` are in **degrees magnetic**.
|
||||
- `NavDist` and `Distance` are in **nmi**. `NavDist` and `Distance` are geodesic.
|
||||
|
||||
### Notes
|
||||
|
||||
The leg terminates upon reaching `Distance`.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
|
||||
|
||||
## Track from Fix to DME Distance (FD)
|
||||
|
||||
### Example
|
||||
|
||||
LGAV BIBE2T SID (Cycle 2507, ID 10659)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `IsFlyOver`: FlyOver
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `NavBear`: Theta
|
||||
- `NavDist`: RHO
|
||||
- `Course`: MagCourse
|
||||
- `Distance`: RouteDISTANCEHoldingTime (DME distance)
|
||||
|
||||
### Instructions
|
||||
|
||||
- From the fix identified by (`WptID`, `WptLat`, `WptLon`) *or*
|
||||
(`NavID`, `NavLat`, `NavLon`, `NavDist`, `NavBear`), fly `Course` until
|
||||
reaching `Distance` from navaid identified by `NavID`.
|
||||
|
||||
### Units
|
||||
|
||||
- `NavBear` and `Course` are in **degrees magnetic**.
|
||||
- `NavDist` and `Distance` are in **nmi**. `NavDist` is geodesic, `Distance` is slant.
|
||||
- `IsFlyOver`: Boolean indicating if fix is a mandatory fly over.
|
||||
|
||||
|
||||
## From Fix to Manual termination (FM)
|
||||
|
||||
### Example
|
||||
|
||||
LFPV PB2V SID (Cycle 2507, ID 10395)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `NavBear`: Theta
|
||||
- `NavDist`: RHO
|
||||
- `Course`: MagCourse
|
||||
|
||||
### Instructions
|
||||
|
||||
- From the fix identified by (`WptID`, `WptLat`, `WptLon`) *or*
|
||||
(`NavID`, `NavLat`, `NavLon`, `NavDist`, `NavBear`), fly `Course` indefinitely.
|
||||
|
||||
### Units
|
||||
|
||||
- `NavBear` and `Course` are in **degrees magnetic**.
|
||||
- `NavDist` is in **nmi**. `NavDist` is geodesic.
|
||||
|
||||
|
||||
## Holding mandatory (HA)
|
||||
|
||||
### Example
|
||||
|
||||
LOWG GRZ4X SID (Cycle 2507, ID 12765)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `TurnDir`: TurnDirection
|
||||
- `Course`: MagCourse
|
||||
- `Distance`: RouteTIMEDistanceHoldingTime
|
||||
- `Alt`: Alt1+ (at or above)
|
||||
|
||||
### Instructions
|
||||
|
||||
- At fix identified by (`WptID`, `WptLat`, `WptLon`), enter `TurnDir` direction holding pattern.
|
||||
- `Course` shall be the inbound course of the holding.
|
||||
- `Distance` shall be the holding leg distance *or* time
|
||||
- `Alt` shall be the altitude at which the holding is exited
|
||||
|
||||
### Units
|
||||
|
||||
- `Course` is in **degrees magnetic**.
|
||||
- `Distance` is in **nmi** *or* **min**. `Distance` is geodesic if in nmi.
|
||||
- `Alt` is in **ft**, but doubles as an FMS constraint.
|
||||
|
||||
### Notes
|
||||
|
||||
As per the docs, there should be a field indicating whether `Distance` is distance or time.
|
||||
I have not found the field or anything that alludes to such.
|
||||
Conversely, as per the FAA, the altitude should be the exit point of the leg.
|
||||
This goes against the textual description of the example.
|
||||
|
||||
My guess is that the holding is at all times executed at leat once, even if the entry to it is also
|
||||
the exit altitude.
|
||||
As for the missing time/distance decider field, assume it to be distance at all times.
|
||||
|
||||
|
||||
## Holding in lieu of Procedure Turn (HF)
|
||||
|
||||
### Example
|
||||
|
||||
FAWB VDM29 APP (Cycle 2507, ID 67794)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `TurnDir`: TurnDirection
|
||||
- `Course`: MagCourse
|
||||
- `Distance`: RouteTIMEDistanceHoldingTime
|
||||
|
||||
### Instructions
|
||||
|
||||
- At fix identified by (`WptID`, `WptLat`, `WptLon`), enter `TurnDir` direction holding pattern.
|
||||
- `Course` shall be the inbound course of the holding.
|
||||
- `Distance` shall be the holding leg distance *or* time
|
||||
- Holding shall be exited after exactly one turn
|
||||
|
||||
### Units
|
||||
|
||||
- `Course` is in **degrees magnetic**.
|
||||
- `Distance` is in **nmi** *or* **min**. `Distance` is geodesic if in nmi.
|
||||
|
||||
### Notes
|
||||
|
||||
As per the docs, there should be a field indicating whether `Distance` is distance or time.
|
||||
I have not found the field or anything that alludes to such.
|
||||
|
||||
My guess is that `Distance` always is a distance. This would match with the example.
|
||||
|
||||
The Leg terminates after the hold is exited ath the hold entry fix.
|
||||
|
||||
|
||||
## Holding mandatory (HM)
|
||||
|
||||
### Example
|
||||
|
||||
FAWB VDM29 APP (Cycle 2507, ID 67794), Missed approach procedure
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `TurnDir`: TurnDirection
|
||||
- `Course`: MagCourse
|
||||
- `Distance`: RouteTIMEDistanceHoldingTime
|
||||
|
||||
### Instructions
|
||||
|
||||
- At fix identified by (`WptID`, `WptLat`, `WptLon`), enter `TurnDir` direction holding pattern.
|
||||
- `Course` shall be the inbound course of the holding.
|
||||
- `Distance` shall be the holding leg distance *or* time
|
||||
- Holding shall be indefinite
|
||||
|
||||
### Units
|
||||
|
||||
- `Course` is in **degrees magnetic**.
|
||||
- `Distance` is in **nmi** *or* **min**. `Distance` is geodesic if in nmi.
|
||||
|
||||
### Notes
|
||||
|
||||
As per the docs, there should be a field indicating whether `Distance` is distance or time.
|
||||
I have not found the field or anything that alludes to such.
|
||||
|
||||
My guess as for the missing time/distance decider field, assume it to be distance at all times.
|
||||
|
||||
|
||||
## Initial Fix (IF)
|
||||
|
||||
### Example
|
||||
|
||||
FAWB VDM29 APP (Cycle 2507, ID 67794), Missed approach procedure
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
|
||||
### Instructions
|
||||
|
||||
- Start of a STAR or APP
|
||||
|
||||
### Notes
|
||||
|
||||
Nothing to be done except parse restrictions.
|
||||
Servers as the entry point of a STAR/APP procedure.
|
||||
|
||||
|
||||
## Procedure Turn (PI)
|
||||
|
||||
### Example
|
||||
|
||||
FAUP VDM35 APP (Cycle 2507, ID 67790)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `TurnDir`: TurnDirection
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `NavBear`: Theta
|
||||
- `NavDist`: RHO
|
||||
- `Course`: MagCourse
|
||||
- `Distance`: RouteTimeDISTANCEHoldingTime (excursion distance from fix)
|
||||
- `Alt`: Alt1
|
||||
|
||||
### Instructions
|
||||
|
||||
- From the fix identified by (`WptID`, `WptLat`, `WptLon`) *or*
|
||||
(`NavID`, `NavLat`, `NavLon`, `NavDist`, `NavBear`), fly `Course` for `Distance`.
|
||||
- Turn `TurnDir` until aligned with succeeding leg course.
|
||||
- `Alt` shall be the altitude during the procedure.
|
||||
|
||||
### Units
|
||||
|
||||
- `NavBear`and `Course` are in **degrees magnetic**.
|
||||
- `NavDist` and `Distance` are in **nmi**. `NavDist` and `Distance` are geodesic.
|
||||
- `Alt` is in **ft**, but doubles as an FMS constraint.
|
||||
|
||||
### Notes
|
||||
|
||||
This needs to look into the succeeding leg in order to calculate the intercept point.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
|
||||
|
||||
## Radius to Fix (RF)
|
||||
|
||||
### Example
|
||||
|
||||
LFRN GODA5R SID (cycle 2507, ID 10485)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `TurnDir`: TurnDirection
|
||||
- `NavBear`: Theta (inbound tangential track)
|
||||
- `Course`: MagCourse
|
||||
- `Distance`: RouteTimeDISTANCEHoldingTime (along track distance)
|
||||
- `CenterID`: ArcCenter
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly a smooth arc to the fix identified by (`WptID`, `WptLat`, `WptLon`).
|
||||
- Arc radius shall be `NavDist`.
|
||||
- Arc center shall be navaid identified by `CenterID`, `CenterLat`, `CenterLon`.
|
||||
- Arc and turn shall be flown in direction specified by `TurnDir`.
|
||||
- `Distance` shall be the track miles along the curved path
|
||||
|
||||
### Units
|
||||
|
||||
- `NavBear` and `Course` are in **degrees magnetic**.
|
||||
- `Distance` is in **nmi**. `Distance` is geodesic (great-circle).
|
||||
|
||||
### Notes
|
||||
|
||||
While similar to an AF, the center point is coded differently.
|
||||
No radius is specified, but can be inferred based on center point, both endpoints and arc length
|
||||
|
||||
Example has `NavBear` set to `null`, significance of the inbound tangential track is unknown.
|
||||
Same for the `Course`, which is set, but lacks any documentation.
|
||||
|
||||
|
||||
## Tract to Fix (TF)
|
||||
|
||||
### Example
|
||||
|
||||
LFRN GODA5R SID (cycle 2507, ID 10485)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `WptID`: FixIdentifier
|
||||
- `IsFlyOver`: Overfly
|
||||
|
||||
### Instructions
|
||||
|
||||
- From the preceding waypoint, fly direct to the waypoint identified by
|
||||
`WptID`, `WptLat`, `WptLon`.
|
||||
|
||||
### Units
|
||||
|
||||
- `IsFlyOver`: Boolean indicating if fix is a mandatory fly over.
|
||||
|
||||
|
||||
## Heading to Altitude (VA)
|
||||
|
||||
### Example
|
||||
|
||||
LFRK LGL4X SID (Cycle 2507, ID 10475)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `Course`: MagCourse (Heading)
|
||||
- `Alt`: Alt1+ (at or above)
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly heading specified in `Course` until reaching `Alt`
|
||||
- **No wind corrections shall be applied**
|
||||
|
||||
### Units
|
||||
|
||||
- `Course` is in **degrees magnetic**.
|
||||
- `Alt` is in **ft**, but doubles as an FMS constraint.
|
||||
|
||||
### Notes
|
||||
|
||||
The leg terminates upon reaching `Alt`.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
|
||||
|
||||
## Heading to DME Distance (VD)
|
||||
|
||||
### Example
|
||||
|
||||
LFRK NEVI4Y SID (Cycle 2507, ID 10482)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `Course`: MagCourse (Heading)
|
||||
- `Distance`: RouteTimeDISTANCEHoldingTime (DME distance)
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly heading specified in `Course` until reaching `Distance` from the navaid
|
||||
identified by `NavID`.
|
||||
- **No wind corrections shall be applied**
|
||||
|
||||
### Units
|
||||
|
||||
- `Course` is in **degrees magnetic**.
|
||||
- `Distance` is in **nmi**. `Distance` is slant **not** geodesic.
|
||||
|
||||
### Notes
|
||||
|
||||
The leg terminates upon reaching `Distance`.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
|
||||
|
||||
## Heading to Intercept (VI)
|
||||
|
||||
### Example
|
||||
|
||||
LFRK LUSI4Y SID (Cycle 2507, ID 10480)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `Course`: MagCourse
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly heading specified in `Course` until interception of course of the
|
||||
succeeding leg.
|
||||
- **No wind corrections shall be applied**
|
||||
|
||||
### Units
|
||||
|
||||
- `Course` is in **degrees magnetic**.
|
||||
|
||||
### Notes
|
||||
|
||||
This needs to look into the succeeding leg in order to calculate the intercept point.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
|
||||
|
||||
## Heading to Manual Termination (VM)
|
||||
|
||||
### Example
|
||||
|
||||
LFPV PB2P SID (Cycle 2507, ID 10394)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `Course`: MagCourse (Heading)
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly heading specified in `Course` indefinitely
|
||||
- **No wind corrections shall be applied**
|
||||
|
||||
### Units
|
||||
|
||||
- `Course` is in **degrees magnetic**.
|
||||
|
||||
|
||||
## Heading to Radial (VR)
|
||||
|
||||
### Example
|
||||
|
||||
LIMC MMP8G SID (Cycle 2507, ID 11909)
|
||||
|
||||
### Minimum Required Fields
|
||||
|
||||
- `NavID`: RecommendedNavaid
|
||||
- `NavBear`: Theta
|
||||
- `Course`: MagCourse
|
||||
|
||||
### Instructions
|
||||
|
||||
- From preceding fix, fly heading specified in `Course` until interception of
|
||||
`NavBear` radial *from* the navaid identified by `NavID`.
|
||||
|
||||
### Units
|
||||
|
||||
- `NavBear` and `Course` are in **degrees magnetic**.
|
||||
|
||||
### Notes
|
||||
|
||||
The leg terminates at the intercept point.
|
||||
This intercept point then becomes the origin fix of the succeeding leg.
|
||||
351
FlightPlan.Resolution.cpp
Normal file
351
FlightPlan.Resolution.cpp
Normal file
@ -0,0 +1,351 @@
|
||||
#include "FMC.h"
|
||||
#include <Helper.h>
|
||||
#include <GeoFormulas/GeoFormulas.h>
|
||||
#include <AerospaceFormulas.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
double slantRangeToGroundDist(double slantRangeNM, double verticalDistFt)
|
||||
{
|
||||
return FeetToNm(sqrt(pow(NmToFeet(slantRangeNM), 2) - pow(verticalDistFt, 2)));
|
||||
}
|
||||
|
||||
void FMC::FlightPlan::CalculateLegs()
|
||||
{
|
||||
double dTol = 0.0;
|
||||
double weight = fmc->gw != DataEntryType::None ? (double)fmc->gw : 280000.0;
|
||||
|
||||
for (size_t i = 0; i < legs.size(); i++)
|
||||
{
|
||||
shared_ptr<NavDataObj> leg = legs[i];
|
||||
|
||||
if (leg->usage == ObjectUsage::Origin)
|
||||
{
|
||||
double dist = 0;
|
||||
if (arrApt.GetID() != -1)
|
||||
dist = depApt.latlon.Dist(arrApt.latlon);
|
||||
leg->vertSegments.emplace_back(VerticalSegment(0.0, fmc->GetPredictedSpeedTarget(depApt.elevation, weight, FLIGHT_PHASE::TAKEOFF, dist, &fmc->actFpln, true), depApt.elevation, SPD_INVALID, ObjectUsagePhase::Climb));
|
||||
}
|
||||
else if (leg->usage == ObjectUsage::Destination)
|
||||
{
|
||||
leg->vertSegments.emplace_back(VerticalSegment(0.0, fmc->GetPredictedSpeedTarget(arrApt.elevation, weight, FLIGHT_PHASE::APPROACH, 0, &fmc->actFpln, true), arrApt.elevation, SPD_INVALID, ObjectUsagePhase::Descent));
|
||||
}
|
||||
|
||||
//NavLat/Lon -> destLatLon
|
||||
//NavDist->distToDest
|
||||
|
||||
//WptLat/Lon -> refLatLon
|
||||
|
||||
//distance->distance
|
||||
|
||||
if (leg->GetType() == NavDataObjType::TerminalLeg)
|
||||
{
|
||||
shared_ptr<TerminalLeg> tl = dynamic_pointer_cast<TerminalLeg>(leg);
|
||||
|
||||
switch (tl->track_code)
|
||||
{
|
||||
case TrackCode::TrackFromFixToDistance:
|
||||
tl->latlon = tl->refLatLon.Dest(tl->distance, modAngle(tl->course - tl->refLatLon.GetMagVar())); //this DEFINITELY works for CourseFromFixToDMEDistance
|
||||
break;
|
||||
case TrackCode::CourseFromFixToDMEDistance:
|
||||
{
|
||||
//check this, terminal ID 11546 on RW35L transition contains one
|
||||
double alt = tl->GetPredictedAltitude();
|
||||
if (alt == ALT_INVALID)
|
||||
alt = tl->altRestrLower;
|
||||
if (alt == ALT_INVALID)
|
||||
alt = tl->altRestr;
|
||||
|
||||
double wptHeight = tl->nvd.GetID() != -1 ? tl->nvd.elevation : 0;
|
||||
double vertDist = fabs(alt - wptHeight);
|
||||
double groundDist = slantRangeToGroundDist(tl->distance, vertDist);
|
||||
groundDist = CLAMP(groundDist, (tl->distance * 0.5), (tl->distance * 1.5));
|
||||
|
||||
tl->latlon = tl->refLatLon.Dest(groundDist, modAngle(tl->course - tl->refLatLon.GetMagVar())); //this DEFINITELY works for CourseFromFixToDMEDistance
|
||||
tl->isFlyover = true;
|
||||
break;
|
||||
}
|
||||
case TrackCode::ArcToFix:
|
||||
//check this - segment generator must create the arc based on NavDist?
|
||||
tl->latlon = tl->refLatLon;
|
||||
break;
|
||||
case TrackCode::RadiusToFix:
|
||||
tl->latlon = tl->refLatLon;
|
||||
break;
|
||||
case TrackCode::CourseFromFixToAltitude:
|
||||
case TrackCode::CourseToAltitude:
|
||||
case TrackCode::HeadingToAltitude:
|
||||
{
|
||||
double lastAlt = 0;
|
||||
LatitudeLongitude startLatLon;
|
||||
double lastSpeed = 150;
|
||||
|
||||
for (int lastLeg = this->GetPreviousFlyableLeg((int)i, legs); lastLeg != -1; lastLeg = this->GetPreviousFlyableLeg((int)lastLeg, legs))
|
||||
{
|
||||
startLatLon = FMC::GetBestLatLonForLeg(this, legs[lastLeg], FMC::perf.get(), true); //this is because the segment will indefinitely extend otherwise
|
||||
lastAlt = GetBestAltitudeForLeg(legs[lastLeg]);
|
||||
lastSpeed = fmc->GetPredictedSpeedTarget(lastAlt, weight, legs[lastLeg]->GetUsagePhase() == ObjectUsagePhase::Climb || legs[lastLeg]->GetUsagePhase() == ObjectUsagePhase::MissedApproach ? FLIGHT_PHASE::CLIMB : FLIGHT_PHASE::CRUISE, 0, this, true);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
double angle = modAngle(tl->course + startLatLon.GetMagVar());
|
||||
|
||||
double minDist = 0;
|
||||
|
||||
if (tl->track_code == TrackCode::CourseFromFixToAltitude) //this breaks at airports
|
||||
{
|
||||
if (fabs(diffAngle(angle, tl->refLatLon.BearingTo(startLatLon))) < 10)
|
||||
minDist = tl->refLatLon.Dist(startLatLon);
|
||||
|
||||
startLatLon = tl->refLatLon;
|
||||
}
|
||||
|
||||
//the heading one should _technically_ account for wind drift here
|
||||
|
||||
double diffAlt = tl->altRestr - lastAlt;
|
||||
|
||||
if (tl->altRestrictionType == AltitudeRestrictionType::Above)
|
||||
diffAlt = max(diffAlt, 1);
|
||||
else if (tl->altRestrictionType == AltitudeRestrictionType::Below)
|
||||
diffAlt = min(diffAlt, -1);
|
||||
|
||||
double fpm = FMC::perf->GetClimbRate(lastAlt, lastSpeed, weight);
|
||||
{
|
||||
double fpmMax = 0;
|
||||
|
||||
double groundHeight = 0;
|
||||
if(tl->usage == ObjectUsage::Origin || tl->usage == ObjectUsage::DepartureLeg)
|
||||
groundHeight = depApt.GetID() != -1 ? depApt.elevation : 0;
|
||||
else if (tl->usage == ObjectUsage::Destination || tl->usage == ObjectUsage::ArrivalLeg || tl->usage == ObjectUsage::ApproachLeg)
|
||||
groundHeight = arrApt.GetID() != -1 ? arrApt.elevation : 0;
|
||||
|
||||
double altAgl = tl->altRestr - groundHeight;
|
||||
if (altAgl < 150)
|
||||
fpmMax = 400;
|
||||
else if (altAgl < 300)
|
||||
fpmMax = 800;
|
||||
else if (altAgl < 1000)
|
||||
fpmMax = 1000;
|
||||
else if (altAgl < 1500)
|
||||
fpmMax = 1500;
|
||||
|
||||
if (fpmMax > 0)
|
||||
fpm = min(fpm, fpmMax);
|
||||
}
|
||||
|
||||
double minutes = fabs(diffAlt / fpm);
|
||||
double dist = ((minutes / 60.0) * lastSpeed) + minDist;
|
||||
|
||||
tl->latlon = startLatLon.Dest(dist, angle);
|
||||
tl->isFlyover = true; //is this right? aren't all of these automatically overfly?
|
||||
break;
|
||||
}
|
||||
case TrackCode::HeadingToDMEDistance:
|
||||
case TrackCode::CourseToDMEDistance:
|
||||
{
|
||||
if (i > 0) //needs to account for DISCOs, etc.
|
||||
{
|
||||
//DME distance is usually slant range - account for altitude in this?
|
||||
LLPoint intcpt1;
|
||||
LLPoint intcpt2;
|
||||
|
||||
std::shared_ptr<NavDataObj> ll = legs[i - 1];
|
||||
LatitudeLongitude startPoint = ll->GetLatitudeLongitude();
|
||||
double desCourse = tl->course;
|
||||
|
||||
double alt = tl->GetPredictedAltitude();
|
||||
if (alt == ALT_INVALID)
|
||||
alt = tl->altRestrLower;
|
||||
if (alt == ALT_INVALID)
|
||||
alt = tl->altRestr;
|
||||
|
||||
double wptHeight = tl->nvd.GetID() != -1 ? tl->nvd.elevation : 0;
|
||||
double vertDist = alt != ALT_INVALID ? fabs(alt - wptHeight) : 0;
|
||||
double groundDist = slantRangeToGroundDist(tl->distance, vertDist);
|
||||
groundDist = CLAMP(groundDist, (tl->distance * 0.5), (tl->distance * 1.5));
|
||||
|
||||
//the heading one should _technically_ account for wind drift here
|
||||
|
||||
if (ll->GetLatitudeLongitude().Dist(tl->destLatlon) <= groundDist)
|
||||
{
|
||||
startPoint = ll->GetLatitudeLongitude().Dest(groundDist * 3.0, modAngle(tl->course + ll->GetLatitudeLongitude().GetMagVar()));
|
||||
desCourse = modAngle(desCourse - 180.0);
|
||||
}
|
||||
|
||||
if (GeodesicArcIntercept(startPoint, DEGTORAD(modAngle(desCourse + startPoint.GetMagVar())), tl->destLatlon, NmToMeters(groundDist), intcpt1, intcpt2, dTol) > 0)
|
||||
{
|
||||
bool intcpt1valid = fabs(diffAngle(startPoint.BearingTo(intcpt1), desCourse)) < 90.0;
|
||||
bool intcpt2valid = fabs(diffAngle(startPoint.BearingTo(intcpt2), desCourse)) < 90.0;
|
||||
|
||||
if (intcpt1valid == true && intcpt2valid == false)
|
||||
tl->latlon = intcpt1;
|
||||
else if (intcpt1valid == false && intcpt2valid == true)
|
||||
tl->latlon = intcpt2;
|
||||
else
|
||||
{
|
||||
if (startPoint.Dist(intcpt1) < startPoint.Dist(intcpt2))
|
||||
tl->latlon = intcpt1;
|
||||
else
|
||||
tl->latlon = intcpt2;
|
||||
}
|
||||
}
|
||||
else
|
||||
tl->latlon = tl->destLatlon;
|
||||
}
|
||||
else
|
||||
tl->latlon = tl->destLatlon;
|
||||
|
||||
tl->isFlyover = true;
|
||||
break;
|
||||
}
|
||||
case TrackCode::HoldAtFix:
|
||||
case TrackCode::HoldUntilManualTermination:
|
||||
case TrackCode::HoldToAltitude:
|
||||
{
|
||||
if (tl->hold.type == HoldType::Database)
|
||||
{
|
||||
tl->hold.holdDir = tl->turn_dir == ObjectTurnDirection::Left ? TurnDirection::Left : TurnDirection::Right;
|
||||
tl->hold.holdDist = tl->distance != -1.0 ? tl->distance : tl->distToDest; //is this right?
|
||||
tl->hold.holdDistManual = tl->hold.holdDist != -1;
|
||||
tl->hold.holdInboundCourse = tl->course;
|
||||
tl->hold.defaultCourse = tl->course;
|
||||
tl->hold.wptIdent = i > 0 ? legs[i-1]->GetIdentifier() : L"";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TrackCode::HeadingUntilManualTermination:
|
||||
{
|
||||
LatitudeLongitude lastlatLon;
|
||||
for (int lastLeg = this->GetPreviousFlyableLeg((int)i, legs); lastLeg != -1; lastLeg = this->GetPreviousFlyableLeg((int)lastLeg, legs))
|
||||
{
|
||||
lastlatLon = legs[lastLeg]->GetLatitudeLongitude();
|
||||
break;
|
||||
}
|
||||
tl->latlon = lastlatLon.Dest(1000, modAngle(tl->course + lastlatLon.GetMagVar()));
|
||||
break;
|
||||
}
|
||||
case TrackCode::CourseToNextIntercept: //is this right?
|
||||
case TrackCode::HeadingToNextLegIntercept:
|
||||
{
|
||||
//TESTED WITH HEADING
|
||||
|
||||
bool set = false;
|
||||
if (i + 1 < legs.size() && i > 0)
|
||||
{
|
||||
if (legs[i + 1]->GetType() == NavDataObjType::TerminalLeg)
|
||||
{
|
||||
std::shared_ptr<TerminalLeg> ntl = std::dynamic_pointer_cast<TerminalLeg>(legs[i + 1]);
|
||||
double trueTlCourse = modAngle(tl->course + ntl->GetLatitudeLongitude().GetMagVar()); //using ntl MagVar as tl->latlon isn't set yet
|
||||
LatitudeLongitude last = legs[i - 1]->GetLatitudeLongitude(); //maybe check this for special cases?
|
||||
if (legs[i - 1]->isFlyover == true && legs[i - 1]->bearingFromTo != -1)
|
||||
{
|
||||
double diffCourse = diffAngleByDir(trueTlCourse, legs[i - 1]->bearingFromTo, (int)tl->turn_dir);
|
||||
diffCourse = CLAMP(diffCourse, -180, 180);
|
||||
double offset = fmc->GetTurnRadiusNM(legs[i]) * (fabs(diffCourse) / 90.0);
|
||||
last = last.Dest(offset, modAngle(legs[i - 1]->bearingFromTo + CLAMP(diffCourse, -90, 90)));
|
||||
}
|
||||
|
||||
if (ntl->track_code == TrackCode::ArcToFix)
|
||||
{
|
||||
LLPoint tan1, tan2;
|
||||
|
||||
if (PointToArcTangents(last, ntl->nvd.GetLatitudeLongitude(), NmToMeters(ntl->refLatLon.Dist(ntl->nvd.GetLatitudeLongitude())), tan1, tan2, dTol) != 0)
|
||||
{
|
||||
if(ntl->turn_dir == ObjectTurnDirection::Left) //this may not be the correct check
|
||||
tl->latlon = tan2;
|
||||
else
|
||||
tl->latlon = tan1;
|
||||
set = true;
|
||||
}
|
||||
}
|
||||
else if(ntl->GetLocationType() != LocationType::Abstract && ntl->course != -1 && ntl->GetLatitudeLongitude() != LatitudeLongitude())
|
||||
{
|
||||
LLPoint intcpt;
|
||||
|
||||
double trueNtlCourse = modAngle(ntl->course + ntl->GetLatitudeLongitude().GetMagVar());
|
||||
|
||||
if (CrsIntersect(last, DEGTORAD(trueTlCourse), ntl->GetLatitudeLongitude(), DEGTORAD(modAngle(trueNtlCourse + 180.0)), dTol, intcpt))
|
||||
tl->latlon = intcpt;
|
||||
else
|
||||
tl->latlon = last; //this will cause a bypass because it's the exact same location
|
||||
set = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (set == false) //sanity check to ensure it's never in the middle of the ocean
|
||||
{
|
||||
int lastFlyable = this->GetPreviousFlyableLeg((int)i, legs);
|
||||
if (lastFlyable != -1)
|
||||
tl->latlon = legs[lastFlyable]->GetLatitudeLongitude();
|
||||
else
|
||||
{
|
||||
int nextFlyable = this->GetNextFlyableLeg((int)i, legs);
|
||||
if (nextFlyable != -1)
|
||||
tl->latlon = legs[nextFlyable]->GetLatitudeLongitude();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TrackCode::HeadingToRadialTermination:
|
||||
case TrackCode::CourseToRadialTermination: //Tested and working on CourseToRadialTermination
|
||||
{
|
||||
//this leg does NOT do the outbound course from the previous leg, it's the outbound course from the point the plane is able to achieve tl->course
|
||||
if (i + 1 < legs.size() && i > 1)
|
||||
{
|
||||
//needs to account for DISCOs, T/C, T/D, etc.
|
||||
std::shared_ptr<NavDataObj> ll = legs[i - 1];
|
||||
|
||||
LatitudeLongitude startPoint = ll->GetLatitudeLongitude();
|
||||
|
||||
double tlCrs = modAngle(tl->course - tl->destLatlon.GetMagVar());
|
||||
|
||||
if (i > 2 && ll->isFlyover == true)
|
||||
{
|
||||
double lastBrg = legs[i - 2]->bearingFromTo;
|
||||
|
||||
TurnDirection dir = diffAngle(tlCrs, lastBrg) < 0 ? TurnDirection::Left : TurnDirection::Right;
|
||||
double turnRad = fmc->GetTurnRadiusNM(ll);
|
||||
|
||||
double angleIn = modAngle(lastBrg + (dir == TurnDirection::Left ? -90 : 90));
|
||||
double angleOut = modAngle(180.0 + (angleIn + diffAngle(tlCrs, lastBrg)));
|
||||
|
||||
LatitudeLongitude turnCenter = ll->GetLatitudeLongitude().Dest(turnRad, angleIn);
|
||||
startPoint = turnCenter.Dest(turnRad, angleOut);
|
||||
}
|
||||
|
||||
LLPoint intcpt;
|
||||
|
||||
if (CrsIntersect(startPoint, DEGTORAD(modAngle(tlCrs)), tl->destLatlon, DEGTORAD(tl->bearToDest), dTol, intcpt)
|
||||
//&& fabs(diffAngle(last.BearingTo(intcpt), trueTlCourse)) < 90
|
||||
//&& fabs(diffAngle(LatitudeLongitude(intcpt).BearingTo(ntl->GetLatitudeLongitude()), trueNtlCourse)) < 90
|
||||
)
|
||||
{
|
||||
tl->latlon = intcpt;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TrackCode::ProcedureTurnToIntercept: //Test with KLBX ILS 07
|
||||
if (i > 0 && i + 1 < legs.size() && legs[i -1]->GetLocationType() == LocationType::Absolute && legs[i + 1]->GetLocationType() == LocationType::Absolute)
|
||||
{
|
||||
double crsBetween = legs[i - 1]->GetLatitudeLongitude().BearingTo(legs[i + 1]->GetLatitudeLongitude());
|
||||
tl->latlon = legs[i - 1]->GetLatitudeLongitude().Dest(tl->distance, crsBetween);
|
||||
}
|
||||
else
|
||||
tl->latlon = tl->destLatlon; //just set to there is something
|
||||
break;
|
||||
case TrackCode::CourseFromFixToManualTermination:
|
||||
tl->latlon = tl->wpt.GetLatitudeLongitude().Dest(1000, modAngle(tl->course + tl->wpt.GetLatitudeLongitude().GetMagVar()));
|
||||
break;
|
||||
case TrackCode::TrackToFix:
|
||||
case TrackCode::CourseToFix:
|
||||
case TrackCode::DirectToFix:
|
||||
/*These are pretty standard, segment calculator processes them correctly already based on desired course*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
1
Runways.json
Normal file
1
Runways.json
Normal file
File diff suppressed because one or more lines are too long
137
TermID_10394.json
Normal file
137
TermID_10394.json
Normal file
@ -0,0 +1,137 @@
|
||||
[
|
||||
{
|
||||
"ID": 84218,
|
||||
"TerminalID": 10394,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 165609,
|
||||
"WptLat": 48.77185278,
|
||||
"WptLon": 2.09752222,
|
||||
"TurnDir": "",
|
||||
"NavID": 3827,
|
||||
"NavLat": 48.97466667,
|
||||
"NavLon": 2.45516667,
|
||||
"NavBear": 228.5,
|
||||
"NavDist": 18.7,
|
||||
"Course": 267,
|
||||
"Distance": 4,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84219,
|
||||
"TerminalID": 10394,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 247786,
|
||||
"WptLat": 48.73058333,
|
||||
"WptLon": 1.8205,
|
||||
"TurnDir": "",
|
||||
"NavID": 3827,
|
||||
"NavLat": 48.97466667,
|
||||
"NavLon": 2.45516667,
|
||||
"NavBear": 239,
|
||||
"NavDist": 29.1,
|
||||
"Course": 256,
|
||||
"Distance": 11,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84220,
|
||||
"TerminalID": 10394,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 253072,
|
||||
"WptLat": 48.75372222,
|
||||
"WptLon": 2.10236111,
|
||||
"TurnDir": "R",
|
||||
"NavID": 3827,
|
||||
"NavLat": 48.97466667,
|
||||
"NavLon": 2.45516667,
|
||||
"NavBear": 225.6,
|
||||
"NavDist": 19.3,
|
||||
"Course": 107,
|
||||
"Distance": 11,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84221,
|
||||
"TerminalID": 10394,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CR",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": 3827,
|
||||
"NavLat": 48.97466667,
|
||||
"NavLon": 2.45516667,
|
||||
"NavBear": 137,
|
||||
"NavDist": null,
|
||||
"Course": 73,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84222,
|
||||
"TerminalID": 10394,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "VM",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 73,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
110
TermID_10395.json
Normal file
110
TermID_10395.json
Normal file
@ -0,0 +1,110 @@
|
||||
[
|
||||
{
|
||||
"ID": 84223,
|
||||
"TerminalID": 10395,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 165609,
|
||||
"WptLat": 48.77185278,
|
||||
"WptLon": 2.09752222,
|
||||
"TurnDir": "",
|
||||
"NavID": 3827,
|
||||
"NavLat": 48.97466667,
|
||||
"NavLon": 2.45516667,
|
||||
"NavBear": 228.5,
|
||||
"NavDist": 18.7,
|
||||
"Course": 267,
|
||||
"Distance": 4,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84224,
|
||||
"TerminalID": 10395,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 165604,
|
||||
"WptLat": 48.80511389,
|
||||
"WptLon": 2.01279722,
|
||||
"TurnDir": "",
|
||||
"NavID": 3827,
|
||||
"NavLat": 48.97466667,
|
||||
"NavLon": 2.45516667,
|
||||
"NavBear": 239,
|
||||
"NavDist": 20.3,
|
||||
"Course": 310,
|
||||
"Distance": 3,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84225,
|
||||
"TerminalID": 10395,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CI",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 22,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84226,
|
||||
"TerminalID": 10395,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "FM",
|
||||
"WptID": 165605,
|
||||
"WptLat": 48.83954444,
|
||||
"WptLon": 1.95262222,
|
||||
"TurnDir": "",
|
||||
"NavID": 3827,
|
||||
"NavLat": 48.97466667,
|
||||
"NavLon": 2.45516667,
|
||||
"NavBear": 247,
|
||||
"NavDist": 21.5,
|
||||
"Course": 67,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
83
TermID_10475.json
Normal file
83
TermID_10475.json
Normal file
@ -0,0 +1,83 @@
|
||||
[
|
||||
{
|
||||
"ID": 84536,
|
||||
"TerminalID": 10475,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "VA",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 125,
|
||||
"Distance": null,
|
||||
"Alt": "00660A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84537,
|
||||
"TerminalID": 10475,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 247774,
|
||||
"WptLat": 49.11566667,
|
||||
"WptLon": -0.32125,
|
||||
"TurnDir": "",
|
||||
"NavID": 3836,
|
||||
"NavLat": 49.17319444,
|
||||
"NavLon": -0.45527778,
|
||||
"NavBear": 123.1,
|
||||
"NavDist": 6.3,
|
||||
"Course": 125,
|
||||
"Distance": 6,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84538,
|
||||
"TerminalID": 10475,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 252987,
|
||||
"WptLat": 48.79061111,
|
||||
"WptLon": 0.53027778,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
83
TermID_10480.json
Normal file
83
TermID_10480.json
Normal file
@ -0,0 +1,83 @@
|
||||
[
|
||||
{
|
||||
"ID": 84551,
|
||||
"TerminalID": 10480,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "VD",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": 3851,
|
||||
"NavLat": 49.17333333,
|
||||
"NavLon": -0.44711111,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 305,
|
||||
"Distance": 5,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84552,
|
||||
"TerminalID": 10480,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "VI",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 243,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84553,
|
||||
"TerminalID": 10480,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 40633,
|
||||
"WptLat": 49.21472222,
|
||||
"WptLon": -1.79555556,
|
||||
"TurnDir": "",
|
||||
"NavID": 3836,
|
||||
"NavLat": 49.17319444,
|
||||
"NavLon": -0.45527778,
|
||||
"NavBear": 273.2,
|
||||
"NavDist": 52.8,
|
||||
"Course": 273,
|
||||
"Distance": 44,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
83
TermID_10482.json
Normal file
83
TermID_10482.json
Normal file
@ -0,0 +1,83 @@
|
||||
[
|
||||
{
|
||||
"ID": 84557,
|
||||
"TerminalID": 10482,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "VD",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": 3851,
|
||||
"NavLat": 49.17333333,
|
||||
"NavLon": -0.44711111,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 305,
|
||||
"Distance": 5,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84558,
|
||||
"TerminalID": 10482,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CI",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "R",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 50,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84559,
|
||||
"TerminalID": 10482,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 8516,
|
||||
"WptLat": 50,
|
||||
"WptLon": -0.36823333,
|
||||
"TurnDir": "",
|
||||
"NavID": 3836,
|
||||
"NavLat": 49.17319444,
|
||||
"NavLon": -0.45527778,
|
||||
"NavBear": 3.9,
|
||||
"NavDist": 49.8,
|
||||
"Course": 4,
|
||||
"Distance": 42,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
110
TermID_10485.json
Normal file
110
TermID_10485.json
Normal file
@ -0,0 +1,110 @@
|
||||
[
|
||||
{
|
||||
"ID": 84567,
|
||||
"TerminalID": 10485,
|
||||
"Type": "5",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 166062,
|
||||
"WptLat": 48.06525,
|
||||
"WptLon": -1.67930556,
|
||||
"TurnDir": "",
|
||||
"NavID": 3946,
|
||||
"NavLat": 48.06925,
|
||||
"NavLon": -1.74166667,
|
||||
"NavBear": 95.4,
|
||||
"NavDist": 2.5,
|
||||
"Course": 101,
|
||||
"Distance": 2,
|
||||
"Alt": "00530A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 195,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84568,
|
||||
"TerminalID": 10485,
|
||||
"Type": "5",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "RF",
|
||||
"WptID": 166064,
|
||||
"WptLat": 48.03483333,
|
||||
"WptLon": -1.63894444,
|
||||
"TurnDir": "R",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 175.3,
|
||||
"Distance": 2.6,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": 166063,
|
||||
"CenterLat": 48.03252778,
|
||||
"CenterLon": -1.6885,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 195,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84569,
|
||||
"TerminalID": 10485,
|
||||
"Type": "5",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 166061,
|
||||
"WptLat": 47.91030556,
|
||||
"WptLon": -1.62611111,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 84570,
|
||||
"TerminalID": 10485,
|
||||
"Type": "5",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 40368,
|
||||
"WptLat": 47.64194444,
|
||||
"WptLon": -1.96,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
110
TermID_10653.json
Normal file
110
TermID_10653.json
Normal file
@ -0,0 +1,110 @@
|
||||
[
|
||||
{
|
||||
"ID": 85228,
|
||||
"TerminalID": 10653,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 166553,
|
||||
"WptLat": 38.04930556,
|
||||
"WptLon": 24.04694722,
|
||||
"TurnDir": "",
|
||||
"NavID": 3985,
|
||||
"NavLat": 37.88867778,
|
||||
"NavLon": 23.80449722,
|
||||
"NavBear": 45,
|
||||
"NavDist": 15,
|
||||
"Course": 32,
|
||||
"Distance": 9,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85229,
|
||||
"TerminalID": 10653,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "AF",
|
||||
"WptID": 166645,
|
||||
"WptLat": 37.75945833,
|
||||
"WptLon": 24.07472778,
|
||||
"TurnDir": "R",
|
||||
"NavID": 3985,
|
||||
"NavLat": 37.88867778,
|
||||
"NavLon": 23.80449722,
|
||||
"NavBear": 116,
|
||||
"NavDist": 15,
|
||||
"Course": 45,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85230,
|
||||
"TerminalID": 10653,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "AF",
|
||||
"WptID": 166646,
|
||||
"WptLat": 37.73090833,
|
||||
"WptLon": 24.04940556,
|
||||
"TurnDir": "R",
|
||||
"NavID": 3985,
|
||||
"NavLat": 37.88867778,
|
||||
"NavLon": 23.80449722,
|
||||
"NavBear": 124,
|
||||
"NavDist": 15,
|
||||
"Course": 116,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 220,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85231,
|
||||
"TerminalID": 10653,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 166620,
|
||||
"WptLat": 37.20805556,
|
||||
"WptLon": 24.83444444,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
164
TermID_10654.json
Normal file
164
TermID_10654.json
Normal file
@ -0,0 +1,164 @@
|
||||
[
|
||||
{
|
||||
"ID": 85232,
|
||||
"TerminalID": 10654,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CA",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 32,
|
||||
"Distance": null,
|
||||
"Alt": "00710A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85233,
|
||||
"TerminalID": 10654,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 166631,
|
||||
"WptLat": 38.07855556,
|
||||
"WptLon": 24.06305,
|
||||
"TurnDir": "",
|
||||
"NavID": 4032,
|
||||
"NavLat": 37.91683889,
|
||||
"NavLon": 23.91443889,
|
||||
"NavBear": 31,
|
||||
"NavDist": 12,
|
||||
"Course": 31,
|
||||
"Distance": 10,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85234,
|
||||
"TerminalID": 10654,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CI",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 31,
|
||||
"Distance": null,
|
||||
"Alt": "04000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 210,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85235,
|
||||
"TerminalID": 10654,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 166663,
|
||||
"WptLat": 38.04289167,
|
||||
"WptLon": 24.31536944,
|
||||
"TurnDir": "",
|
||||
"NavID": 4015,
|
||||
"NavLat": 37.99413889,
|
||||
"NavLon": 24.49490833,
|
||||
"NavBear": 284,
|
||||
"NavDist": 9,
|
||||
"Course": 104,
|
||||
"Distance": 11,
|
||||
"Alt": "07000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85236,
|
||||
"TerminalID": 10654,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 253105,
|
||||
"WptLat": 37.55716389,
|
||||
"WptLon": 24.2987,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "24000B",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85237,
|
||||
"TerminalID": 10654,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 166620,
|
||||
"WptLat": 37.20805556,
|
||||
"WptLon": 24.83444444,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
137
TermID_10657.json
Normal file
137
TermID_10657.json
Normal file
@ -0,0 +1,137 @@
|
||||
[
|
||||
{
|
||||
"ID": 85247,
|
||||
"TerminalID": 10657,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 253138,
|
||||
"WptLat": 37.91801944,
|
||||
"WptLon": 23.93798333,
|
||||
"TurnDir": "",
|
||||
"NavID": 4040,
|
||||
"NavLat": 37.91801944,
|
||||
"NavLon": 23.93798333,
|
||||
"NavBear": 0,
|
||||
"NavDist": 0,
|
||||
"Course": 212,
|
||||
"Distance": 2,
|
||||
"Alt": "00700A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85248,
|
||||
"TerminalID": 10657,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "FA",
|
||||
"WptID": 253138,
|
||||
"WptLat": 37.91801944,
|
||||
"WptLon": 23.93798333,
|
||||
"TurnDir": "",
|
||||
"NavID": 4040,
|
||||
"NavLat": 37.91801944,
|
||||
"NavLon": 23.93798333,
|
||||
"NavBear": 0,
|
||||
"NavDist": 0,
|
||||
"Course": 203,
|
||||
"Distance": null,
|
||||
"Alt": "04000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85249,
|
||||
"TerminalID": 10657,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CD",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": 4007,
|
||||
"NavLat": 37.55716389,
|
||||
"NavLon": 24.2987,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 123,
|
||||
"Distance": 17,
|
||||
"Alt": "06000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 210,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85250,
|
||||
"TerminalID": 10657,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 253105,
|
||||
"WptLat": 37.55716389,
|
||||
"WptLon": 24.2987,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "24000B",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85251,
|
||||
"TerminalID": 10657,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 166620,
|
||||
"WptLat": 37.20805556,
|
||||
"WptLon": 24.83444444,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
110
TermID_10659.json
Normal file
110
TermID_10659.json
Normal file
@ -0,0 +1,110 @@
|
||||
[
|
||||
{
|
||||
"ID": 85257,
|
||||
"TerminalID": 10659,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CA",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 32,
|
||||
"Distance": null,
|
||||
"Alt": "00710A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85258,
|
||||
"TerminalID": 10659,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "FD",
|
||||
"WptID": 253138,
|
||||
"WptLat": 37.91801944,
|
||||
"WptLon": 23.93798333,
|
||||
"TurnDir": "",
|
||||
"NavID": 4040,
|
||||
"NavLat": 37.91801944,
|
||||
"NavLon": 23.93798333,
|
||||
"NavBear": 0,
|
||||
"NavDist": 0,
|
||||
"Course": 32,
|
||||
"Distance": 12,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85259,
|
||||
"TerminalID": 10659,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 253105,
|
||||
"WptLat": 37.55716389,
|
||||
"WptLon": 24.2987,
|
||||
"TurnDir": "R",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "24000B06000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 210,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85260,
|
||||
"TerminalID": 10659,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 166620,
|
||||
"WptLat": 37.20805556,
|
||||
"WptLon": 24.83444444,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
110
TermID_10679.json
Normal file
110
TermID_10679.json
Normal file
@ -0,0 +1,110 @@
|
||||
[
|
||||
{
|
||||
"ID": 85331,
|
||||
"TerminalID": 10679,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CA",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 32,
|
||||
"Distance": null,
|
||||
"Alt": "00710A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85332,
|
||||
"TerminalID": 10679,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 166630,
|
||||
"WptLat": 38.06507222,
|
||||
"WptLon": 24.05061944,
|
||||
"TurnDir": "",
|
||||
"NavID": 4032,
|
||||
"NavLat": 37.91683889,
|
||||
"NavLon": 23.91443889,
|
||||
"NavBear": 31,
|
||||
"NavDist": 11,
|
||||
"Course": 31,
|
||||
"Distance": 10,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85333,
|
||||
"TerminalID": 10679,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CR",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "L",
|
||||
"NavID": 3985,
|
||||
"NavLat": 37.88867778,
|
||||
"NavLon": 23.80449722,
|
||||
"NavBear": 25,
|
||||
"NavDist": null,
|
||||
"Course": 253,
|
||||
"Distance": null,
|
||||
"Alt": "06000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 240,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 85334,
|
||||
"TerminalID": 10679,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 247838,
|
||||
"WptLat": 37.93041111,
|
||||
"WptLon": 22.9359,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
218
TermID_11798.json
Normal file
218
TermID_11798.json
Normal file
@ -0,0 +1,218 @@
|
||||
[
|
||||
{
|
||||
"ID": 90645,
|
||||
"TerminalID": 11798,
|
||||
"Type": "1",
|
||||
"Transition": "RW34L",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 169637,
|
||||
"WptLat": 39.36545,
|
||||
"WptLon": 8.96781667,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 90646,
|
||||
"TerminalID": 11798,
|
||||
"Type": "1",
|
||||
"Transition": "RW34L",
|
||||
"TrackCode": "FC",
|
||||
"WptID": 169637,
|
||||
"WptLat": 39.36545,
|
||||
"WptLon": 8.96781667,
|
||||
"TurnDir": "",
|
||||
"NavID": 4103,
|
||||
"NavLat": 39.38108333,
|
||||
"NavLon": 8.96566667,
|
||||
"NavBear": 170.9,
|
||||
"NavDist": 0.9,
|
||||
"Course": 344,
|
||||
"Distance": 12,
|
||||
"Alt": "05000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 90647,
|
||||
"TerminalID": 11798,
|
||||
"Type": "1",
|
||||
"Transition": "RW34L",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 247859,
|
||||
"WptLat": 39.36372222,
|
||||
"WptLon": 8.97402778,
|
||||
"TurnDir": "L",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 270,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 90648,
|
||||
"TerminalID": 11798,
|
||||
"Type": "1",
|
||||
"Transition": "RW34R",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 169638,
|
||||
"WptLat": 39.36699722,
|
||||
"WptLon": 8.96985833,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 90649,
|
||||
"TerminalID": 11798,
|
||||
"Type": "1",
|
||||
"Transition": "RW34R",
|
||||
"TrackCode": "FC",
|
||||
"WptID": 169638,
|
||||
"WptLat": 39.36699722,
|
||||
"WptLon": 8.96985833,
|
||||
"TurnDir": "",
|
||||
"NavID": 4103,
|
||||
"NavLat": 39.38108333,
|
||||
"NavLon": 8.96566667,
|
||||
"NavBear": 164,
|
||||
"NavDist": 0.9,
|
||||
"Course": 344,
|
||||
"Distance": 12,
|
||||
"Alt": "05000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 90650,
|
||||
"TerminalID": 11798,
|
||||
"Type": "1",
|
||||
"Transition": "RW34R",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 247859,
|
||||
"WptLat": 39.36372222,
|
||||
"WptLon": 8.97402778,
|
||||
"TurnDir": "L",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 270,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 90651,
|
||||
"TerminalID": 11798,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 247859,
|
||||
"WptLat": 39.36372222,
|
||||
"WptLon": 8.97402778,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 90652,
|
||||
"TerminalID": 11798,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 253189,
|
||||
"WptLat": 39.11136111,
|
||||
"WptLon": 9.50802778,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
623
TermID_11909.json
Normal file
623
TermID_11909.json
Normal file
@ -0,0 +1,623 @@
|
||||
[
|
||||
{
|
||||
"ID": 91603,
|
||||
"TerminalID": 11909,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CA",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 346,
|
||||
"Distance": null,
|
||||
"Alt": "01170A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91604,
|
||||
"TerminalID": 11909,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CD",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": 4169,
|
||||
"NavLat": 45.64077778,
|
||||
"NavLon": 8.73483333,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 356,
|
||||
"Distance": 4.1,
|
||||
"Alt": "02200A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91605,
|
||||
"TerminalID": 11909,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "VR",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": 4169,
|
||||
"NavLat": 45.64077778,
|
||||
"NavLon": 8.73483333,
|
||||
"NavBear": 9,
|
||||
"NavDist": null,
|
||||
"Course": 41,
|
||||
"Distance": null,
|
||||
"Alt": "03000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 220,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91606,
|
||||
"TerminalID": 11909,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 169914,
|
||||
"WptLat": 45.72388889,
|
||||
"WptLon": 8.86777778,
|
||||
"TurnDir": "R",
|
||||
"NavID": 4204,
|
||||
"NavLat": 45.64597222,
|
||||
"NavLon": 9.02158333,
|
||||
"NavBear": 302.9,
|
||||
"NavDist": 8,
|
||||
"Course": 123,
|
||||
"Distance": 2,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91607,
|
||||
"TerminalID": 11909,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CA",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 173,
|
||||
"Distance": null,
|
||||
"Alt": "04000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 230,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91608,
|
||||
"TerminalID": 11909,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 253267,
|
||||
"WptLat": 45.64077778,
|
||||
"WptLon": 8.73483333,
|
||||
"TurnDir": "R",
|
||||
"NavID": 4204,
|
||||
"NavLat": 45.64597222,
|
||||
"NavLon": 9.02158333,
|
||||
"NavBear": 265.6,
|
||||
"NavDist": 12.1,
|
||||
"Course": 266,
|
||||
"Distance": 5,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 230,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91609,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "AOS5X",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 253267,
|
||||
"WptLat": 45.64077778,
|
||||
"WptLon": 8.73483333,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91610,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "AOS5X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 169921,
|
||||
"WptLat": 45.57482778,
|
||||
"WptLon": 8.31563056,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91611,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "AOS5X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 169922,
|
||||
"WptLat": 45.59140556,
|
||||
"WptLon": 8.24456111,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "13500A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91612,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "AOS5X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 169932,
|
||||
"WptLat": 45.66769722,
|
||||
"WptLon": 7.91445,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "16000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91613,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "AOS5X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 42141,
|
||||
"WptLat": 45.79638889,
|
||||
"WptLon": 7.34583333,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "19000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91614,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "LAG9X",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 253267,
|
||||
"WptLat": 45.64077778,
|
||||
"WptLon": 8.73483333,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91615,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "LAG9X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 42354,
|
||||
"WptLat": 45.55416667,
|
||||
"WptLon": 8.44916667,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91616,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "LAG9X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 42823,
|
||||
"WptLat": 45.10916667,
|
||||
"WptLon": 8.22972222,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91617,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "LAG9X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 42487,
|
||||
"WptLat": 44.39416667,
|
||||
"WptLon": 8.49805556,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "11000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91618,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "NED9X",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 253267,
|
||||
"WptLat": 45.64077778,
|
||||
"WptLon": 8.73483333,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91619,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "NED9X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 42354,
|
||||
"WptLat": 45.55416667,
|
||||
"WptLon": 8.44916667,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91620,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "NED9X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 42823,
|
||||
"WptLat": 45.10916667,
|
||||
"WptLon": 8.22972222,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91621,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "NED9X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 42584,
|
||||
"WptLat": 44.69388889,
|
||||
"WptLon": 8.14055556,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "20000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91622,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "TOP9X",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 253267,
|
||||
"WptLat": 45.64077778,
|
||||
"WptLon": 8.73483333,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91623,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "TOP9X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 42354,
|
||||
"WptLat": 45.55416667,
|
||||
"WptLon": 8.44916667,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91624,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "TOP9X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 42823,
|
||||
"WptLat": 45.10916667,
|
||||
"WptLon": 8.22972222,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 91625,
|
||||
"TerminalID": 11909,
|
||||
"Type": "3",
|
||||
"Transition": "TOP9X",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 253309,
|
||||
"WptLat": 44.92541667,
|
||||
"WptLon": 7.86166667,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
83
TermID_12765.json
Normal file
83
TermID_12765.json
Normal file
@ -0,0 +1,83 @@
|
||||
[
|
||||
{
|
||||
"ID": 97919,
|
||||
"TerminalID": 12765,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 253373,
|
||||
"WptLat": 46.95531111,
|
||||
"WptLon": 15.44944444,
|
||||
"TurnDir": "",
|
||||
"NavID": 4275,
|
||||
"NavLat": 46.95531111,
|
||||
"NavLon": 15.44944444,
|
||||
"NavBear": 0,
|
||||
"NavDist": 0,
|
||||
"Course": 164,
|
||||
"Distance": 2,
|
||||
"Alt": "02200A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 97920,
|
||||
"TerminalID": 12765,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 253373,
|
||||
"WptLat": 46.95531111,
|
||||
"WptLon": 15.44944444,
|
||||
"TurnDir": "L",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "04000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 97921,
|
||||
"TerminalID": 12765,
|
||||
"Type": "2",
|
||||
"Transition": "ALL",
|
||||
"TrackCode": "HA",
|
||||
"WptID": 253373,
|
||||
"WptLat": 46.95531111,
|
||||
"WptLon": 15.44944444,
|
||||
"TurnDir": "R",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 344,
|
||||
"Distance": 4,
|
||||
"Alt": "04000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
272
TermID_67790.json
Normal file
272
TermID_67790.json
Normal file
@ -0,0 +1,272 @@
|
||||
[
|
||||
{
|
||||
"ID": 458535,
|
||||
"TerminalID": 67790,
|
||||
"Type": "A",
|
||||
"Transition": "UPV1",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 250431,
|
||||
"WptLat": -28.40175278,
|
||||
"WptLon": 21.26041111,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "05800A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458536,
|
||||
"TerminalID": 67790,
|
||||
"Type": "A",
|
||||
"Transition": "UPV1",
|
||||
"TrackCode": "PI",
|
||||
"WptID": 250431,
|
||||
"WptLat": -28.40175278,
|
||||
"WptLon": 21.26041111,
|
||||
"TurnDir": "L",
|
||||
"NavID": 1333,
|
||||
"NavLat": -28.40175278,
|
||||
"NavLon": 21.26041111,
|
||||
"NavBear": 0,
|
||||
"NavDist": 0,
|
||||
"Course": 213,
|
||||
"Distance": 10,
|
||||
"Alt": "04500A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458537,
|
||||
"TerminalID": 67790,
|
||||
"Type": "A",
|
||||
"Transition": "UPV1",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 113102,
|
||||
"WptLat": -28.51632222,
|
||||
"WptLon": 21.33836389,
|
||||
"TurnDir": "",
|
||||
"NavID": 1333,
|
||||
"NavLat": -28.40175278,
|
||||
"NavLon": 21.26041111,
|
||||
"NavBear": 168,
|
||||
"NavDist": 8,
|
||||
"Course": 348,
|
||||
"Distance": 2,
|
||||
"Alt": "04500A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458538,
|
||||
"TerminalID": 67790,
|
||||
"Type": "A",
|
||||
"Transition": "UPV2",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 250431,
|
||||
"WptLat": -28.40175278,
|
||||
"WptLon": 21.26041111,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "05800A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458539,
|
||||
"TerminalID": 67790,
|
||||
"Type": "A",
|
||||
"Transition": "UPV2",
|
||||
"TrackCode": "HF",
|
||||
"WptID": 250431,
|
||||
"WptLat": -28.40175278,
|
||||
"WptLon": 21.26041111,
|
||||
"TurnDir": "L",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 348,
|
||||
"Distance": 8,
|
||||
"Alt": "04500A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458540,
|
||||
"TerminalID": 67790,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 113102,
|
||||
"WptLat": -28.51632222,
|
||||
"WptLon": 21.33836389,
|
||||
"TurnDir": "",
|
||||
"NavID": 1333,
|
||||
"NavLat": -28.40175278,
|
||||
"NavLon": 21.26041111,
|
||||
"NavBear": 168,
|
||||
"NavDist": 8,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "04500A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": -1,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458541,
|
||||
"TerminalID": 67790,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "CF",
|
||||
"WptID": null,
|
||||
"WptLat": -28.41938889,
|
||||
"WptLon": 21.27444444,
|
||||
"TurnDir": "",
|
||||
"NavID": 1333,
|
||||
"NavLat": -28.40175278,
|
||||
"NavLon": 21.26041111,
|
||||
"NavBear": 163.9,
|
||||
"NavDist": 1.3,
|
||||
"Course": 348,
|
||||
"Distance": 6.7,
|
||||
"Alt": "MAP",
|
||||
"Vnav": 2.45,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": -1
|
||||
},
|
||||
{
|
||||
"ID": 458542,
|
||||
"TerminalID": 67790,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 250431,
|
||||
"WptLat": -28.40175278,
|
||||
"WptLon": 21.26041111,
|
||||
"TurnDir": "",
|
||||
"NavID": 1333,
|
||||
"NavLat": -28.40175278,
|
||||
"NavLon": 21.26041111,
|
||||
"NavBear": 0,
|
||||
"NavDist": 0,
|
||||
"Course": 348,
|
||||
"Distance": 1.3,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458543,
|
||||
"TerminalID": 67790,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "CA",
|
||||
"WptID": null,
|
||||
"WptLat": null,
|
||||
"WptLon": null,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 348,
|
||||
"Distance": null,
|
||||
"Alt": "05500A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458544,
|
||||
"TerminalID": 67790,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 250431,
|
||||
"WptLat": -28.40175278,
|
||||
"WptLon": 21.26041111,
|
||||
"TurnDir": "L",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "05800",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
353
TermID_67794.json
Normal file
353
TermID_67794.json
Normal file
@ -0,0 +1,353 @@
|
||||
[
|
||||
{
|
||||
"ID": 458580,
|
||||
"TerminalID": 67794,
|
||||
"Type": "A",
|
||||
"Transition": "FD291",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 113125,
|
||||
"WptLat": -25.65088056,
|
||||
"WptLon": 28.29919167,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "08000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458581,
|
||||
"TerminalID": 67794,
|
||||
"Type": "A",
|
||||
"Transition": "FD291",
|
||||
"TrackCode": "HF",
|
||||
"WptID": 113125,
|
||||
"WptLat": -25.65088056,
|
||||
"WptLon": 28.29919167,
|
||||
"TurnDir": "R",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 284,
|
||||
"Distance": 5.5,
|
||||
"Alt": "07000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 140,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458582,
|
||||
"TerminalID": 67794,
|
||||
"Type": "A",
|
||||
"Transition": "FD292",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 113125,
|
||||
"WptLat": -25.65088056,
|
||||
"WptLon": 28.29919167,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "07000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458583,
|
||||
"TerminalID": 67794,
|
||||
"Type": "A",
|
||||
"Transition": "FD292",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 113123,
|
||||
"WptLat": -25.64774167,
|
||||
"WptLon": 28.34813056,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "07000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458584,
|
||||
"TerminalID": 67794,
|
||||
"Type": "A",
|
||||
"Transition": "FD292",
|
||||
"TrackCode": "FC",
|
||||
"WptID": 113123,
|
||||
"WptLat": -25.64774167,
|
||||
"WptLon": 28.34813056,
|
||||
"TurnDir": "",
|
||||
"NavID": 1283,
|
||||
"NavLat": -25.65591667,
|
||||
"NavLon": 28.220075,
|
||||
"NavBear": 104,
|
||||
"NavDist": 7,
|
||||
"Course": 59,
|
||||
"Distance": 2.7,
|
||||
"Alt": "07000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": -1,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458585,
|
||||
"TerminalID": 67794,
|
||||
"Type": "A",
|
||||
"Transition": "FD292",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 113123,
|
||||
"WptLat": -25.64774167,
|
||||
"WptLon": 28.34813056,
|
||||
"TurnDir": "R",
|
||||
"NavID": 1283,
|
||||
"NavLat": -25.65591667,
|
||||
"NavLon": 28.220075,
|
||||
"NavBear": 104,
|
||||
"NavDist": 7,
|
||||
"Course": 284,
|
||||
"Distance": 3,
|
||||
"Alt": "07000A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458586,
|
||||
"TerminalID": 67794,
|
||||
"Type": "A",
|
||||
"Transition": "FD292",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 113125,
|
||||
"WptLat": -25.65088056,
|
||||
"WptLon": 28.29919167,
|
||||
"TurnDir": "",
|
||||
"NavID": 1283,
|
||||
"NavLat": -25.65591667,
|
||||
"NavLon": 28.220075,
|
||||
"NavBear": 104,
|
||||
"NavDist": 4.3,
|
||||
"Course": 284,
|
||||
"Distance": 2.7,
|
||||
"Alt": "05300A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458587,
|
||||
"TerminalID": 67794,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "IF",
|
||||
"WptID": 113125,
|
||||
"WptLat": -25.65088056,
|
||||
"WptLon": 28.29919167,
|
||||
"TurnDir": "",
|
||||
"NavID": 1283,
|
||||
"NavLat": -25.65591667,
|
||||
"NavLon": 28.220075,
|
||||
"NavBear": 104,
|
||||
"NavDist": 4.3,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "05300A",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": -1,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458588,
|
||||
"TerminalID": 67794,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "CF",
|
||||
"WptID": 113127,
|
||||
"WptLat": -25.65404722,
|
||||
"WptLon": 28.24951389,
|
||||
"TurnDir": "",
|
||||
"NavID": 1283,
|
||||
"NavLat": -25.65591667,
|
||||
"NavLon": 28.220075,
|
||||
"NavBear": 104,
|
||||
"NavDist": 1.6,
|
||||
"Course": 284,
|
||||
"Distance": 2.7,
|
||||
"Alt": "MAP",
|
||||
"Vnav": 3,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": -1
|
||||
},
|
||||
{
|
||||
"ID": 458589,
|
||||
"TerminalID": 67794,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "FD",
|
||||
"WptID": 113127,
|
||||
"WptLat": -25.65404722,
|
||||
"WptLon": 28.24951389,
|
||||
"TurnDir": "",
|
||||
"NavID": 1283,
|
||||
"NavLat": -25.65591667,
|
||||
"NavLon": 28.220075,
|
||||
"NavBear": 104,
|
||||
"NavDist": 1.6,
|
||||
"Course": 284,
|
||||
"Distance": 2.2,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458590,
|
||||
"TerminalID": 67794,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "DF",
|
||||
"WptID": 250381,
|
||||
"WptLat": -25.65591667,
|
||||
"WptLon": 28.220075,
|
||||
"TurnDir": "R",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458591,
|
||||
"TerminalID": 67794,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "TF",
|
||||
"WptID": 113125,
|
||||
"WptLat": -25.65088056,
|
||||
"WptLon": 28.29919167,
|
||||
"TurnDir": "",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": null,
|
||||
"Distance": null,
|
||||
"Alt": "07000",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": null,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
},
|
||||
{
|
||||
"ID": 458592,
|
||||
"TerminalID": 67794,
|
||||
"Type": "D",
|
||||
"Transition": "",
|
||||
"TrackCode": "HM",
|
||||
"WptID": 113125,
|
||||
"WptLat": -25.65088056,
|
||||
"WptLon": 28.29919167,
|
||||
"TurnDir": "R",
|
||||
"NavID": null,
|
||||
"NavLat": null,
|
||||
"NavLon": null,
|
||||
"NavBear": null,
|
||||
"NavDist": null,
|
||||
"Course": 284,
|
||||
"Distance": 4,
|
||||
"Alt": "",
|
||||
"Vnav": null,
|
||||
"CenterID": null,
|
||||
"CenterLat": null,
|
||||
"CenterLon": null,
|
||||
"IsFlyOver": 0,
|
||||
"SpeedLimit": 140,
|
||||
"IsFAF": 0,
|
||||
"IsMAP": 0
|
||||
}
|
||||
]
|
||||
1
Terminals.json
Normal file
1
Terminals.json
Normal file
File diff suppressed because one or more lines are too long
1
Waypoints.json
Normal file
1
Waypoints.json
Normal file
File diff suppressed because one or more lines are too long
280
geojson.js
Normal file
280
geojson.js
Normal file
@ -0,0 +1,280 @@
|
||||
import fs from "fs";
|
||||
import geo from "geojson";
|
||||
import geolib from "geolib";
|
||||
|
||||
const π = Math.PI;
|
||||
|
||||
Number.prototype.toRadians = function () {
|
||||
return (this * Math.PI) / 180;
|
||||
};
|
||||
Number.prototype.toDegrees = function () {
|
||||
return (this * 180) / Math.PI;
|
||||
};
|
||||
|
||||
const nmiToMetre = (nmi) => nmi * 1852.0;
|
||||
|
||||
const intersection = (p1, brng1, p2, brng2) => {
|
||||
if (isNaN(brng1)) throw new TypeError(`invalid brng1 ${brng1}`);
|
||||
if (isNaN(brng2)) throw new TypeError(`invalid brng2 ${brng2}`);
|
||||
|
||||
// see www.edwilliams.org/avform.htm#Intersection
|
||||
|
||||
const φ1 = p1.lat.toRadians(),
|
||||
λ1 = p1.lon.toRadians();
|
||||
const φ2 = p2.lat.toRadians(),
|
||||
λ2 = p2.lon.toRadians();
|
||||
const θ13 = Number(brng1).toRadians(),
|
||||
θ23 = Number(brng2).toRadians();
|
||||
const Δφ = φ2 - φ1,
|
||||
Δλ = λ2 - λ1;
|
||||
|
||||
// angular distance p1-p2
|
||||
const δ12 =
|
||||
2 *
|
||||
Math.asin(
|
||||
Math.sqrt(
|
||||
Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
|
||||
Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) * Math.sin(Δλ / 2)
|
||||
)
|
||||
);
|
||||
if (Math.abs(δ12) < Number.EPSILON) return p1; // coincident points
|
||||
|
||||
// initial/final bearings between points
|
||||
const cosθa =
|
||||
(Math.sin(φ2) - Math.sin(φ1) * Math.cos(δ12)) /
|
||||
(Math.sin(δ12) * Math.cos(φ1));
|
||||
const cosθb =
|
||||
(Math.sin(φ1) - Math.sin(φ2) * Math.cos(δ12)) /
|
||||
(Math.sin(δ12) * Math.cos(φ2));
|
||||
const θa = Math.acos(Math.min(Math.max(cosθa, -1), 1)); // protect against rounding errors
|
||||
const θb = Math.acos(Math.min(Math.max(cosθb, -1), 1)); // protect against rounding errors
|
||||
|
||||
const θ12 = Math.sin(λ2 - λ1) > 0 ? θa : 2 * π - θa;
|
||||
const θ21 = Math.sin(λ2 - λ1) > 0 ? 2 * π - θb : θb;
|
||||
|
||||
const α1 = θ13 - θ12; // angle 2-1-3
|
||||
const α2 = θ21 - θ23; // angle 1-2-3
|
||||
|
||||
if (Math.sin(α1) == 0 && Math.sin(α2) == 0) return null; // infinite intersections
|
||||
if (Math.sin(α1) * Math.sin(α2) < 0) return null; // ambiguous intersection (antipodal/360°)
|
||||
|
||||
const cosα3 =
|
||||
-Math.cos(α1) * Math.cos(α2) + Math.sin(α1) * Math.sin(α2) * Math.cos(δ12);
|
||||
|
||||
const δ13 = Math.atan2(
|
||||
Math.sin(δ12) * Math.sin(α1) * Math.sin(α2),
|
||||
Math.cos(α2) + Math.cos(α1) * cosα3
|
||||
);
|
||||
|
||||
const φ3 = Math.asin(
|
||||
Math.min(
|
||||
Math.max(
|
||||
Math.sin(φ1) * Math.cos(δ13) +
|
||||
Math.cos(φ1) * Math.sin(δ13) * Math.cos(θ13),
|
||||
-1
|
||||
),
|
||||
1
|
||||
)
|
||||
);
|
||||
|
||||
const Δλ13 = Math.atan2(
|
||||
Math.sin(θ13) * Math.sin(δ13) * Math.cos(φ1),
|
||||
Math.cos(δ13) - Math.sin(φ1) * Math.sin(φ3)
|
||||
);
|
||||
const λ3 = λ1 + Δλ13;
|
||||
|
||||
const lat = φ3.toDegrees();
|
||||
const lon = λ3.toDegrees();
|
||||
|
||||
return { lat, lon, name: "INTC" };
|
||||
};
|
||||
|
||||
const SPEED = 4 / 60; //nmi/s
|
||||
const TURN = 3; //deg/s
|
||||
const VS = 1; //fps
|
||||
|
||||
// ADJ to location, (NG), E is neg.
|
||||
const MAGVAR = -1;
|
||||
|
||||
const PROCEDURE_ID = 10394;
|
||||
|
||||
const waypoints = JSON.parse(fs.readFileSync("Waypoints.json"));
|
||||
|
||||
const terminal = JSON.parse(fs.readFileSync("Terminals.json")).filter(
|
||||
({ ID }) => ID === PROCEDURE_ID
|
||||
)[0];
|
||||
const runway = JSON.parse(fs.readFileSync("Runways.json")).filter(
|
||||
({ ID }) => ID === terminal.RwyID
|
||||
)[0];
|
||||
|
||||
const procedure = JSON.parse(fs.readFileSync(`TermID_${PROCEDURE_ID}.json`));
|
||||
|
||||
const points = [{ lat: runway.Latitude, lon: runway.Longitude }];
|
||||
const lines = [];
|
||||
|
||||
procedure.forEach((leg) => {
|
||||
const waypoint = waypoints.filter(({ ID }) => ID === leg.WptID)[0];
|
||||
|
||||
switch (leg.TrackCode) {
|
||||
case "AF":
|
||||
case "CA":
|
||||
case "CD":
|
||||
break;
|
||||
case "CF": {
|
||||
points.push({
|
||||
lat: leg.WptLat,
|
||||
lon: leg.WptLon,
|
||||
name: waypoint?.Ident ?? undefined,
|
||||
});
|
||||
|
||||
if (leg.TurnDir) {
|
||||
const line = [
|
||||
[points[points.length - 2].lon, points[points.length - 2].lat],
|
||||
];
|
||||
|
||||
let inbdCrs = Math.round(
|
||||
geolib.getGreatCircleBearing(
|
||||
{
|
||||
latitude: points[points.length - 3].lat,
|
||||
longitude: points[points.length - 3].lon,
|
||||
},
|
||||
{
|
||||
latitude: points[points.length - 2].lat,
|
||||
longitude: points[points.length - 2].lon,
|
||||
}
|
||||
)
|
||||
);
|
||||
let outbCrs = Math.round(leg.Course - MAGVAR);
|
||||
outbCrs =
|
||||
outbCrs >= 360
|
||||
? outbCrs - 360
|
||||
: outbCrs < 0
|
||||
? outbCrs + 360
|
||||
: outbCrs;
|
||||
|
||||
const delta = Math.abs(inbdCrs - 180 - outbCrs);
|
||||
|
||||
let perpCrs;
|
||||
if (leg.TurnDir === "R") {
|
||||
perpCrs = inbdCrs + 90 + delta / 2;
|
||||
perpCrs = perpCrs >= 360 ? perpCrs - 360 : perpCrs;
|
||||
} else {
|
||||
perpCrs = inbdCrs - 90 - delta / 2;
|
||||
perpCrs = perpCrs < 0 ? perpCrs + 360 : perpCrs;
|
||||
}
|
||||
|
||||
const perpFix = intersection(
|
||||
points[points.length - 2],
|
||||
Math.round(perpCrs - MAGVAR),
|
||||
points[points.length - 1],
|
||||
Math.round(leg.Course + 180 - MAGVAR)
|
||||
);
|
||||
|
||||
const midFix = geolib.getCenter([
|
||||
{
|
||||
latitude: points[points.length - 2].lat,
|
||||
longitude: points[points.length - 2].lon,
|
||||
},
|
||||
{
|
||||
latitude: perpFix.lat,
|
||||
longitude: perpFix.lon,
|
||||
},
|
||||
]);
|
||||
const dist = geolib.getDistance(
|
||||
{
|
||||
latitude: points[points.length - 2].lat,
|
||||
longitude: points[points.length - 2].lon,
|
||||
},
|
||||
{
|
||||
latitude: perpFix.lat,
|
||||
longitude: perpFix.lon,
|
||||
}
|
||||
);
|
||||
const mid1 = geolib.computeDestinationPoint(midFix, dist / 2, inbdCrs);
|
||||
|
||||
let invCrs = outbCrs + 180;
|
||||
invCrs = invCrs >= 360 ? invCrs - 360 : invCrs;
|
||||
const mid2 = geolib.computeDestinationPoint(midFix, dist / 2, invCrs);
|
||||
|
||||
line.push([mid1.longitude, mid1.latitude]);
|
||||
line.push([mid2.longitude, mid2.latitude]);
|
||||
line.push([perpFix.lon, perpFix.lat]);
|
||||
line.push([
|
||||
points[points.length - 1].lon,
|
||||
points[points.length - 1].lat,
|
||||
]);
|
||||
|
||||
lines.push({ line });
|
||||
} else {
|
||||
lines.push({
|
||||
line: [
|
||||
[points[points.length - 2].lon, points[points.length - 2].lat],
|
||||
[points[points.length - 1].lon, points[points.length - 1].lat],
|
||||
],
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CI":
|
||||
break;
|
||||
case "CR": {
|
||||
const intc = intersection(
|
||||
points[points.length - 1],
|
||||
Math.round(leg.Course - MAGVAR),
|
||||
{ lat: leg.NavLat, lon: leg.NavLon },
|
||||
Math.round(leg.NavBear - MAGVAR)
|
||||
);
|
||||
|
||||
points.push(intc);
|
||||
lines.push({
|
||||
line: [
|
||||
[points[points.length - 2].lon, points[points.length - 2].lat],
|
||||
[points[points.length - 1].lon, points[points.length - 1].lat],
|
||||
],
|
||||
});
|
||||
}
|
||||
case "DF":
|
||||
case "FA":
|
||||
case "FC":
|
||||
case "FD":
|
||||
case "FM":
|
||||
case "HA":
|
||||
case "HF":
|
||||
case "HM":
|
||||
case "IF":
|
||||
case "PI":
|
||||
case "RF":
|
||||
case "TF":
|
||||
case "VA":
|
||||
case "VD":
|
||||
case "VI":
|
||||
break;
|
||||
case "VM": {
|
||||
const end = geolib.computeDestinationPoint(
|
||||
{
|
||||
latitude: points[points.length - 1].lat,
|
||||
longitude: points[points.length - 1].lon,
|
||||
},
|
||||
nmiToMetre(10),
|
||||
leg.Course - MAGVAR
|
||||
);
|
||||
lines.push({
|
||||
line: [
|
||||
[points[points.length - 1].lon, points[points.length - 1].lat],
|
||||
[end.longitude, end.latitude],
|
||||
],
|
||||
});
|
||||
}
|
||||
case "VR":
|
||||
case "AF":
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
const output = geo.parse([...points, ...lines], {
|
||||
Point: ["lat", "lon"],
|
||||
LineString: "line",
|
||||
});
|
||||
|
||||
console.log(JSON.stringify(output, null, 2));
|
||||
637
navigationdata.h
Normal file
637
navigationdata.h
Normal file
@ -0,0 +1,637 @@
|
||||
#pragma once
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#ifndef _USE_MATH_DEFINES
|
||||
#define _USE_MATH_DEFINES
|
||||
#endif
|
||||
#include <math.h>
|
||||
#include "latitudelongitude.fs.h"
|
||||
|
||||
//#include <cereal/types/polymorphic.hpp>
|
||||
//#include <cereal/types/base_class.hpp>
|
||||
|
||||
#define ALT_INVALID -9999
|
||||
#define SPD_INVALID -1
|
||||
#define HDG_INVALID -1
|
||||
#define DIST_INVALID -1
|
||||
#define TEMP_INVALID -999
|
||||
|
||||
#define KMTONM(km) (km * 0.539957)
|
||||
#define NMTOKM(nm) (nm * 1.852)
|
||||
|
||||
class Winds
|
||||
{
|
||||
public:
|
||||
double alt = ALT_INVALID;
|
||||
double speed = SPD_INVALID;
|
||||
double direction = HDG_INVALID;
|
||||
|
||||
bool isManual = false;
|
||||
|
||||
static Winds Interpolate(std::vector<Winds> winds, double altitude);
|
||||
bool IsValid() const;
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
enum class TrackCode
|
||||
{
|
||||
ArcToFix, //AF
|
||||
CourseToAltitude, //CA
|
||||
CourseToDMEDistance, //CD
|
||||
CourseToFix, //CF
|
||||
CourseToNextIntercept, //CI
|
||||
CourseToRadialTermination, //CR
|
||||
DirectToFix, //DF
|
||||
CourseFromFixToAltitude, //FA
|
||||
CourseFromFixToDMEDistance, //FD
|
||||
CourseFromFixToManualTermination, //FM
|
||||
TrackFromFixToDistance, //FC
|
||||
HoldToAltitude, //HA
|
||||
HoldAtFix, //HF
|
||||
HoldUntilManualTermination, //HM
|
||||
InitialFix, //IF
|
||||
ProcedureTurnToIntercept, //PI
|
||||
RadiusToFix, //RF
|
||||
TrackToFix, //TF
|
||||
HeadingToAltitude, //VA
|
||||
HeadingToDMEDistance, //VD
|
||||
HeadingToNextLegIntercept, //VI
|
||||
HeadingUntilManualTermination, //VM
|
||||
HeadingToRadialTermination, //VR
|
||||
};
|
||||
|
||||
enum class NavDataObjType
|
||||
{
|
||||
Indeterminate,
|
||||
TerminalLeg,
|
||||
Waypoint,
|
||||
Navaid,
|
||||
AirwayLeg,
|
||||
Airport,
|
||||
Discontinuity,
|
||||
Runway,
|
||||
LatitudeLongitude,
|
||||
PilotDefinedWaypoint,
|
||||
Hold
|
||||
};
|
||||
|
||||
enum class AirwayStatus
|
||||
{
|
||||
Incomplete,
|
||||
OK
|
||||
};
|
||||
|
||||
enum class TurnDirection
|
||||
{
|
||||
Left,
|
||||
Right
|
||||
};
|
||||
|
||||
enum class ObjectTurnDirection
|
||||
{
|
||||
Left = -1,
|
||||
Unspecified = 0,
|
||||
Right = 1
|
||||
};
|
||||
|
||||
enum class ObjectUsagePhase
|
||||
{
|
||||
Unknown,
|
||||
Climb,
|
||||
Descent,
|
||||
MissedApproach
|
||||
};
|
||||
|
||||
enum class ObjectUsage
|
||||
{
|
||||
Leg,
|
||||
InitialPosition,
|
||||
Origin,
|
||||
DepartureLeg,
|
||||
ArrivalLeg,
|
||||
ApproachLeg,
|
||||
Destination,
|
||||
TurnPoint,
|
||||
ToC,
|
||||
ToD,
|
||||
SC
|
||||
};
|
||||
|
||||
enum class AltitudeRestrictionType
|
||||
{
|
||||
Above,
|
||||
Below,
|
||||
Between,
|
||||
Exact,
|
||||
Step,
|
||||
Unspecified
|
||||
};
|
||||
|
||||
struct LateralSegment
|
||||
{
|
||||
LatitudeLongitude startPoint;
|
||||
LatitudeLongitude endPoint;
|
||||
|
||||
double turnRadius = 0;
|
||||
double turnStartRadial = 0;
|
||||
double turnEndRadial = 0;
|
||||
LatitudeLongitude turnCenterPoint;
|
||||
TurnDirection turnDir = TurnDirection::Left;
|
||||
|
||||
bool afsComplete = false;
|
||||
|
||||
LateralSegment() {}
|
||||
LateralSegment(LatitudeLongitude start, LatitudeLongitude end);
|
||||
LateralSegment(LatitudeLongitude center, LatitudeLongitude start, LatitudeLongitude end, TurnDirection direction);
|
||||
|
||||
double GetLength();
|
||||
|
||||
//may need ground distance, vertical rate, delta altitude, etc.
|
||||
//use performance recording/monitoring software to sample data points from testers to build perf DB
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct VerticalSegment
|
||||
{
|
||||
double endsAt = 1.0;
|
||||
double speed = SPD_INVALID;
|
||||
double altitude = ALT_INVALID;
|
||||
|
||||
double speedRestriction = SPD_INVALID;
|
||||
|
||||
ObjectUsagePhase phase = ObjectUsagePhase::Unknown;
|
||||
|
||||
//DEBUG
|
||||
double fpm = 0;
|
||||
double distToArr = 0;
|
||||
double gs = 0;
|
||||
//
|
||||
|
||||
double fuelBurned = 0;
|
||||
|
||||
VerticalSegment() {}
|
||||
VerticalSegment(double endsAt, double speed, double altitude, double speedRestriction, ObjectUsagePhase usagePhase, double FPM = 0, double DTA = 0, double GS = 0) : endsAt(endsAt), speed(speed), altitude(altitude), speedRestriction(speedRestriction), phase(usagePhase), fpm(FPM), distToArr(DTA), gs(GS) {}
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
enum class LocationType
|
||||
{
|
||||
Absolute,
|
||||
Hold,
|
||||
Relative,
|
||||
PerfBased,
|
||||
Abstract
|
||||
};
|
||||
|
||||
struct NavDataObj
|
||||
{
|
||||
protected:
|
||||
int ID = -1;
|
||||
public:
|
||||
std::wstring identifier;
|
||||
LatitudeLongitude latlon;
|
||||
int Flag = 0;
|
||||
|
||||
Winds winds[4];
|
||||
|
||||
double tempAlt = ALT_INVALID;
|
||||
double temp = TEMP_INVALID;
|
||||
|
||||
double altRestr = ALT_INVALID;
|
||||
double altRestrLower = ALT_INVALID;
|
||||
AltitudeRestrictionType altRestrictionType = AltitudeRestrictionType::Unspecified;
|
||||
|
||||
double speed_restr = SPD_INVALID;
|
||||
bool isFlyover = false;
|
||||
|
||||
//ObjectUsagePhase usagePhase = ObjectUsagePhase::Unknown;
|
||||
ObjectUsage usage = ObjectUsage::Leg;
|
||||
|
||||
double progress = 0.0;
|
||||
|
||||
double distToNext = DIST_INVALID;
|
||||
double distToArrival = DIST_INVALID;
|
||||
double bearingFromTo = 0;
|
||||
double bearingToFrom = 0;
|
||||
|
||||
double fuelBurnToNext = 0;
|
||||
bool efobSet = false;
|
||||
double efob = -1;
|
||||
|
||||
double ete = -1;
|
||||
double eto = -1;
|
||||
double ato = -1;
|
||||
|
||||
//Values for use in internal calculations only
|
||||
struct Calculation
|
||||
{
|
||||
double secToNextLeg = -1;
|
||||
double progToNextLeg = 0.0;
|
||||
double distToNextLeg = DIST_INVALID;
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
} calc;
|
||||
//
|
||||
|
||||
size_t currLatSegment = 0;
|
||||
std::vector<LateralSegment> latSegments;
|
||||
|
||||
size_t currVertSegment = 0;
|
||||
std::vector< VerticalSegment> vertSegments;
|
||||
|
||||
static std::shared_ptr<NavDataObj> Copy(std::shared_ptr<NavDataObj> obj);
|
||||
|
||||
double GetPredictedAltitude() const;
|
||||
double GetPredictedSpeed() const;
|
||||
ObjectUsagePhase GetUsagePhase() const;
|
||||
|
||||
int GetID() const;
|
||||
void SetID(int id);
|
||||
virtual bool IsConditional() const;
|
||||
virtual LocationType GetLocationType() const;
|
||||
virtual const NavDataObjType GetType() const = 0;
|
||||
virtual LatitudeLongitude GetLatitudeLongitude() const;
|
||||
virtual std::wstring GetIdentifier() const;
|
||||
virtual ~NavDataObj();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct Runway : public NavDataObj {
|
||||
double true_heading;
|
||||
short length;
|
||||
short width;
|
||||
std::wstring surface;
|
||||
short elevation;
|
||||
virtual const NavDataObjType GetType() const;
|
||||
Runway();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
enum class HoldType
|
||||
{
|
||||
Standard,
|
||||
Manual,
|
||||
Database,
|
||||
DatabaseEdited
|
||||
};
|
||||
|
||||
struct HoldParameters
|
||||
{
|
||||
std::wstring wptIdent;
|
||||
|
||||
HoldType type = HoldType::Standard;
|
||||
bool holdDistManual = false;
|
||||
double holdDist = -1;
|
||||
bool holdTimeManual = true;
|
||||
double holdTime = -1;
|
||||
TurnDirection holdDir = TurnDirection::Right;
|
||||
double holdInboundCourse = -1;
|
||||
double holdLimitTime = -1;
|
||||
double holdLimitFuel = -1;
|
||||
bool holdExit = false;
|
||||
|
||||
double defaultCourse = -1;
|
||||
double defaultTime = -1;
|
||||
|
||||
template <class B> void parse(B& buf);
|
||||
template <class B> void store(B& buf) const;
|
||||
};
|
||||
|
||||
struct Hold : public NavDataObj, HoldParameters {
|
||||
virtual const NavDataObjType GetType() const override;
|
||||
virtual bool IsConditional() const override;
|
||||
virtual LocationType GetLocationType() const override;
|
||||
double GetSpeedRestriction(double altitude) const;
|
||||
void Update(HoldParameters params);
|
||||
Hold();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
enum class NavaidType
|
||||
{
|
||||
VOR = 1,
|
||||
VORTAC = 2,
|
||||
TACAN = 3,
|
||||
VORDME = 4,
|
||||
NDB = 5,
|
||||
NDBDME = 7,
|
||||
ILSDME = 8,
|
||||
DME = 9
|
||||
};
|
||||
|
||||
struct Navaid : public NavDataObj {
|
||||
NavaidType type;
|
||||
std::wstring name;
|
||||
|
||||
std::wstring country;
|
||||
|
||||
int frequency;
|
||||
std::wstring channel;
|
||||
std::wstring usage;
|
||||
int elevation;
|
||||
double slaved_var;
|
||||
|
||||
virtual const NavDataObjType GetType() const;
|
||||
|
||||
Navaid();
|
||||
|
||||
template <class B> void parse(B& buf);
|
||||
template <class B> void store(B& buf) const;
|
||||
};
|
||||
|
||||
struct Waypoint : public NavDataObj {
|
||||
bool collocated;
|
||||
|
||||
std::wstring name;
|
||||
|
||||
std::wstring country;
|
||||
|
||||
int navaidID;
|
||||
|
||||
virtual const NavDataObjType GetType() const;
|
||||
|
||||
Waypoint();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct AirwayLeg : public NavDataObj {
|
||||
int airway_id;
|
||||
std::wstring airway_ident;
|
||||
|
||||
std::wstring level;
|
||||
|
||||
std::wstring wpt1Ident;
|
||||
int wpt1ID;
|
||||
int wpt2ID;
|
||||
|
||||
bool is_start;
|
||||
bool is_end;
|
||||
|
||||
virtual const NavDataObjType GetType() const;
|
||||
|
||||
AirwayLeg();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct Airway {
|
||||
int ID;
|
||||
std::wstring identifier;
|
||||
|
||||
AirwayStatus status;
|
||||
std::vector<AirwayLeg> legs;
|
||||
Airway();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct Discontinuity : public NavDataObj {
|
||||
virtual bool IsConditional() const override;
|
||||
virtual const NavDataObjType GetType() const override;
|
||||
virtual std::wstring GetIdentifier() const override;
|
||||
virtual LocationType GetLocationType() const override;
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct LatitudeLongitudeWaypoint : public NavDataObj {
|
||||
virtual LocationType GetLocationType() const override;
|
||||
virtual const NavDataObjType GetType() const;
|
||||
LatitudeLongitudeWaypoint();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct PilotDefinedWaypoint : public NavDataObj {
|
||||
std::wstring pbd_place;
|
||||
int pbd_brg;
|
||||
int pbd_dist;
|
||||
|
||||
int elev;
|
||||
int crs;
|
||||
int length;
|
||||
|
||||
bool is_defined = false;
|
||||
|
||||
bool IsRunway() const;
|
||||
virtual const NavDataObjType GetType() const;
|
||||
|
||||
PilotDefinedWaypoint();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct TerminalLeg : public NavDataObj {
|
||||
int terminal_id;
|
||||
std::shared_ptr<NavDataObj> via;
|
||||
|
||||
char type;
|
||||
|
||||
TrackCode track_code;
|
||||
|
||||
std::wstring transition;
|
||||
|
||||
Waypoint wpt;
|
||||
Navaid nvd;
|
||||
HoldParameters hold;
|
||||
|
||||
ObjectTurnDirection turn_dir;
|
||||
double course;
|
||||
double distance;
|
||||
LatitudeLongitude refLatLon;
|
||||
|
||||
LatitudeLongitude destLatlon;
|
||||
double bearToDest;
|
||||
double distToDest;
|
||||
|
||||
double vnav;
|
||||
int center_id;
|
||||
LatitudeLongitude center_latlon;
|
||||
virtual const NavDataObjType GetType() const override;
|
||||
virtual LatitudeLongitude GetLatitudeLongitude() const override;
|
||||
|
||||
double speed_limit;
|
||||
|
||||
bool is_missed_app_point;
|
||||
bool is_final_app_fix;
|
||||
|
||||
virtual bool IsConditional() const override;
|
||||
virtual LocationType GetLocationType() const override;
|
||||
TerminalLeg();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct ILS {
|
||||
int ID;
|
||||
std::wstring identifier;
|
||||
LatitudeLongitude latlon;
|
||||
|
||||
int runway_id;
|
||||
int frequency;
|
||||
double gs_angle;
|
||||
|
||||
short category;
|
||||
double loc_course;
|
||||
|
||||
int crossing_height;
|
||||
int elevation;
|
||||
bool has_dme;
|
||||
|
||||
ILS();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct TerminalProcedure {
|
||||
int ID;
|
||||
std::wstring identifier;
|
||||
|
||||
//int airport_id;
|
||||
|
||||
//std::wstring icao;
|
||||
|
||||
char proc;
|
||||
|
||||
//std::wstring full_name;
|
||||
|
||||
//std::wstring runway;
|
||||
|
||||
std::wstring GetFormattedName();
|
||||
|
||||
std::vector<TerminalLeg> legs;
|
||||
|
||||
bool is_ils;
|
||||
|
||||
int runway_id;
|
||||
|
||||
TerminalProcedure();
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct Airport : public NavDataObj {
|
||||
std::wstring name;
|
||||
int primaryid;
|
||||
short elevation;
|
||||
|
||||
int transition_altitude;
|
||||
|
||||
Airport();
|
||||
|
||||
std::vector<Runway> runways;
|
||||
std::vector<TerminalProcedure> sids;
|
||||
std::vector<TerminalProcedure> stars;
|
||||
std::vector<TerminalProcedure> approaches;
|
||||
|
||||
Airport& operator=(const Airport& otherapt);
|
||||
bool operator==(Airport& otherapt);
|
||||
bool operator!=(Airport& otherapt);
|
||||
virtual const NavDataObjType GetType() const;
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
struct Transition
|
||||
{
|
||||
std::wstring identifier;
|
||||
|
||||
template <class B> void store(B& buf) const;
|
||||
template <class B> void parse(B& buf);
|
||||
};
|
||||
|
||||
class WorldData
|
||||
{
|
||||
public:
|
||||
static std::vector<LatitudeLongitude> LatLonSpread(LatitudeLongitude source, int numOfSteps);
|
||||
static int LatToX(double lat);
|
||||
static int LonToY(double lon);
|
||||
|
||||
std::vector<Airport> airports[181][361];
|
||||
std::vector<Navaid> navaids[181][361];
|
||||
std::vector<Waypoint> waypoints[181][361];
|
||||
|
||||
std::vector<Airway> airways;
|
||||
std::vector<AirwayLeg> airwayLegs;
|
||||
std::vector<ILS> ilses;
|
||||
};
|
||||
|
||||
struct NavigationData {
|
||||
private:
|
||||
void name_terminal_leg(TerminalLeg& tl);
|
||||
int which_terminal_leg_is_duplicate(TerminalLeg& tl1, TerminalLeg& tl2);
|
||||
std::string dataDir;
|
||||
|
||||
public:
|
||||
bool is_usable;
|
||||
std::wstring cycle_name;
|
||||
std::wstring cycle_start;
|
||||
std::wstring cycle_end;
|
||||
|
||||
bool is_valid();
|
||||
|
||||
bool lookup_airport_by_id(int id, Airport & apt);
|
||||
bool lookup_airport_by_icao(std::wstring icao, Airport & apt);
|
||||
bool lookup_waypoint_by_id(int wptid, Waypoint& wpt);
|
||||
bool lookup_navaid_by_id(int navid, Navaid& nd);
|
||||
bool lookup_airway_by_ident(std::wstring ident, Airway& aw);
|
||||
|
||||
bool lookup_ils(int runway_id, ILS& ils);
|
||||
std::vector<ILS> lookup_ils_by_frequency(int frequency);
|
||||
std::vector<ILS> lookup_ils_by_ident(std::wstring ident);
|
||||
|
||||
bool intersect_airways(int airwayid1, int airwayid2, AirwayLeg& leg);
|
||||
|
||||
bool lookup_airway_legs(Airway awy, std::wstring waypoint1ident, std::wstring waypoint2ident, std::vector<AirwayLeg>& legs);
|
||||
|
||||
std::vector<Navaid> lookup_navaids_by_ident(std::wstring ident);
|
||||
std::vector<Navaid> lookup_navaids_by_frequency(int frequency);
|
||||
std::vector<Waypoint> lookup_waypoints_by_ident(std::wstring ident);
|
||||
|
||||
std::vector<Runway> lookup_runways(int airport_id, int terminal_id = -1);
|
||||
|
||||
double get_runway_slope(int airport_id, int runway_id);
|
||||
|
||||
WorldData worldData;
|
||||
|
||||
std::vector<Transition> lookup_sid_transitions(int sid_id);
|
||||
std::vector<TerminalProcedure> lookup_sids(int airport_id, int runway_id = -1);
|
||||
std::vector<TerminalLeg> lookup_sid_legs(int sid_id, std::wstring rwy, std::wstring transition);
|
||||
|
||||
std::vector<Transition> lookup_star_transitions(int star_id);
|
||||
std::vector<TerminalProcedure> lookup_stars(int airport_id, int runway_id = -1);
|
||||
std::vector<TerminalLeg> lookup_star_legs(int star_id, std::wstring rwy, std::wstring transition);
|
||||
|
||||
std::vector<Transition> lookup_approach_transitions(int approach_id);
|
||||
std::vector<TerminalProcedure> lookup_approaches(int airport_id, int runway_id = -1, bool strict_runway_enforcement = false);
|
||||
std::vector<TerminalLeg> lookup_approach_legs(int approach_id, std::wstring transition);
|
||||
|
||||
NavigationData(std::wstring dataDirectory);
|
||||
~NavigationData();
|
||||
};
|
||||
|
||||
8
package.json
Normal file
8
package.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"geojson": "^0.5.0",
|
||||
"geolib": "^3.3.4",
|
||||
"magvar": "^2.0.0"
|
||||
},
|
||||
"type": "module"
|
||||
}
|
||||
39
pnpm-lock.yaml
generated
Normal file
39
pnpm-lock.yaml
generated
Normal file
@ -0,0 +1,39 @@
|
||||
lockfileVersion: '9.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
importers:
|
||||
|
||||
.:
|
||||
dependencies:
|
||||
geojson:
|
||||
specifier: ^0.5.0
|
||||
version: 0.5.0
|
||||
geolib:
|
||||
specifier: ^3.3.4
|
||||
version: 3.3.4
|
||||
magvar:
|
||||
specifier: ^2.0.0
|
||||
version: 2.0.0
|
||||
|
||||
packages:
|
||||
|
||||
geojson@0.5.0:
|
||||
resolution: {integrity: sha512-/Bx5lEn+qRF4TfQ5aLu6NH+UKtvIv7Lhc487y/c8BdludrCTpiWf9wyI0RTyqg49MFefIAvFDuEi5Dfd/zgNxQ==}
|
||||
engines: {node: '>= 0.10'}
|
||||
|
||||
geolib@3.3.4:
|
||||
resolution: {integrity: sha512-EicrlLLL3S42gE9/wde+11uiaYAaeSVDwCUIv2uMIoRBfNJCn8EsSI+6nS3r4TCKDO6+RQNM9ayLq2at+oZQWQ==}
|
||||
|
||||
magvar@2.0.0:
|
||||
resolution: {integrity: sha512-00LpSwEJZcnyX3VsdCM2CHSCvB+M6sVQTawLCB3J9oK7eEueNltNx9GFL4YR+/HIkLM+l8rFKiY77JTKnOf0jw==}
|
||||
|
||||
snapshots:
|
||||
|
||||
geojson@0.5.0: {}
|
||||
|
||||
geolib@3.3.4: {}
|
||||
|
||||
magvar@2.0.0: {}
|
||||
Loading…
x
Reference in New Issue
Block a user