/
[AIXM-589] Elevated geometry objects modified derivation chain

[AIXM-589] Elevated geometry objects modified derivation chain

ID:

AIXM-589

target version:

AIXM 5.2

version:

1.0

last updated:

10 JAN 2023

status:

APPROVED


Description

ElevatedSurface, ElevatedCurve and ElevatedPoint become direct specialisations of the GM_Surface, GM_Curve and GM_Point respectively. The horizontalAccuracy attribute is added directly in these classes.

Rationale for change

See https://aixmccb.atlassian.net/browse/AIXM-301

In AIXM 5.1 and 5.1.1 XML schema, the ElevatedSurface, ElevatedCurve and ElevatedPoint are defined by specialisation of Surface, Curve and Point respectively, as indicated in the following UML class diagram.

As a consequence, in the AIXM XML Schema the ElevatedSurface is in the substitution group for Surface. This substitution possibility is not visible in the AIXM UML model, it is added directly in the XSD following the GML Application Schema definition rules. Therefore, the Surface property can be substituted with ElevatedSurface on all features and objects that use a Surface.

For example, it is "valid" according to the AIXM XSD to define an AirspaceVolume's horizontalProjection using an ElevatedSurface. However, this does not make sense from an operational point of view. The “elevation” property value is of no use and most systems will ignore it or might raise an error. There are also business rules that try to prevent such misuse. A similar situation occurs for ElevatedCurve when used where Curve is expected and ElevatedPoint used when Point is expected (according to the AIXM UML model).

The root cause of this issue is the fact that the ‘Elevated’ geometries are derived from the non-abstract classes Surface, Curve and Point. It is the only situation in AIXM when a non-abstract class is used for derivation. In all other places, such as NavaidEquipment, Service, etc. a class used for deriving other classes is always declared <<abstract>>.

In order to correct this issue, it is proposed to derive both Surface and ElevatedSurface from the GM_Surface (and similarly for Curve/ElevatedCurve, Point/ElevatedPoint).

Important note: This change will not prevent the use of ElevatedCurve as descendant of a Surface or ElevatedSurface element in the GML encoding, as both (aixm:)Curve and (aixm:)ElevatedCurve are in the substitution group of the (gml:)Curve. There is no possibility to block this substitution without modifying the standard GML Schema. This situation will continue to be controlled with business rules.

Impact assessment

[FWD_MAP_LOSS] Data mapping is possible, but some data would be lost (or converted into Notes) 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.

  • Note: the data that could be lost concerns the “elevated” properties, which anyhow do not have any operational meaning when an ElevatedSurface/Curve/Point is used instead of Surface/Curve/Point.

[BWD_1:1] No data mapping is necessary and no data loss occurs 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:

  • Deleted the specialisation relationship from Surface to ElevatedSurface
  • Add a specialisation relationship from GM_Surface to ElevatedSurface
  • In the ElevatedSurface class add the following attribute:
    • horizontalAccuracy, data type ValDistanceType, definition “The difference between the recorded horizontal coordinates of a surface and its true position referenced to the same geodetic datum expressed as a circular error corresponding to the confidence level specified in the ICAO PANS-AIM (DOC 10066) for the specific subject/property”.
  • Deleted the specialisation relationship from Curve to ElevatedCurve
  • Add a specialisation relationship from GM_Curve to ElevatedCurve
  • In the ElevatedCurve class add the following attribute:
    • horizontalAccuracy, data type ValDistanceType, definition “The difference between the recorded horizontal coordinates of a curve and its true position referenced to the same geodetic datum expressed as a circular error corresponding to the confidence level specified in the ICAO PANS-AIM (DOC 10066) for the specific subject/property”.
  • Deleted the specialisation relationship from Point to ElevatedPoint
  • Add a specialisation relationship from GM_Point to ElevatedPoint
  • In the ElevatedPoint class add the following attribute:
    • horizontalAccuracy, data type ValDistanceType, definition “The difference between the recorded horizontal coordinates of a point and its true position referenced to the same geodetic datum expressed as a circular error corresponding to the confidence level specified in the ICAO PANS-AIM (DOC 10066) for the specific subject/property ”.


The following UML class diagram shows the modified specialisation relationships:

Mapping AIXM 5.1.1 to AIXM 5.2 (forward)

[MAPC-02] The following algorithm shall be applied:

  • For each ElevatedSurface that is the child element of AerialRefuellingAnchor.extent, AirspaceVolume.horizontalProjection, RadioFrequencyArea.extent, SafeAltitudeAreaSector.extent, ObstacleArea.surfaceExtent, CirclingRestriction.restrictionArea, PointReference.fixToleranceArea, ObstacleAssessmentArea.surface, CirclingArea.extent, TerminalArrivalAreaSector.extent, TerminalArrivalArea.buffer or NavigationAreaSector.extent and that has elevation, geoidUndulation, verticalDatum and/or verticalAccuracy child elements:
    • Change the element name into Surface and remove the elevation, geoidUndulation, verticalDatum and/or verticalAccuracy child elements, as applicable;
    • add an annotation.Note with:
      • purpose=“OTHER:FORWARD_MAPPING”;
      • LinguisticNote.note=”elevation: <value of elevation> <uom>, geoidUndulation: <value of geoidUndulation> <uom>, verticalDatum: <value of verticalDatum>, verticalAccuracy: <value of verticalAccuracy>”;
    • For each ElevatedCurve that is the child element of AerialRefuellingTrack.extent, AirspaceVolume.centreline, GeoBorder.border, SegmentLeg.trajectory, ObstacleAssessmentArea.startingCurve, HoldingPattern.extent, RouteSegment.curveExtent, ProcedureTransition.trajectory and that has elevation, geoidUndulation, verticalDatum and/or verticalAccuracy child elements:
      • Change the element name into Curve and remove the elevation, geoidUndulation, verticalDatum and/or verticalAccuracy child elements, as applicable;
      • add an annotation.Note with:
        • purpose=“OTHER:FORWARD_MAPPING”;
        • LinguisticNote.note=”elevation: <value of elevation> <uom>, geoidUndulation: <value of geoidUndulation> <uom>, verticalDatum: <value of verticalDatum>, verticalAccuracy: <value of verticalAccuracy>”;
      • For each ElevatedPoint that is the child element of position or DesignatedPoint.location and that has elevation, geoidUndulation, verticalDatum and/or verticalAccuracy child elements:
        • Change the element name into Point and remove the elevation, geoidUndulation, verticalDatum and/or verticalAccuracy child elements, as applicable;
        • add an annotation.Note with:
          • purpose=“OTHER:FORWARD_MAPPING”;
          • LinguisticNote.note=”elevation: <value of elevation> <uom>, geoidUndulation: <value of geoidUndulation> <uom>, verticalDatum: <value of verticalDatum>, verticalAccuracy: <value of verticalAccuracy>”;

Mapping AIXM 5.2 to AIXM 5.1.1 (backward)

  • Not applicable.

Mapping example

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

InputOutput