Challenge Overview
Project Background
The Federal Aviation Administration (FAA) in collaboration with Topcoder is working to further improve timely access to Notice to Airmen (NOTAM) data by developing required Application Programming Interfaces (APIs) to meet the diverse needs of the aviation industry.
A Notice to Airmen (NOTAM) is the real-time notification component of the FAA's Aeronautical Information System and contains up-to-date information related to any change in the National Airspace System (NAS).
Who uses NOTAMs?
-
Commercial, General Aviation, and Drone pilots need access to NOTAM data before and during flight.
-
The FAA issues NOTAMs to support multiple Federal Agencies, Airports, protect critical infrastructure, disaster relief efforts, and space operations.
Challenge Overview
Welcome to the Notice to Airmen Format Conversion - AIXM to GeoJSON Challenge! Your task in this challenge is to create a command line interface (CLI) tool that converts NOTAM data from AIXM 5.1 to GeoJSON format.
Background Information
A NOTAM is a real time, safety critical, information essential to personnel concerned with flight operations but not known far enough in advance to be publicized by other means. It states the abnormal status of a component of the NAS – not the normal status.
The system that we’re building will need to ingest all the data sources and provide an API to query all the data based on various properties, such as location, notam type, location and notam number, effective start and end dates, affected feature types and last updated date.
API will also have the options to return the data in 3 different formats: AIXM, AIDAP or GeoJSON. (This challenge is focused on the conversion to the GeoJSON format.)
To access the API, users will first need to be registered on a developer portal where they would get an access key for the API.
All the application components will be hosted on Kubernetes and will need to be dockerized.
NOTE: For more details on project background and NOTAM data sources, see the architecture challenge
Technology Stack
-
Java/NodeJS
-
XML
Assets
Sample AIXM (NOTAM and SAA) and TFR (XML) records are posted in challenge forums
Task Details
Your task in this challenge is to create a CLI tool to convert the NOTAM data to GeoJSON format. Base NOTAM data is stored in an AIXM 5.1 file and specific notam types (TFR and SAA) will have additional data stored in XML (TFR) and another AIXM file (SAA definition). AIXM is XML based, and GeoJSON is a regular JSON file with two properties: features (contains the geometry information) and metadata - this field does not have a specific standardized format and for our purposes we will only store the relevant NOTAM data here, not the full AIXM data (Background: the API we’re building will let the users choose the output format - they can get the full AIXM message or the core NOTAM data with GeoJSON).
Sample files are posted in the forums.
Each digital NOTAM in AIXM format follows a standardized data schema and we need to extract the following information:
-
Event properties:
-
encoding,
-
scenario,
-
-
Notam properties:
-
id,
-
series,
-
number,
-
year,
-
type,
-
issued,
-
affectedFIR,
-
selectionCode,
-
traffic,
-
purpose,
-
scope,
-
minimumFL,
-
maximumFL,
-
location,
-
effectiveStart,
-
effectiveEnd,
-
Text,
-
Classification (FDC, DOM, INTL, MIL, LMIL)
-
cancelationDate
-
accountId
-
lastUpdated
-
icaoLocation
-
Schedule
-
Lowerlimit
-
Upperlimit
-
Coordinates
-
radius
-
-
NOTAM translation properties (there can be multiple translations for a notam): type, simpleText, formattedText
To describe the geometric features of an AIXM message we will use two different strategies:
-
If TFR input is present, geometry will be extracted from the abdMergedArea attribute. GeoJSON features will always be a geometry collection of polygons - arrays of points(coordinates). airspace levels will be added to geoJSON properties.heightInformation array with lowerLevel and upperLevel attributes
-
If SAA input is present, geometry data for geoJSON will be extracted from the AIXM record. Geometry data in AIXM is available in Airspace.AirspaceTimeSlice.geometryComponent.horizontalProjection records (there can be more than one). GeoJSON features attribute will contain a geometry collection as the top geometry attribute and a feature for each geometryComponent record. AIXM can contain various geometry definitions and they will be mapped to geoJSON features:
-
ElevatedPoint -> Point (only store circle center here)
-
CircleByCenterPoint -> Point (only store circle center here)
-
LineStringSegment -> Polygon
-
ElevatedSurface (PolygonPatch, LinearRing) -> Polygon
-
Additionally, the “properties.subTypes” attribute of geoJSON will contain types for geometries used in the features list: Circle or Polygon. Attribute “properties.additionalGeometryData” will contain “radius” property for circle geometries and will be empty for polygons. Similar to tfr conversion, properties.heightInformation array with lowerLevel and upperLevel attributes will contain the geometry height details (elevated point and elevated surface only)
-
If neither tfr nor saa input is present, use the NOTAM AIXM file to extract the geometry (use the same rules as #2)
NOTE: Reason for using the “subType” attribute is that GeoJSON doesn’t support the ‘circle’ data type, so we will just define a ‘point’ feature and add the radius attribute in the properties object, along with event details. Similar approach is used by Azure maps.
CLI tool can be developed using Java or NodeJS and should accept the following parameters:
-
AIXM input file path
-
Output geoJSON file path
In case of IO or data format errors, log the errors to stderr and return non zero status code. Implement all the conversion logic as a standalone module, i.e. independent of the I/O logic and error handling (we might use the conversion module directly in the future instead of calling it via CLI).
What To Submit
Submit the full source code for the CLI tool and a README file with build and verification instructions.