ID:

AIXM-509

target version:

AIXM 5.2

version:

1.0

last updated:

7 OCT 2021

status:

PROPOSED


Description

The course, courseDirection and courseType attributes of the SegmentLeg are moved into an object (CourseGroup), with a multiplicity of “0 to many”. The inboundCourse, outboundCourse and outboundCourseType of HoldingPattern and AerialRefuellingAnchor are also replaced with associations to the new CourseGroup class.

The CodeCourseBaseType data type is enhanced with four new values, TRUE_COURSE, MAG_COURSE, TRUE_HDG and MAG_HDG. The CodeCourseBaseType value HDG is removed.

Note: This Change Proposal replaces the previously approved AIXM-434 Change Proposal (which was incomplete because it did not cover HoldingPattern, AerialRefuellingAnchor and all mapping situations).

Rationale for change

See https://aixmccb.atlassian.net/browse/AIXM-273, https://aixmccb.atlassian.net/browse/AIXM-110

ICAO Annex 4, 9.8.1 and 10.8.1 provides the possibility for a SID or STAR segment to have two values for bearings, tracks or courses: magnetic (the default requirement) and true. Also, ICAO Doc 8168 (PANS-OPS), Vol. II, Part III, Section 5, Chapter 2, 2.1 f) and 2.2 f) provide both true track and magnetic track for RNAV SID/STAR. The same applies to Holdings, for which PANS-OPS requires that the inbound track is provided with both magnetic and true values. AerialRefuellingAnchor also needs both true and magnetic tracks, as it is conceptually similar to a holding pattern.

Currently, the SegmentLeg, HoldingPattern and AerialRefuellingAnchor support a single value (course) with a corresponding courseType (e.g. MAG_TRACK). It is not possible to enter a second value with a different courseType (e.g. TRUE_TRACK).
HoldingPattern and AerialRefuellingAnchor have additional issues, as it misses the possibility to specify an inbound course type.

The AIXM 5.1.1 CodeCourseBaseType is missing a “course” value (true or magnetic) supporting the encoding of the types of paths based on course navigation, as covered by the CodeSegmentPathType data type i.e. CA, CD, CF, CI, CR, FA, FC, FD, FM, FT. Also, the heading value (HDG) is missing the reference to true or magnetic North (as defined by ICAO in Doc. 8168, Vol. II), which may create ambiguity.

The values of the CodeCourseBaseType are missing definitions. The current definitions contain only the description of the acronyms.

Impact assessment

[FWD_MAP_1:1] Data mapping is possible and no data loss occurs when data is exchanged from a system (A) that uses AIXM 5.1.1 for output towards a system (B) that uses AIXM 5.2 for input.

[BWD_MAP_LOSS] Data mapping is possible, but some data would be lost (or converted into Notes) when data is exchanged from a system (B) that uses AIXM 5.2 for output towards a system (A) that uses AIXM 5.1.1 for input.

Change Proposal details

In the UML model

  • Add a new CourseGroup class with <<object>> stereotype, definition: “Defines the direction in which the aircraft has to be steered.”
    • The attributes of the CourseGroup class and their data types are listed as follows:
      • course: ValBearingType, defined as “The value of the course expressed as an angle and measured in degrees.”
      • courseType: CodeCourseType, defined as “A code indicating the type of course to be observed.”
      • courseDirection: CodeDirectionReferenceType, defined as “Indicates the flight direction to/from the navaid providing the course guidance”
    • CourseGroup hasAnnotations Note with
      • Note role “annotation” (definition = “A free text remark concerning the CourseGroup or one of its properties.”), multiplicity 0…*
  • The data type CodeCourseBaseType is modified as follows:
    • The value HDG is deleted.
    • The following values are added:
      • TRUE_COURSE: True course. The intended direction of travel of an aircraft, expressed in degrees from true North. (Source: ICAO Doc 8168, Vol. II, Definitions)
      • MAG_COURSE: Magnetic course. The intended direction of travel of an aircraft, expressed in degrees from magnetic North.(Source: ICAO Doc 8168, Vol. II, Definitions)
      • TRUE_HDG: True heading. The direction in which the longitudinal axis of an aircraft is pointed, expressed in degrees from true North. (Source: ICAO Doc 8168, Vol. II, Definitions)
      • MAG_HDG: Magnetic heading. The direction in which the longitudinal axis of the aircraft is pointed, expressed in degrees from magnetic North. (Source: ICAO Doc 8168, Vol. II, Definitions)
    • The following definitions are modified for the existing values:
      • TRUE_TRACK: True track. The projection on the earth’s surface of the path of an aircraft, the direction of which path at any point is expressed in degrees from true North. (Source: ICAO Doc 8168, Vol. II, Definitions)
      • MAG_TRACK: Magnetic Track. The projection on the earth’s surface of the path of an aircraft, the direction of which path at any point is expressed in degrees from magnetic North.(Source: ICAO Doc 8168, Vol. II, Definitions)
      • TRUE_BRG: True bearing. The direction of the aircraft position to / from a reference position (e.g. a NAVAID, a SignificantPoint, etc.), expressed in degrees from true North.
      • MAG_BRG: Magnetic bearing. The direction of the aircraft position to / from a reference position (e.g. a NAVAID, a SignificantPoint, etc.), expressed in degrees from magnetic North.
      • RDL: Radial. The direction (bearing) indicated by the VOR signal at a given point, expressed in degrees, from the position of the VOR. (Source: adaptation of ICAO Annex 10, Vol. I, App. C, 3.7.2 a)
  • In the SegmentLeg class:
    • the attributes course, courseDirection and courseType are deleted.
    • a new associated hasCourse CourseGroup is added with 0…* on the CourseGroup side and role name segmentCourse (definition = “Information about the SegmentLeg track)”.
  • In the HoldingPattern class:
    • the attributes inboundCourse, outboundCourse and outboundCourseType are deleted
    • a new association hasInboundCourse to CourseGroup is added with 0…* on the CourseGroup side and role name inboundCourse (definition = “Information about the HoldingPattern inbound course)”
    • a new association hasOutboundCourse to CourseGroup is added with 0…* on the CourseGroup side and role name outboundCourse (definition = “Information about the HoldingPattern outbound course)”
  • In the AerialRefuellingAnchor class:
    • the attributes inboundCourse, outboundCourse and outboundCourseType are deleted
    • a new association hasInboundCourse to CourseGroup is added with 0…* on the CourseGroup side and role name inboundCourse (definition = “Information about the AerialRefuellingAnchor inbound course)”
    • a new association hasOutboundCourse to CourseGroup is added with 0…* on the CourseGroup side and role name outboundCourse (definition = “Information about the AerialRefuellingAnchor outbound course)”

The changes are highlighted in red on the following UML class diagram.

Mapping AIXM 5.1.1 to AIXM 5.2 (forward)

The following algorithm may be applied:

  • [MAPC-00] For each ArrivalLeg / DepartureLeg / ArrivalFeederLeg / InitialLeg / IntermediateLeg / FinalLeg / MissedApproachLeg that has child course, courseType and/or courseDirection elements:
    • Add a single segmentCourse.CourseGroup child element with the following values
      • if applicable, copy element course into segmentCourse.course, then remove the course element
      • if applicable, copy element courseDirection into segmentCourse.courseDirection, then remove the courseDirection element
      • [MAPC-01] if applicable, map the element courseType into segmentCourse.courseType as indicated below, then remove the courseType element
        • “HDG” into “OTHER:HDG”, unless more information is available for a particular system or data source, in which case it can be mapped into TRUE_HDG or MAG_HDG, as appropriate.
        • “OTHER:TRUE_HDG” into “TRUE_HDG”
        • “OTHER:MAG_HDG” into “MAG_HDG”
        • “OTHER:TRUE_COURSE” into “TRUE_COURSE”
        • “OTHER:MAG_COURSE” into “MAG_COURSE”
      • [MAPC-00] For each HoldingPattern or AerialRefuellingAnchor that has child inboundCourse element:
        • add a single inboundCourse.CourseGroup child element with the following values
          • copy element inboundCourse into course
        • remove the inboundCourse element
      • [MAPC-00] For each HoldingPattern or AerialRefuellingAnchor that has child outboundCourse and/or outboundCourseType elements:
        • add a single outboundCourse.CourseGroup child element with the following values
          • if applicable, copy element outboundCourse into course,
          • [MAPC-01] if applicable, copy map the element outboundCourseType into courseType as indicated below:
            • “HDG” into “OTHER:HDG”, unless more information is available for a particular system or data source, in which case it can be mapped into TRUE_HDG or MAG_HDG, as appropriate.
            • “OTHER:TRUE_HDG” into “TRUE_HDG”
            • “OTHER:MAG_HDG” into “MAG_HDG”
            • “OTHER:TRUE_COURSE” into “TRUE_COURSE”
            • “OTHER:MAG_COURSE” into “MAG_COURSE”
          • remove the outboundCourse and outboundCourseType elements

Mapping AIXM 5.2 to AIXM 5.1.1 (backward)

The following algorithm shall be applied:

A. [MAPC-00] For each ArrivalLeg / DepartureLeg / ArrivalFeederLeg / InitialLeg / IntermediateLeg / FinalLeg / MissedApproachLeg that has only one instance of the segmentCurse:

  • if applicable, copy the CourseGroup.course into course;
  • if applicable, copy the CourseGroup.courseDirection into courseDirection;
  • [MAPC-01] if applicable, copy the CourseGroup.courseType into courseType applying the following mapping:
    • TRUE_HDG into OTHER:TRUE_HDG;
    • MAG_HDG into OTHER:MAG_HDG
    • TRUE_COURSE into OTHER:TRUE_COURSE;
    • MAG_COURSE into OTHER:MAG_COURSE
  • remove the segmentCourse element

B. [MAPC-00] For each HoldingPattern or AerialRefuelingAnchor that has only one instance of the outboundCourse:

  • if applicable, copy the CourseGroup.course into course;
  • [MAPC-01] if applicable, copy the CourseGroup.courseType into courseType applying the following mapping:
    • TRUE_HDG into OTHER:TRUE_HDG;
    • MAG_HDG into OTHER:MAG_HDG
    • TRUE_COURSE into OTHER:TRUE_COURSE;
    • MAG_COURSE into OTHER:MAG_COURSE
  • [MAPC-02] if CourseGroup.courseDirection is also present, from the three backward mapping options applicable in this case, the first two (discard the value or use an extension) are straightforward and do not need any further details. The 3rd option (backward mapping into a Note) is detailed in order to provide a complete description of this case and its conversion option. The following mapping into Note algorithm is proposed:
  • Add an annotation.Note associated with the owner class having
    • purpose=“OTHER:BACKWARD_MAPPING”;
    • LinguisticNote.note=”courseDirection: <outboundCourse.CourseGroup.courseDirection>
    • propertyName = “outboundCourse”.
  • remove the outboundCourse element

C. [MAPC-00] For each HoldingPattern or AerialRefuelingAnchor that has only one instance of the inboundCourse:

  • if applicable, copy the CourseGroup.course into course;
  • [MAPC-02] if CourseGroup.courseDirection and/or inboundCourse.CourseGroup.courseType are also present, from the three backward mapping options applicable in this case, the first two (discard the value or use an extension) are straightforward and do not need any further details. The 3rd option (backward mapping into a Note) is detailed in order to provide a complete description of this case and its conversion option. The following mapping into Note algorithm is proposed:
  • Add an annotation.Note associated with the owner class having
    • purpose=“OTHER:BACKWARD_MAPPING”;
    • LinguisticNote.note=”courseDirection: <inboundCourse.CourseGroup.courseDirection>; courseType: <inboundCourse.CourseGroup.courseType>
    • propertyName = “intboundCourse”.
  • remove the inboundCourse element

D. [MAPC-04] For each ArrivalLeg / DepartureLeg / ArrivalFeederLeg / InitialLeg / IntermediateLeg / FinalLeg / MissedApproachLeg that has multiple segmentCourse.CourseGroup instances, from the three backward mapping options discussed for this case, the first two (discard the value or use an extension) are straightforward and do not need any further details. The 3rd option (backward mapping into the old property, complemented with a Note) is detailed in order to provide a complete description of this case and its conversion option as follows

  • Select the CourseGroup that is preserved and converted as detailed at point A above, applying the following order of priorities:
    1. CourseGroup object with CourseGroup.courseType = RDL
    2. if not, CourseGroup object with CourseGroup.courseType = MAG_BRG
    3. if not, CourseGroup object with CourseGroup.courseType = MAG_HDG
    4. if not, CourseGroup object with CourseGroup.courseType = MAG_COURSE
    5. if not, CourseGroup object with CourseGroup.courseType = MAG_TRACK
    6. if not, CourseGroup object with CourseGroup.courseType = TRUE_BRG
    7. if not, CourseGroup object with CourseGroup.courseType = TRUE_HDG
    8. if not, CourseGroup object with CourseGroup.courseType = TRUE_COURSE
    9. if not, CourseGroup object with CourseGroup.courseType = TRUE_TRACK
    10. if not, CourseGroup object with CourseGroup.courseType = OTHER or extended from OTHER(e.g. OTHER:XYZ)
  • For all the remaining occurrences of the segmentCourse.CourseGroup associated with ArrivalLeg / DepartureLeg / ArrivalFeederLeg / InitialLeg / IntermediateLeg / FinalLeg / MissedApproachLeg:
    • Add an annotation.Note associated with the owner class (ArrivalLeg / DepartureLeg / ArrivalFeederLeg / InitialLeg / IntermediateLeg / FinalLeg / MissedApproachLeg respectively)
      • purpose=“OTHER:BACKWARD_MAPPING”;
      • LinguisticNote.note=”courseType: <<segmentCourse.CourseGroup.courseType>>; course: <<segmentCourse.CourseGroup.course>>; courseDirection: <<segmentCourse.CourseGroup.courseDirection>>”,
      • propertyName=’course’.
  • Remove the segmentCourse.CourseGroup instances.

E. [MAPC-04] For each HoldingPattern or AerialRefuellingAnchor that has multiple outboundCourse.CourseGroup instances, from the three backward mapping options discussed for this case, the first two (discard the value or use an extension) are straightforward and do not need any further details. The 3rd option (backward mapping into the old property, complemented with a Note) is detailed in order to provide a complete description of this case and its conversion option as follows:

  • Select the CourseGroup that is preserved and converted as detailed at point B above, applying the following order of priorities:
    1. CourseGroup object with CourseGroup.courseType = RDL,
    2. if not, CourseGroup object with CourseGroup.courseType = MAG_BRG
    3. if not, CourseGroup object with CourseGroup.courseType = MAG_HDG
    4. if not, CourseGroup object with CourseGroup.courseType = MAG_COURSE
    5. if not, CourseGroup object with CourseGroup.courseType = MAG_TRACK
    6. if not, CourseGroup object with CourseGroup.courseType = TRUE_BRG
    7. if not, CourseGroup object with CourseGroup.courseType = TRUE_HDG
    8. if not, CourseGroup object with CourseGroup.courseType = TRUE_COURSE
    9. if not, CourseGroup object with CourseGroup.courseType = TRUE_TRACK
    10. if not, CourseGroup object with CourseGroup.courseType = OTHER or extended from OTHER(e.g. OTHER:XYZ)
  • For all the remaining occurrences of the outboundCourse.CourseGroup:
    • Add an annotation.Note with:
      • purpose=“OTHER:BACKWARD_MAPPING”;
      • LinguisticNote.note=”outboundCourseType: <<outboundCourse.CourseGroup.courseType>>; coutboundCourse: <<outboundCourse.CourseGroup.course>>; outboundCourseDirection: <<outboundCourse.CourseGroup.courseDirection>>”,
      • propertyName=’outboundCourse’.
  • Remove the outboundCourse.CourseGroup instances.

F. [MAPC-04] For each HoldingPattern or AerialRefuellingAnchor that has multiple inboundCourse.CourseGroup instances, from the three backward mapping options discussed for this case, the first two (discard the value or use an extension) are straightforward and do not need any further details. The 3rd option (backward mapping into the old property, complemented with a Note) is detailed in order to provide a complete description of this case and its conversion option as follows.

  • Select the CourseGroup that is preserved and converted as detailed at point C above, applying the following order of priorities:
    1. CourseGroup object with CourseGroup.courseType = RDL,
    2. if not, CourseGroup object with CourseGroup.courseType = MAG_BRG
    3. if not, CourseGroup object with CourseGroup.courseType = MAG_HDG
    4. if not, CourseGroup object with CourseGroup.courseType = MAG_COURSE
    5. if not, CourseGroup object with CourseGroup.courseType = MAG_TRACK
    6. if not, CourseGroup object with CourseGroup.courseType = TRUE_BRG
    7. if not, CourseGroup object with CourseGroup.courseType = TRUE_HDG
    8. if not, CourseGroup object with CourseGroup.courseType = TRUE_COURSE
    9. if not, CourseGroup object with CourseGroup.courseType = TRUE_TRACK
    10. if not, CourseGroup object with CourseGroup.courseType = OTHER or extended from OTHER(e.g. OTHER:XYZ)
  • For all the remaining occurrences of the inboundCourse.CourseGroup:
    • Add an annotation.Note with:
      • purpose=“OTHER:BACKWARD_MAPPING”;
      • LinguisticNote.note=”inboundCourseType: <<inboundCourse.CourseGroup.courseType>>; inboundCourse: <<inboundCourse.CourseGroup.course>>; inboundCourseDirection: <<inboundCourse.CourseGroup.courseDirection>>”,
      • propertyName=’inboundCourse’.
  • Remove the inboundCourse.CourseGroup instances.

Mapping example

(Note: for mapping test data see: https://github.com/aixm/mapping_52_511/tree/master/AIXM-xxx

AIXM 5.2AIXM 5.1(.1)
  ...





...



  • No labels