I. Abstract
This Testbed-17 (TB-17) Aviation API Engineering Report (ER) summarizes the implementations, findings and recommendations that emerged from the efforts of building a definition for an Aviation API compliant with the requirements of the OGC Standards Program, and the exploration of the potential of aviation data fusion.
This ER describes the nine façades built to interface SWIM services and serve aviation data through OGC APIs, the two services built to consume SWIM data and fuse it to generate richer datasets while serving the fused data through OGC APIs, the client application built to display data retrieved from the façades and fusion services, and the development client built to focus on functionality and experimentation.
Finally, this ER discusses the potential of OGC APIs to help standardize the access to aviation data within the context of the System Wide Information Management (SWIM) program.
II. Executive Summary
The System Wide Information Management (SWIM) Data Services of the Federal Aviation Administration (FAA) currently produce data from the National Airspace System (NAS) to consumers using various protocols and service offerings in both synchronous and asynchronous messaging formats. These services are documented and described in the FAA’s NAS Service Registry/Repository (NSRR). Consumers can access the NSRR to obtain this information for each SWIM service offering in order to develop their business applications. Often, business applications require multiple SWIM data; therefore, efforts have been made to standardize the SWIM data models for their domains (i.e. weather, aeronautical, and flight) based on XML standards such as Weather Information Exchange Model (WXXM), Flight Information Exchange Model (FIXM), and Aeronautical Information Exchange Model (AIXM).
Previous OGC work has addressed the challenges of increasing interoperability between aviation data services. Recently, the OGC community has developed a new family of standardized OpenAPI-based Web APIs for the various geospatial resource types with the potential to enhance the way in which consumers can access geospatial data from various sources. Testbed-16 brought together previous work on the development of OGC APIs, the use of semantics to enrich data, and SWIM data processing, and demonstrated an OpenAPI-based API serving SWIM data. Testbed-17 took many lessons learned and recommendations from Testbed-16 and focused on further testing the value of standards-based APIs within the SWIM program.
The research questions for the Aviation API Task were:
-
What are the benefits and downsides of:
-
Transitioning current APIs of SWIM services into APIs compliant with current and emerging OGC API Standards?
-
Creating a new OGC API standard for aviation data?
-
Implementing existing OGC API standards to create APIs serving aviation data?
-
-
Do these benefits and downsides change between:
-
Serving raw aviation data and serving fused aviation data?
-
Working with a client from a domain expert perspective and working with a client from a developer perspective?
-
Working with aeronautical data and working with flight data?
-
-
What lessons can be learned from the usage of Linked Data or different encodings?
To answer these questions, the Aviation API Task was organized into the development and testing of a system of seven interconnected components, as seen on Figure 1:
-
Façades for SWIM services, retrieving aviation data from multiple SWIM services (or static sources) and serving these data through OGC APIs. Three Façades comprising nine API components were built.
-
The Aeronautical Data APIs (identified collectively as D104): Four APIs built to serve NOTAMs, Airport Layouts and Airspaces
-
The Flight Positions Data APIs (identified collectively as D105): Three APIs built to serve flight positions from the STDDS, SFDPS, and TFMS Services
-
The International Flight Data APIs (identified collectively as D107a and D107b): Two APIs built to serve flight plans from the SFDPS (FAA) and NMB2B (EUROCONTROL) Services
-
-
Components that fuse raw aviation data, and serve the fused data through OGC APIs. Two fusion components were built, each one featuring an API.
-
The Flight Restrictions Data Fusion Service (identified as D106): Built to identify flight restrictions from past or future flights.
-
The International Flight Data Fusion Service (identified as D107): Built to fuse flight plans from a same flight spanning across the US and European airspaces which are commonly served separately.
-
-
Client components which present aviation data to end users. Two clients were built: One meant to serve an aviation domain expert, and the other to serve a developer of aviation software applications.
-
The Aviation Domain Expert Client (identified as D108): A client built to display aviation data to domain experts in a 3D map environment.
-
The Aviation Developer Client (identified as D109): A client built to explore the provision of data for the sake of helping developers access API information.
-
Figure 1 — Component Diagram for the Aviation API Task
All components were successfully developed and tested. Eleven APIs were built implementing several OGC API Standards. The lessons learned throughout the Testbed are captured in this ER and help respond the research questions. The following is a set of recommendations for future work:
-
Continue Evaluating the Potential of OGC API Standards in the Exchange of SWIM Data: Future work should be coordinated with the Aviation API SWG to continue evaluating OGC API Standards in the exchange of aviation SWIM data. APIs could also be explored for more aviation data types (such as weather), or data with diverse levels of volume or update frequency.
-
Explore Additional Aviation Data Fusion Scenarios: Future work should explore additional data fusion scenarios within the aviation domain to continue gathering lessons learned for further development of API standards, for proposing new aviation fusion services, and for defining decision-making rules for the construction of fusion services.
-
Continue Exploring JSON-FG Within the Aviation Domain: Future work should be coordinated with the Features and Geometries JSON SWG to continue exploring the uses of JSON-FG with aviation data to ensure the emerging standard is able to support the entire scope of aviation use cases, as well as more advanced geometries.
-
Develop Aviation Vocabularies, Schemas and Ontologies: Future work should expand current aviation vocabularies, schemas and ontologies through the exploration of use cases and scenarios that require them.
-
Demonstrating the Value of Linked Data in the Aviation Domain: Future work should demonstrate the value of linked data through the development of aviation clients and fusion scenarios that make use of linked data.
III. Keywords
The following are keywords to be used by search engines and document catalogues.
ogcdoc, OGC document, Aviation, API, SWIM
IV. Preface
Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights.
Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation.
V. Security considerations
No security considerations have been made for this document.
VI. Submitting Organizations
The following organizations submitted this Document to the Open Geospatial Consortium (OGC):
- Skymantics, LLC
VII. Submitters
All questions regarding this document should be directed to the editor or the contributors:
Name | Organization | Role |
---|---|---|
Sergio Taleisnik | Skymantics, LLC | Editor |
Clemens Portele | interactive instruments GmbH | Contributor |
Johannes Echterhoff | interactive instruments GmbH | Contributor |
Jarrod Lichty | Mosaic ATM | Contributor |
Frantisek Albert | NG Aviation SE | Contributor |
Ignacio “Nacho” Correas | Skymantics, LLC | Contributor |
Felipe Carrillo Romero | Hexagon | Contributor |
Testbed-17: Aviation API ER
1. Scope
This OGC Engineering Report (ER) presents deliverable D002 of the OGC Testbed-17 (TB-17) initiative performed under the OGC Innovation Program.
The ER reports on the activities performed throughout the testbed and provides discussions on the lessons learned. The ER discusses the business value of APIs based on OGC API standards in the purpose of serving aviation data through the SWIM system. This ER also explores the value of fusing raw aviation data into richer aviation datasets, and the consumption of raw and fused aviation data from the perspectives of both an aviation domain expert and a developer of aviation applications.
1.1. What Does This ER Mean for the Working Group and the OGC
The Aviation Domain Working Group (DWG) was tasked with reviewing this ER. The Aviation DWG works on the subjects of aviation-related data interoperability and access.
The Aviation API Standard Working Group (SWG), proposed by the Aviation DWG, was constituted concurrently with TB-17. This approach provided a framework for leveraging the lessons learned and recommendations presented by this Testbed’s Aviation participants in order to work on the development and maintenance of an OGC Aviation API Standard.
Despite not being the focus for TB-17, the work on Aviation Linked Data could also be of interest to the Geosemantics DWG, which has been actively working on this subject for several years. This Geosemantics DWG reviewed the Testbed-16 (TB-16) Aviation Task ER due to the strong focus of TB-16 on semantics.
2. Terms, definitions and abbreviated terms
This document uses the terms defined in OGC Policy Directive 49, which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this document and OGC documents do not use the equivalent phrases in the ISO/IEC Directives, Part 2.
This document also uses terms defined in the OGC Standard for Modular specifications (OGC 08-131r3), also known as the ‘ModSpec’. The definitions of terms such as standard, specification, requirement, and conformance test are provided in the ModSpec.
For the purposes of this document, the following additional terms and definitions apply.
2.1. Terms and definitions
2.1.1. Application Programming Interface (API)
an interface that is defined in terms of a set of functions and procedures, and enables a program to gain access to facilities within an application [1]
2.1.2. Web API
an API using an architectural style that is founded on the technologies of the Web [2]
Note 1 to entry: Best Practice 24: Use Web Standards as the foundation of APIs in the W3C Data on the Web Best Practices [2] provides more detail.
Note 2 to entry: A Web API is basically an API based on the HTTP standard(s).
2.1.3. Standards-based API
an API that conforms to one or more conformance classes specified in one or more standards
Note 1 to entry: Since almost all APIs will conform to some standard, the term is usually used in the context of a specific standard or a specific family of standards. This ER considers Web APIs with a specific focus on the OGC API standards. Therefore, whenever the term is used in this ER, it is meant as an alias for an API that conforms to one or more conformance classes as defined in the OGC API standards.
2.1.4. Standardized API
an API that is intended to be deployed by multiple API providers with the same API definition
Note 1 to entry: The only difference between the API definitions will be the URL(s) of the API deployment. All other aspects are identical (resources, content schemas, content constraints and business rules, content representations, parameters, etc.) so that any client that can use one deployment of the standardized API definition can also use all other deployments, too.
Note 2 to entry: If the API provides access to data, different deployments of the API will typically share different content.
2.1.5. Façade Service
A Façade Service is a component that fetches data from a specific data source and makes it available through its own interface [3]. The main reason for building this type of service is the difficulty or inability to modify the original data source with the intent of modifying:
-
The underlying API structure
-
The format in which the data is made available.
2.1.6. SWIM Data
Any data provided through the SWIM System.
2.1.7. SWIM Data Service
A service within the SWIM System that provides data. [4]
2.2. Abbreviated terms
AIXM
-
Aeronautical Information Exchange Model
API
-
Application Programming Interface
ARTCC
-
Air Route Traffic Control Center
CRS
-
Coordinate Reference System
ER
-
Engineering Report
EUROCONTROL
-
European Organisation for the Safety of Air Navigation
FAA
-
Federal Aviation Administration
FIXM
-
Flight Information Exchange Model
FNS
-
Federal NOTAM System
GUFI
-
Globally Unique Flight Identifier
JMS
-
Java Messaging Service
NAS
-
National Airspace System
NOTAM
-
Notice to Airmen
OGC
-
Open Geospatial Consortium
SCDS
-
SWIM Cloud Distribution Service
SFDPS
-
SWIM Flight Data Publication Service
STDDS
-
SWIM Terminal Data Distribution System
SWIM
-
System Wide Information Management
TB
-
Testbed
TFMS
-
Traffic Flow Management System
TFR
-
Temporary Flight Restriction
TIE
-
Technology Integration Experiment
WFS
-
Web Feature Service
WMS
-
Web Map Service
WMTS
-
Web Map Tile Service
WXXM
-
Weather Information Exchange Model
3. Introduction
3.1. Background
3.1.1. SWIM
The System-Wide Information Management (SWIM) initiative supports the sharing of aeronautical, air traffic and weather information by providing communications infrastructure and architectural solutions for identifying, developing, provisioning, and operating a network of highly-distributed, interoperable, and reusable services.
As part of the SWIM architecture, data providers create services for consumers to access their data. Each service is designed to be stand-alone. However, the value of data increases when it is combined with other data. Real-world situations are often not related to data from one but from several SWIM feeds. Having consumers retrieving data from several SWIM services raises the need of interoperability between those services.
3.1.2. OGC API Standards
For several years, the OGC members have worked on developing a family of Web API standards for the various geospatial resource types. These APIs are defined using OpenAPI. As the OGC API standards keep evolving, are approved by the OGC and are implemented by the community, the aviation industry can subsequently experiment and implement them.
The following OGC API Standards and Draft Specifications were used for the development of APIs during this Testbed:
OGC API – Features: a multi-part standard that defines the capability to create, modify, and query vector feature data on the Web and specifies requirements and recommendations for APIs that want to follow a standard way of accessing and sharing feature data. It currently consists of four parts:
-
OGC API — Features — Part 1: Core. Approved September 2019, this standard defines discovery and query operations. [5]
-
OGC API — Features — Part 2: Coordinate Reference Systems by Reference. Approved October 2020, extends the core capabilities specified in Part 1: Core with the ability to use coordinate reference system identifiers other than the defaults defined in the core. [6]
-
Draft OGC API — Features — Part 3: Filtering. Part 3 specifies an extension to the OGC API — Features — Part 1: Core standard that defines the behavior of a server that supports enhanced filtering capabilities. [7]
-
Draft OGC API — Features — Part 4: Create, Replace, Update and Delete. Part 4 specifies an extension that defines the behavior of a server that supports operations to add, replace, modify or delete individual resources from a collection. [8]
A specification for version 2 of the Common Query Language (CQL2) is being developed together with Part 3 to standardize a language that is recommended for filter expressions. [9]
OGC API – Processes: An approved OGC API standard, published December 2021, that specifies a Web API that enables the execution of computing processes and the retrieval of metadata describing their purpose and functionality. Typically, these processes combine raster, vector, coverage and/or point cloud data with well-defined algorithms to produce new information. [10]
Draft OGC API – Tiles: This draft API defines how to discover which resources offered by the Web API can be retrieved as tiles, retrieve metadata about the tile set (including the supported tile matrix sets, the limits of the tiled set inside the tile matrix set) and how to request a tile. [11]
Draft OGC API – Styles: This draft API specifies building blocks for OGC Web APIs that enables map servers and clients as well as visual style editors to manage and fetch styles. [12]
3.1.3. Exploration of OGC API Standards by SWIM
For several years, the FAA and the OGC have jointly explored making SWIM data more easily accessible and more valuable. As part of these past efforts, Testbed-16 brought together previous work on the development of OGC APIs, the use of semantics to enrich data, and SWIM data processing. The objectives were to deliver the first demonstration of an OpenAPI-based API serving SWIM data, a component generating aviation Linked Data, and two client applications querying and displaying that data [8].
Two of the TB-16 recommendations were to integrate OGC APIs within SWIM Data Services and to demonstrate interoperability between diverse Aviation APIs [8]. In order to advance these recommendations, TB-17 focused on the development of eleven APIs based on OGC API standards, and the completion of Technology Integration Experiments (TIEs) between these APIs.
During TB-16, the development of the API serving aviation data resulted in numerous lessons learned and recommendations [8]. TB-16 saw the development of one aviation-related API based on an OGC API Standard (OGC API — Features). The APIs developed during TB-17 addressed many of those lessons learned and implemented additional OGC API standards which have been maturing since; this process is reflected in Figure 2.
Figure 2 — Timeline of OGC API Standards and its Aviation Demonstrations
3.2. Requirements Statement
Testbed-17 required investigating the potential of OGC API Standards in the context of the SWIM Program.
The original goals of the TB-17 Aviation API Task were the following:
-
Explore the potential of OGC Web APIs in the context of SWIM.
-
Develop an Aviation API, based on OGC Web API building blocks, that enables convenient access to existing SWIM services.
-
Demonstrate the capabilities of the new Aviation API in a data fusion scenario, and to serve aviation raw data.
-
Develop two clients: one with a focus on ease-of-use for end-users, and the other with a focus on functionality for developers.
-
Build on and stress-test previous Testbed results for semantic interoperability.
As noted, the original requirement for the Aviation task was the development of a draft OGC API specification specific for the exchange of Aviation information. Within the first few meetings after the Testbed began, participants agreed that this might not be a feasible option and therefore engaged into the alternative of using existing approved and draft OGC API standards to create the OGC APIs for the TB-17 components.
This change in the task focus provided a whole new set of questions to be answered. The original idea of developing a specific OGC API standard for Aviation was kept throughout the Testbed in order to contrast it with the usage of existing OGC API standards in aviation. The updated research questions are summarized as follows:
-
What are the benefits and downsides of:
-
Transitioning current APIs of SWIM services into APIs compliant with current and emerging OGC API Standards?
-
Creating a new OGC API standard for aviation data?
-
Implementing existing OGC API standards to create APIs serving aviation data?
-
-
Do these benefits and downsides change between:
-
Serving aviation raw data and serving aviation fused data?
-
Working with a client from a domain expert perspective and working with a client from a developer perspective?
-
Working with aeronautical data and working with flight data?
-
-
What lessons can be learned from the usage of different encodings, CRSs, and Linked Data?
The TB-17 Features and Geometries Task worked on the development of potential solutions to problems with JSON and GeoJSON when serving specific sets of data, including aviation data. Many participants from the Aviation Task also participated in the Features and Geometries Task.
3.3. Functional Overview
As shown in Figure 3, the Aviation Task architecture was organized into a system of seven interconnected components. All seven components were developed simultaneously throughout the Testbed, with permanent communication and cooperation among participant organizations.
The components can be divided into three groups:
-
Façades for SWIM services, retrieving aviation data from multiple SWIM services (or static sources) and serving these data through OGC APIs. Three Façades comprising nine API components were built.
-
The Aeronautical Data APIs (identified collectively as D104): Four APIs built to serve NOTAMs, Airport Layouts and Airspaces
-
The Flight Positions Data APIs (identified collectively as D105): Three APIs built to serve flight positions from the STDDS, SFDPS, and TFMS Services
-
The International Flight Data APIs (identified collectively as D107a and D107b): Two APIs built to serve flight plans from the SFDPS (FAA) and NMB2B (EUROCONTROL) Services
-
-
Components that fuse raw aviation data, and serve the fused data through OGC APIs. Two fusion components were built, each one featuring an API.
-
The Flight Restrictions Data Fusion Service (identified as D106): Built to identify flight restrictions from past or future flights.
-
The International Flight Data Fusion Service (identified as D107): Built to fuse flight plans from a same flight spanning across the US and European airspaces which are commonly served separately.
-
-
Client components which present aviation data to end users. Two clients were built: One meant to serve an aviation domain expert, and the other to serve a developer of aviation software applications.
-
The Aviation Domain Expert Client (identified as D108): A client built to display aviation data to domain experts in a 3D map environment.
-
The Aviation Developer Client (identified as D109): A client built to explore the provision of data for the sake of helping developers access API information.
-
Figure 3 — Component Diagram for the Aviation API Task
The following table summarizes the SWIM data sources accessed by the façades:
Table 1 — SWIM Data Sources Accessed by TB-17 Façades
# | Data Source Name | Data Source Description | Façade Accessing the Data Source |
---|---|---|---|
1 | Federal NOTAM System (FNS) | The modernized Notice to Airmen (NOTAM) management system designed to digitize the collection, dissemination, and storage of NOTAMs. The new process moves the responsibility for originating NOTAMs to those who directly observe the hazardous condition(s) within the National Airspace System (NAS). A digital NOTAM describes the temporary status change of a static feature caused by an event within the NAS in a standardized manner enabled by the Aeronautical Information Exchange Model (AIXM). | Clause 4 |
2 | Traffic Flow Management System (TFMS) | TFMS processes all available data sources such as flight plan messages, flight plan amendment messages, and departure and arrival messages. The FAA’s NAS Data Warehouse assembles TFMS flight messages into one record per flight. TFMS is restricted to the subset of flights that fly under Instrument Flight Rules (IFR) and are captured by the FAA’s en route computers. | Clause 5 |
3 | SWIM Terminal Data Distribution System (STDDS) | Converts legacy terminal data collected from airport towers and Terminal Radar Approach Control (TRACON) facilities into easily accessible information. STDDS is installed at 38 TRACONS within the NAS, providing access to data from over 200 airports, and over 400 individual systems. | Clause 5 |
4 | SWIM Flight Data Publication Service (SFDPS) | Provides en route flight data to National Airspace System (NAS) consumers. SFDPS allows consumers to receive real-time data for analytics, business processes, research, and other activities. Data is provided by data distribution systems located at each of the 20 Air Route Traffic Control Centers (ARTCCs) in the contiguous United States. | Clause 5 and Clause 6 |
5 | Network Manager business-to-business web services (NM B2B) | An interface provided by the EUROCONTROL Network Manager (NM) for system-to-system access to its services and data. NM B2B services include Flight Plan Preparation and Management, Flight Data Retrieval, Departure (DPI) and Arrival (API) Planning Information, among others. | Clause 7 |
3.3.1. Component Interactions
Two scenarios involving end users were identified — one for each of the two clients developed in this Testbed: The Aviation Domain Expert Client (D108) and the Aviation Developer Client (D109). Both scenarios consist of the end user interfacing a client application to visualize aviation data. These scenarios are meant to satisfy the Testbed requirement of exploring both an end-user and a developer perspective:
On the backend two types of scenarios were identified. On one hand, the Aviation Domain Expert Client retrieves information from the APIs built on top of the fusion components and the APIs built as facades for SWIM services. On the other hand, the Fusion Services retrieve information by connecting to the APIs built as facades for SWIM services. All these interactions are meant to satisfy the Testbed requirement of exploring the potential of OGC APIs within the aviation domain.
4. Aeronautical Data Façade Service
The Aeronautical Façade Service provides Federal Notices to Airmen (NOTAMs) after extracting NOTAMs from the System Wide Information Management System (SWIM). Additionally, this component provides airport and airspace data extracted from various static data sources. All data is provided through APIs designed following approved or draft OGC API Standards. The Aeronautical Façade Service component was created by interactive instruments.
4.1. Internal Architecture
4.1.1. Component Overview
This Façade Service features two data retrieval subcomponents: One for the Federal Notice to Airmen System (AIM-FNS) and another one for airspace and airport static data sources, a database to store the extracted data, and an Idproxy which delivers the APIs that serve the extracted data. Figure 4 describes the Façade Service subcomponents, the data sources (note that for AIM-FNS the retriever also accesses static sources on some occasions), and the TB-17 components consuming from the Façade APIs.
Figure 4 — D104 Component Overview
4.1.2. ldproxy (API Component)
The main component that delivers the Aeronautical Data APIs is ldproxy. ldproxy is a software product, written in the Java programming language, that implements the OGC API family of standards. Idproxy enables sharing geospatial data using Web APIs based on OGC API standards. The key characteristics of ldproxy are:
-
Easy to use: The APIs support both JSON and HTML. Users of an API can use their favorite programming environment to access the data or simply use their browser.
-
Browsable: All content is linked from the landing page of each API. A user can navigate through the API in any web browser and quickly get an understanding of the available data and the API capabilities. Search engines can also index the data.
-
Linkable: Each data item in the APIs has a stable URI and can be used in external links.
-
Based on standards: ldproxy is a comprehensive implementation of the emerging OGC API Standards and an increasing number of clients or libraries can use the AAPIs directly. This also applies to the supported formats returned by the APIs, such as GeoJSON, Mapbox Vector Tiles, Mapbox Styles, or TileJSON. In addition, the APIs are documented in a developer-friendly way via OpenAPI 3.0.
-
Certified: ldproxy is certified as an OGC Reference Implementation for OGC API — Features — Part 1: Core 1.0 and OGC API — Features — Part 2: Coordinate Reference Systems by Reference.
-
Open Source: The source code is available under the Mozilla Public License 2.0 on GitHub.
-
Multiple Data Sources: Currently three types of feature data sources are supported: PostgreSQL databases with the PostGIS extension, GeoPackage and OGC Web Feature Services. In addition, map or vector tiles stored in a MBTiles container are supported as a tile source.
-
Extensible: ldproxy is modular, written in Java 11 and designed to be extended.
The landing page for all four Aeronautical Data APIs that comprise deliverable D104 is https://t17.ldproxy.net/.
All APIs provide access to data published by the US Federal Aviation Administration (FAA).
4.1.3. PostgreSQL/PostGIS (Database)
The data for all APIs is stored in a PostgreSQL/PostGIS database. The aeronautical datasets are:
-
All Controlled Airspaces of the Classes B, C, D, and E from the National Airspace System Resource (NASR) Subscription;
-
Airport data for the major airports in the United States provided by Hexagon (AIXM 5.1); and
-
Notices to Airmen (NOTAMs) received from a Federal Notice to Airmen System (AIM-FNS) subscription in FAA’s SWIM Cloud Distribution Service (SCDS), a cloud-based infrastructure dedicated to providing near real-time FAA SWIM data to the public via Solace JMS messaging.
4.1.3.1. Communication Between ldproxy and PostgreSQL
ldproxy converts API requests to SQL queries and processes the results to convert them to API responses in the GeoJSON, Features and Geometries JSON (JSON-FG), HTML or Mapbox Vector Tile (MVT) formats.
Figure 5 — Information Flow for Data Requests
While the first two datasets are static and do not change, the NOTAMs are dynamic: that is new NOTAMs are added to the database as they are received from the SCDS subscription. Since a new NOTAM may change information that is cached in ldproxy for performance reasons (in particular, the spatial and temporal extent of the NOTAM dataset, but also vector tiles) a database trigger is used to notify ldproxy about a new NOTAM. For TB-17 a new capability was implemented in ldproxy to “listen” for notifications about feature changes. For each new NOTAM, the spatial and temporal extents are evaluated and if needed the extents of the NOTAM feature collection are updated. In addition, vector tiles that include the spatial extent are invalidated in the tile cache.
Figure 6 — Communicating Data Changes to ldproxy
The communication between ldproxy and PostgreSQL uses the standard PostgreSQL protocol, which is TCP/IP-based.
4.1.4. Airport and Airspace Data Retrieval
The airport and airspace datasets have been loaded into the database using the GDAL ogr2ogr tool.
The airspace data was available as a Shapefile and the schema in the database is the same as the schema for the Shapefile.
The airport data was provided as an AIXM 5.1 XML document for each airport. The data was loaded into the database with one table per AIXM feature type. Since every feature has a single time slice, the time slices were flattened. An additional column airport was added for each table to identify the airport to which the feature belongs. For example, the table definitions for two AIXM feature types in the database:
CREATE TABLE public.airportheliport (
ogc_fid integer NOT NULL,
gml_id character varying NOT NULL,
identifier character varying(11),
validtimebegin timestamp(0) with time zone,
interpretation character varying(24),
sequencenumber integer,
correctionnumber integer,
featurelifetimebegin timestamp(0) with time zone,
designator character varying(24),
name character varying(64),
aixmtype character varying(2),
wkb_geometry public.geometry(Geometry,4326),
airport character varying(4)
);
Figure 7 — Table Definition of AirportHeliport Features
CREATE TABLE public.apron (
ogc_fid integer NOT NULL,
gml_id character varying NOT NULL,
identifier character varying(11),
validtimebegin timestamp(0) with time zone,
interpretation character varying(24),
sequencenumber integer,
correctionnumber integer,
featurelifetimebegin timestamp(0) with time zone,
name character varying(21),
composition character varying(24),
associatedairportheliport character varying(24),
airport character varying(4)
);
Figure 8 — Table Definition of Apron Features
When loading the data, the airport column was set to the filename of the AIXM file and the gml_id values were prefixed with the airport code to ensure their uniqueness. In a post-processing step some data inconsistencies in the source data were removed, in particular invalid geometries.
4.1.5. NOTAM Data Retrieval
The NOTAM API delivers a select set of the Digital NOTAM (DNOTAM) Event information, together with its geometry to indicate where the event is taking place. This section documents how the DNOTAM data is retrieved from SCDS, how it is filtered and enriched, and how a default geometry is computed for each NOTAM, before the resulting NOTAM data is finally stored in a PostgreSQL database. The [img_d104_retrieval] illustrates the NOTAM retrieval workflow.
4.1.5.1. Accessing NOTAM Data From SCDS
In order to access NOTAM data from the SWIM Cloud Distribution Service (SCDS), an SCDS account was created, followed by a subscription to the AIM FNS product. The subscription targeted all data items provided for that product; i.e. the subscription filter options for source type, NOTAM status / function / keyword, and airspace usage were not used.
SCDS delivers new data using a Java Messaging Service (JMS). JMS supports the publish-subscribe messaging pattern. The SCDS, acting as the data provider, publishes data on one or more JMS topics / message queues, to which subscribers connect in order to receive new messages.
In TB-17, interactive instruments developed a component that attaches itself to such a data feed. The component was written in Java, and leverages the SWIM feed handler project (open source, Apache License 2.0) to establish the connection and to receive NOTAM messages from SCDS.
4.1.5.2. Filtering and Enriching NOTAM Data
The interactive instruments NOTAM SWIM feed handler parses the following information from NOTAM messages received via JMS, including the JMS message headers:
-
NOTAM keyword — Keyword associated with the NOTAM
-
NOTAM function — Function of the NOTAM (New, Replacement, Cancelled)
-
Valid time (begin)
-
Valid time (end)
-
Text — NOTAM condition text
-
Q Code — Q Code value for the NOTAM.
-
Year — NOTAM year values per Annex-15 of the International Civil Aviation Organization (ICAO) Convention on International Civil Aviation.
-
Number — NOTAM number value per Annex-15 of the ICAO Convention on International Civil Aviation.
-
Scenario — Identifier of the event scenario used for digital encoding. The mapping can be found in the Event Scenario documents.
-
Flight Information Region — Flight Information Region (FIR) that is impacted by the NOTAM.
-
Location designator — NOTAM location designator of the affected airport/heliport or facility.
-
ICAO location designator — ICAO location designator, if published.
-
Series — NOTAM series value per Annex-15 of the ICAO Convention on International Civil Aviation.
-
Type — NOTAM type value per Annex-15 of the ICAO Convention on International Civil Aviation. Accepted values are: New (‘N’), Replace (‘R’), Cancel (‘C’).
-
Issued — Issue date/time of the NOTAM.
-
Traffic — NOTAM traffic value per Annex-15 of the ICAO Convention on International Civil Aviation.
-
Purpose — NOTAM purpose value per Annex-15 of the ICAO Convention on International Civil Aviation.
-
Scope — NOTAM scope value per Annex-15 of the ICAO Convention on International Civil Aviation.
-
Minimum flight level — NOTAM minimum flight level value per Annex-15 of the ICAO Convention on International Civil Aviation.
-
Maximum flight level — NOTAM maximum flight level value per Annex-15 of the ICAO Convention on International Civil Aviation.
-
Coordinates
-
Radius
-
Schedule — Contains a schedule of activity/outage if the hours of effect are less than 24 hours a day.
-
Lower limit — Specifies the lower height restriction of the NOTAM.
-
Upper limit — Specifies the upper height restriction of the NOTAM.
-
Geometry — Default geometry determined for the NOTAM
The last item, the default geometry, is exceptional because it is not parsed directly from the Digital NOTAM Event, but computed on-the-fly — as outlined below.
4.1.5.3. Determination of a Default Geometry for a NOTAM
Digital NOTAMs typically do not have a default geometry attached to them. However, provision of such a geometry is highly beneficial for NOTAM consumers (users and systems alike). This is because the default geometry would support a common means to search for and filter NOTAMs relevant to a given use case. In addition, a GeoJSON- which is highly popular amongst web application developers — based NOTAM encoding requires a default geometry in a GeoJSON encoded feature. Therefore in TB-17, interactive instruments developed an approach for determining a default geometry for a NOTAM event.
According to the Digital NOTAM (DNOTAM) Event Specification (version 1, chapter 5.3), the geographical data included in NOTAM messages is less mathematical and more descriptive. Even though the DNOTAM Event Specification contains rules for converting GML encoded geometries into NOTAM text, the NOTAMs received from SCDS rarely seem to contain such information. The correct way to compute a default geometry for each NOTAM would be to define production rules for each NOTAM scenario supported by AIM FNS. Since such rules could not be found for use in TB-17, a pragmatic approach for computing default geometries for NOTAMs was taken.
NOTE 1 On https://notams.aim.faa.gov — section Documentation — a number of documents for FNS NOTAM scenarios can be downloaded. These documents, even though they were issued in December 2010, are still referenced in recent publications — such as the SWIM Federal Notice to Airmen (NOTAM) System (FNS) NOTAM Distribution Service (NDS) Publish/Subscribe Operational Context Document (from Feb 28, 2019). However, it is unclear how the scenario identifier from digital NOTAM events can be matched against the relevant scenarios. Furthermore, rules for computing a default geometry for the scenarios could not be found.
The approach to determine a default geometry depends on whether the NOTAM message is airspace-related or not. A NOTAM message is airspace-related if the message header ‘us_gov_dot_faa_aim_fns_nds_NOTAMKeyword’ has value ‘AIRSPACE’.
Non-airspace-related NOTAM message:
-
NOTAM messages delivered by SCDS often (but not always) contain time slices — mostly snapshots, but also temp deltas — of aeronautical features affected by the event. Note that the snapshots received from SCDS typically are incomplete. In other words, values are only given for a select subset of the feature properties — even though, according to the AIXM Temporality Model, a snapshot should contain values for all feature properties. In any case, some of these time slices contain geometry data. The data harvester implemented for TB-17 gathers all (elevated) points, curves, and surfaces contained in the aeronautical features that accompany (i.e. they are in the same message as) the event feature. The geometries of highest dimension are selected and, if there are multiple geometries, merged (creating a union geometry). If, for example, the geometries gathered from the aeronautical features contained points as well as surfaces, then only the surfaces would be selected.
-
If the NOTAM message does not contain such geometries, then the ICAO location of the event is inspected. The ICAO location is part of an Event extension (in namespace http://www.aixm.aero/schema/5.1/extensions/FAA/FNSE). It is not provided for all events, but if it has a value, then an attempt is made to match it against the ‘locationIndicatorICAO’ property of AirportHeliport features contained in the 28 day NASR subscription airport baseline data. If a match exists, then the Airport Reference Point (ARP) is used as default geometry for the event.
-
If no match can be found via the ICAO location either, the NOTAM message is dismissed by the harvester.
Airspace-related NOTAM message:
-
For airspace-related NOTAMs, the NOTAM text was inspected first. If the text matched the regular expression ^AIRSPACE SEE (\\w{3}) (\\d+/\\d+) .*$ (with dot also matching newlines) then the second group within the expression identifies the NOTAM number. This number may match one of the Temporary Flight Restrictions (TFR) published by FAA not via the SCDS subscriptions, but only on the TFR website as HTML and not in a machine processable form. Such TFRs may be accompanied by a Shapefile whose feature(s) provide a geometry (collection) that is useful as the geometry of the NOTAM. If a match was found, and the TFR did have a Shapefile, the harvester used its geometry.
-
As an example, the following text matches the regular expression: ‘AIRSPACE SEE FDC 1/5005 ZLC 91.137 HAZARD’. ‘1/5005’ would be parsed as NOTAM number and the Shapefile describing the extent of the temporary flight restriction would be at https://tfr.faa.gov/save_pages/1_5005.shp.zip.
-
-
If no geometry could be determined via the TFRs, then the airspace designator (‘ZLC’ in the example NOTAM) — which appears to be encoded in the event location — was matched against the IDENT field of airspace features contained in the Shapefiles that are part of the 28 day NASR subscription files and that was published via the Airspace API. If matches were found, the default geometry was set to the union of the shapes of the matching airspace features stored in the Shapefile.
-
Otherwise, the NOTAM message was dismissed by the harvester.
The pragmatic approach described above was taken for TB-17 in order to have a common set of relatively simple rules for computing default geometries for NOTAM events. For a production environment, rules for computing a default event geometry would need to be defined for each NOTAM scenario — and implemented as such. Figure 9 summarizes this process.
NOTE 2 The 28 day NASR subscription files can be downloaded from the FAA website. As the name suggests, these files have a time period of 28 days in which they are effective.
Figure 9 — Process for Determining Default Geometry
4.2. APIs
4.2.1. Overview
Four APIs have been set up using:
-
Class B/C/D/E Airspaces from the National Airspace System Resource (NASR) Subscription,
-
AIXM 5.1 airport data provided by Hexagon,
-
NOTAMs received from the AIM-FNS feed from SCDS.
The APIs implement Parts 1, 2 and 3 of OGC API Features as well as drafts of OGC API Tiles, OGC API Styles and other draft extensions to OGC API Features.
The airport data is provided as two APIs:
-
Organized by feature type. That is, each AIXM feature type is a feature collection that contains the features for all airports.
-
Organized by airport. That is, each airport is a feature collection that contains the features of all feature Types for the airport.
The feature data is provided in two JSON encodings (GeoJSON and JSON-FG) and HTML, based on the AIXM application schema.
The data is provided in the following coordinate reference systems (CRS):
-
WGS 84 longitude-latitude axis aligned (http://www.opengis.net/def/crs/OGC/1.3/CRS84)
-
WGS 84 latitude-longitude axis aligned (http://www.opengis.net/def/crs/EPSG/0/4326)
-
Web Mercator (http://www.opengis.net/def/crs/EPSG/0/3857)
-
NAD83 (http://www.opengis.net/def/crs/EPSG/0/4269)
Only a few CRSs were configured since no client has requested support for additional systems. If needed, additional CRSs could be added.
4.2.2. API Design Considerations and Decisions
The data shared via the APIs are features that are specified in the Aeronautical Information Exchange Model (AIXM).
The APIs target web developers, but also aim to be usable by end-users familiar with aviation concepts in a browser.
Based on this, the following design decisions were made for all D104 APIs:
-
There will not be a single Aviation API, but APIs for specific patterns of use. The APIs will re-use existing, standardized API building blocks mainly from IETF and the OGC API standards, where possible.
-
The four Aeronautical Data APIs of D104 share base data for airspaces and airports as well as information about events with a temporal effect.
-
Since the data, which is shared via the APIs, are features in the sense of the General Feature Model of OGC and ISO/TC 211, the APIs build on the standard API building blocks for feature data. In particular, they conform to OGC API — Features — Part 1: Core. An immediate benefit of this approach is that the APIs can be used with generic OGC API clients like QGIS or ArcGIS as well as in web browsers.
-
To simplify the use of the data that is fetched by clients, every feature represents the state of the real-world object during a single time slice. In other words, an AIXM feature that consists of multiple time slices would be published via the API as multiple features, each with the temporal validity of the time slice.
-
The features are provided in two JSON encodings: GeoJSON and JSON-FG.
-
The AIXM feature type is encoded in each feature in a top-level JSON member with the key “featureType” and the AIXM feature type name with a “aixm:” prefix, e.g. "featureType": "aixm:AirportHeliport".
-
The feature properties use the unqualified name of the AIXM property. Values are simplified / flattened, where possible, based on the information contained in the source data.
-
In addition to providing the features in JSON, the data are also provided as HTML. The APIs translate the AIXM based data to a HTML representation that is human-friendly. Instead of the property names, the titles (and descriptions) from the AIXM documentation are provided. Coded values are translated to their human-friendly labels.
-
To support easy-to-use filtering of data, the AIXM features can be filtered using query parameters for key attributes — in addition to the spatial and temporal filtering using the standard bbox and datetime query parameters.
-
To support retrieving the feature geometries in other coordinate reference systems beside WGS 84, all APIs conform to OGC API — Features — Part 2: Coordinate Reference Systems by Reference.
-
To support more advanced filtering of features, all APIs conform to the current draft of OGC API — Features — Part 3: Filtering and the Common Query Language (CQL).
-
To support large filter expressions, the APIs also support URL-encoded POST requests to the Features resources.
-
To simplify filtering features that are currently valid, an additional token “now” is supported in the datetime parameter (“now” can also be the start or end value in an interval). In CQL filters a function now() can be used.
-
To support clients that need a schema of the available data, the JSON schema of the features is available based on the current “Schema” proposal.
-
To support clients that only need a subset of the feature properties, the content can be tailored based on the current “Property Selection” proposal.
-
To support clients that want to render feature data on a map, the feature geometries can be simplified based on the current “Geometry Simplification” proposal.
-
To simplify viewing the data in a web map — including in the HTML representation in the web browser, some of the APIs also conform to the drafts of OGC API Tiles and OGC API Styles. Where supported, the feature data is also provided as vector tiles in the Mapbox Vector Tiles format and styles are available in the Mapbox Style format. The data in the vector tiles is restricted to data this is valid at the time of the request.
-
OpenAPI 3.0 is used to define / specify / document the API.
-
Cross-Origin requests are supported.
-
HTTP caching and conditional requests are supported to leverage web caches.
Just like the OGC API standards, the four APIs making up this Façade Service have been designed to support two different approaches for how clients will use the API:
In the first approach, clients are implemented with knowledge about the API specification and its resource types. The clients navigate the resources based on this knowledge and based on the responses provided by the API. The API definition may be used to determine details, such as filter parameters, but this may not be necessary depending on the needs of the client. These are clients that are in general able to use multiple APIs as long as they implement the same API building blocks.
The second approach targets developers that are not familiar with OGC API standards but want to interact with spatial data provided by an API that happens to implement an OGC API standard. In this case the developer will study and use the OpenAPI definition to understand the API and implement the code to interact with the API. This assumes familiarity with OpenAPI and the related tooling. As such studying the OGC API standards documents should not be necessary.
4.2.3. General Rules for all APIs
The following sub-sections provide an overview of the available resources in the API. All paths are relative to the base URI https://t17.ldproxy.net/{apiId} where {apiId} is airspaces, airports, airports2 or fns.
4.2.3.1. Read-only
The APIs only provide read-access.
With the exception to the resources at /collections/{collectionId}/items only the HTTP GET method is supported. That resource also supports the HTTP method POST with the form media type application/x-www-form-urlencoded in addition to GET in order to support queries with large geometries due to length restrictions for URLs.
4.2.3.2. Supported Encodings
Resources are in general available as HTML and JSON:
-
To fetch HTML, use HTTP content negotiation (e.g. set the Accept header to Accept: text/html) or use a query parameter f=html.
-
To fetch JSON/GeoJSON, use HTTP content negotiation (e.g. set the Accept header to Accept: application/json, application/geo+json) or use a query parameter f=json.
-
To fetch JSON/JSON-FG, use HTTP content negotiation (e.g. set the Accept header to Accept: application/json, application/vnd.ogc.fg+json) or use a query parameter f=jsonfg.
The metadata about the data that is used in the API configuration and to provide a human readable HTML representation has been derived from AIM documentation, the AIS Open Data Dictionary and the AIXM documentation.
4.2.3.3. General Information
-
/ — the Landing Page, contains links to sub-resources in the API
-
/conformance — the Conformance Declaration, lists the URIs of the OGC API conformance classes implemented by the API; this resource is only relevant for clients that implement OGC API standards.
These resources are specified by OGC API Common / OGC API Features.
4.2.3.4. The Data That is Available
-
/collections — the Feature Collections available in this API
-
/collections/{collectionId} — the Feature Collection with id collectionId
-
/collections/{collectionId}/schema — the JSON schema describing the GeoJSON features that are returned for the Feature Collection with id collectionId
-
/collections/{collectionId}/queryables — the JSON schema describing the properties that can be used to filter the features in the Feature Collection with id collectionId
-
/collections/{collectionId}/context — the JSON-LD context referenced from the GeoJSON features that are returned for the Feature Collection with id collectionId
These resources are specified by OGC API Features or are ldproxy extensions.
The JSON-LD contexts are the result of early experiments, but are no longer used. The main reasons are that no clients in the testbed needed this information, and no vocabulary or ontology exists for AIXM that could be linked to.
4.2.3.5. Accessing Features
-
/collections/{collectionId}/items — access to features in the Feature Collection with id collectionId. This request supports a range of query parameters to filter the features or modify the feature representation that is returned (see the example requests below or consult the API definition).
-
/collections/{collectionId}/items/{featureId} — access the Feature with identifier featureId in the Feature Collection with id collectionId.
These resources are specified by OGC API — Features, sub-clauses 7.15 and 7.16.
4.2.3.6. Accessing Vector Tiles
-
/tiles/WebMercatorQuad/{tileMatrix}/{tileRow}/{tileCol} — access to vector tiles with features organized in layers (one for each airspace class). Only the standard tiling scheme that is used by Google Maps is supported.
-
/collections/{collectionId}/tiles/WebMercatorQuad/{tileMatrix}/{tileRow}/{tileCol} — access to vector tiles with features with a single layer with features from the Feature Collection with id collectionId; only the standard tiling scheme that is used by Google Maps is supported.
There are more resources, but these are the main ones to use in a typical mapping client.
These resources are specified in the draft OGC API — Tiles specification.
4.2.3.7. Style
-
/styles/{styleId} — access to styles that may have been configured for an API, available in the Mapbox Style encoding. The HTML representation renders a map using the style and the vector tiles.
There are more resources, but this is the main one to use in a typical mapping client.
These resources are specified in the draft OGC API — Styles specification.
4.2.4. FAA’s NOTAM API
During the execution of the TB-17, the FAA announced their own NOTAM API development in a SWIFT meeting on May 27, 2021. The following section compares the similarities and differences between the API developed by FAA and the API developed in TB-17, based on the information in the presentation given at the meeting (slides 22 to 36).
4.2.4.1. Similarities
Both APIs
-
aim at “a simplified machine-to-machine interface to help improve access to NOTAM data;”
-
are Web APIs specified and documented using OpenAPI 3.0;
-
target developers;
-
enable direct NOTAM queries with filtering without the need to locally store all NOTAMs;
-
use SCDS AIM-FNS as the source for NOTAMs;
-
integrate Temporary Flight Restriction (TFR) geometries;
-
publish the NOTAMs as GeoJSON with a very similar schema;
4.2.4.2. Differences
The FAA NOTAM API
-
supports authentication through API keys (not relevant for TB-17);
-
supports AIDAP and AIXM 5.1 output formats in addition to GeoJSON (not relevant for Testbed-17);
-
integrates also Special Activity Airspace (SAA) geometries (no publicly available machine readable source for the SAA geometries could be determined); and
-
provides a JavaScript SDK.
The TB-17 NOTAM API
-
supports HTML for all resources which enables direct use in a browser by anyone;
-
supports all filtering capabilities of the FAA API plus much richer capabilities through the support for CQL2 and a larger set of queryable properties (i.e. properties that can be used to filter the features in a Feature Collection);
-
conforms to approved and draft OGC API standards;
-
can be used with a growing number of tools, libraries and SDKs that support OGC API standards;
-
improved visualization in map clients through the support for vector tiles; and
-
publishes the NOTAMs also as JSON-FG encoded documents.
4.3. Challenges and Lessons Learned
Challenges retrieving input data:
-
Finding aeronautical datasets on the FAA websites was challenging.
-
The datasets discovered did not have information about the license under which they can be used.
-
Some data still uses the old AIXM 5.0 standard, some data uses AIXM 5.1, but deviating from the guidance in the AIXM or Digital NOTAM specifications. interactive instruments was not successful in determining some of the FAA conventions (e.g. the NOTAM scenarios and their identifiers). The only reliable approach was to try and analyze the data and reverse engineer the content to determine how the data could be processed.
Challenges executing internal processes:
-
See Clause 4.1.5.3.
Challenges providing output data:
-
There was one issue that was raised by the map client (D108) with respect to the feature encoding. The client needs to know the feature type in order to select the appropriate portrayal style for the feature. Since GeoJSON does not have a feature type concept, it was decided to add a new JSON member “featureType” to indicate the AIXM feature type. This member is borrowed from the JSON-FG work and was included in the GeoJSON encoding to support the map client.
-
An advantage of the JSON-FG encoding is the “when” member as it — together with the datetime query parameter — supports that clients provide a time slider without the need to understand the feature schema.
-
JSON-FG also is clearer when geometries are not encoded in WGS 84 lon/lat due to the explicit support for other CRSs. However, the scenarios used in the testbed did not really have a need to use other CRSs.
-
Due to the lack of a referenceable AIXM vocabulary or ontology, it was not possible to enrich the JSON data with semantic annotations using JSON-LD contexts. At the same time, none of the clients was expecting such information, so this was not really an issue in this testbed.
4.3.1. Contrast With Testbed-16 Aviation Task Challenges
-
What is a feature in SWIM for the OGC API — Features service?: The issue still exists. The NOTAMs distributed via SCDS are not full Digital NOTAMs and much of the information would have to be parsed from the NOTAM text and referenced to a dataset with all referenced aeronautical features (which was not available to us, except for certain feature types like airspaces). The participant therefore decided to restrict the API to NOTAMs as features.
-
Unique identification of a feature: The issue still exists. The AIXM datasets that were used do not have any persistent identifiers. A result is that the identifiers are basically assigned by the API. This was not an issue for the use cases in this testbed, but these would be an issue for a production API.
-
Spatial extent in a feature collection: This issue was addressed. See Clause 4.1.3.1.
-
Temporal extent in a feature collection: This issue was addressed. See Clause 4.1.3.1.
-
Spatial information in a feature: This was an issue in this testbed. See Clause 4.1.5.3.
-
Limited semantic descriptions of feature collections and features: See the comments on JSON-LD above.
-
Large data volume: Not an issue for D104. The NOTAM volume has not been an issue for the duration of this testbed. Purging NOTAMs that have not been active for some time should not be a problem for most use cases.
-
Automatic code generation is not perfect: No experiments with automatic code generation.
5. SWIM Flight Position Façade Service
The SWIM Flight Position Façade Service provides flight position data from the Federal Aviation Administration’s (FAA) System Wide Information Management System (SWIM). D105 exposes separately flight data from three different SWIM sources:
-
The SWIM Terminal Data Distribution System (STDDS),
-
The Traffic Flow Management System (TFMS), and
-
The SWIM Flight Data Publication Service (SFDPS).
These three sources of information provide the complete gate-to-gate story of a flight.
5.1. Status Quo
SWIM delivers data for the three flight data feeds leveraged for D105 via Solace Java Message Service (JMS) messaging. JMS requires end users to read JMS Description Documents across the services (currently on NSRR), subscribe to a service, consume the data from the service, transform the data into a common language, and then map that data into a database.
Across that process of consuming the data, there are a few distinct challenges:
-
Firstly, the data coming from these feeds is not only limited to flight position data. Therefore, the developer needs to decide early on in the process what data will be needed for their specific use case. Usually the answer is “give me everything” but there are challenges with that approach as typically the end user has a specific use case in mind.
-
The data provided by SWIM is not necessarily in a consistent format. TFMS and STDDS data is provided in the FIXM format whereas SFDPS data is provided in a “custom” data format. These challenges, including the volume of data, make the data difficult to access and make sense of for the common user.
5.2. Functional Overview
This component adds value for an end user because it provides data from the three SWIM data feeds via a consistent interface, with consistent documentation, and in a consistent format. By leveraging OGC’s APIs, a developer can expect to have a consistent experience with the data from these three feeds, which is not the case when accessing the data via SWIM JMS. Additionally, the façade solves data collection and storage tasks for the user. A user does not have to ingest or maintain a big database to store it all.
As seen on Figure 10, the façade is made of three sets of connectors, parsers, and servers. Each one of the three connectors is designed to communicate with a different SWIM flight feed: SFDPS, TFMS, and STDDS. SFDPS feeds custom XML to its connector, while both TFMS and STDDS feed FIXM data to its respective connectors. Each parser is designed to interpret the data coming from each one of its corresponding flight feeds, and relay flight data encoded in JSON format to its respective Post GIS Server. The API of the façade is designed to communicate with each one of these three GIS servers to retrieve information when requested. Figure 11 shows the end-to-end data flow of D105.
Figure 10 — Structure of the SWIM Flight Position Façade Service
Figure 11 — Data Flow of the SWIM Flight Position Façade Service
5.2.1. Available APIs
D105 provides actual flight position data from TFMS, STDDS, and SFDPS. STDDS provides flight positions in and around airports versus TFMS and SFDPS focus more on en route flight positions. The API calls are defined using OpenAPI 3.0.1 and are structured similarly for each feed providing a standardized way for a developer to access the data from these three disparate feeds. The API calls available for each data feed include:
-
Get a unique route (user inputs acid, origin airport, destination airport, and time).
-
Get routes of flights using an origin airport (user inputs origin airport, start time, and end time).
-
Get route of flight using a destination airport (user inputs destination airport, start time, and end time).
-
Get route for a specific GUFI (user inputs GUFI).
The returns are structured in JSON. In cases where a single flight is returned (e.g., Get route for the specific GUFI), a single feature is returned whereas for cases where multiple flights are returned, then a featureCollection is returned. However, it should be noted that for all the services, a flight maps to a single feature. Each feature includes the following:
-
type
-
geometry
-
gufi
-
acid
-
aircraft_address
-
aircraft_registration
-
arrival_aerodrome_icao_name
-
departure_aerodrome_icao_name
-
departure_time
-
arrival_time
Resulting feature collections are filtered only by the parameters defined for each function. In the case of functions that return FeatureCollection, these include a limit parameter. No other general use filtering strategy is provided at this time.
5.3. Challenges and Lessons Learned
-
Transitioning from pub/sub to request/reply environments: The biggest challenge associated with retrieving the input data was transitioning from a pub/sub environment to a request/reply environment. The SWIM flight data feeds are bulky. Therefore, if simplifying assumptions are not made, a database designed for each feed will quickly reach capacity. Therefore, the APIs were designed to only support the data needs for the envisioned fusion services. The volume of data made some of the API calls slow. Therefore, steps were made to improve performance (e.g., limiting the number of feature returns).
-
Performance limitations due to data amount: As noted before, there is a lot of data included in these feeds. As such the data returned was specific to the need for actual flight position data. Provided the volume of flight data in each return (flight position updates every 10-15 seconds), database performance was a challenge and would pose a significant challenge if this capability is deployed as a real-time service.
-
Data Mapping: Data needs to be mapped into features to make them available through an implementation of OGC API – Features. This mapping is not a simple one-to-one match because a message may contain several features with different spatial and temporal ranges. The identification of mappable features from SWIM services needs to be considered carefully case by case.
6. FAA Flight Plans Façade Service
The FAA Flight Plans Façade Service, developed by Skymantics, was a component designed to fetch flight data from SWIM Flight Data Publication Services (SFDPS) and relay it through an OGC API — Features endpoint. Information from this component was retrieved by both the International Flight Data Fusion Component, and the Flight Restrictions Data Fusion Component.
6.1. Functional Overview
The Façade Service is made up of several interconnected elements, as seen in Figure 12. A JMS Client is designed to retrieve messages from the SWIM SCDS. The flight importer is designed to combine the XML coming from the JMS client with geometry information. Two databases, one for EUROCONTROL data and another one for FAA data, keep information of airports, waypoints, control centers, among other data. A third database stores flight data and geometries ready to be served on request by the API. Finally, the component includes an API based on OGC API — Features.
The process flow is the following:
-
New message published in the SWIM subscription.
-
Message is received by the client.
-
Message information is decoded by flight importer. Geometry of the flight route is generated based on the flight route string and FAA’s aeronautical information pertaining to waypoints and airport locations. EUROCONTROL’s aeronautical information is kept as backup in case some locations are not found. Links to features expanding information (airports, ARTCCs) are also included. FAA and EUROCONTROL’s aeronautical information were previously extracted and stored in a PostgreSQL database.
-
The resulting flight information is stored in a PostgreSQL database.
-
Flight data in the database is published using an implementation of OGC API — Features in three different formats (HTML, GeoJSON and JSON-FG).
-
FAA’s aeronautical information is also published using this same API.
Figure 12 — Structure of the FAA Flight Plans Façade Service
A Java-based client listens to the subscription. The raw data is transformed before being served through the API, although the original basic FIXM structure is kept reasonably similar to the original. It is still possible to review the original FIXM documentation and understand the structure, values and semantics.
Two attributes/properties were modified in order to simplify the structure:
-
altitude is a JSON object, combining original objects assignedAltitude and requestedAltitude for simplicity
-
airspeed is a JSON object, combining original objects assignedAirSpeed and requestedAirSpeed for simplicity
Moreover, three attributes/properties were enriched to provide links to external features providing additional information:
-
arrival (JSON object with embedded schema:Airport items that link to Airports collections)
-
departure (JSON object with embedded schema:Airport items that link to Airports collections)
-
centre (JSON object with embedded nasr:ARTCC item that link to ARTCCs collection)
GeoJSON format uses geometries as an essential component of the encoding. These geometries store the coordinates of a feature. For example, a specific coordinate for a waypoint, a list of coordinates for a flight trajectory, or a matrix of coordinates indicating a volume in the space affected by a restriction. They are very important as they allow clients to display visually a feature on a map or on a 3D model. They also allow to manipulate features and find geographical commonalities, such as a flight trajectory intersecting a restriction volume, becoming essential for service fusion.
NMB2B or SFDPS do not provide geometries for their features, but references to airports, waypoints and route segments. These elements are stored in separate airspace datasets with detailed description of their attributes, including their geographical properties. In D107a and D107b, coordinates for airports and waypoints were first extracted from these airspace datasets, so that route strings in flight plans could be interpreted and translated to a list of coordinates.
Finally, the data is transformed from XML to three different formats (HTML, GeoJSON and JSON-FG)
A Postgres database stores the latest status for a flight (GUFI). If a SWIM message arrives with a GUFI that already exists, the data for that flight is updated.
6.1.1. API Overview
This API was built following the Standard OGC API — Features and adapted to publish JSON-FG.
In this case, flight plans fit well in the definition of feature (according to ISO-19101, a feature is defined as an: “abstraction of real world phenomena”), so OGC API Features seems the natural API to publish flight data. As flight plans always have a temporal interval (the planned or actual departure and arrival times), the best format to encode them is probably JSON-FG, although it is important to keep GeoJSON format due to its wide adoption and ecosystem of ready-to-use tools.
The API supports filtering using the following parameters:
-
limit: Will return the next elements until the amount specified in the limit.
-
bbox: Will return all flights that cross the bounding box.
-
datetime: Only available if format requested is jsonfg.
-
specific datetime: Will return all flights that are operating at that moment.
-
datetime interval: Will return all flights that are operating at any moment during that interval.
-
-
queryables: The list of available queryables is here: https://aviationapi.skymantics.com/faa/collections/faa_flight_plans/queryables.
The API also provides semantic information. To start with, the HTML and GeoJSON formats provide one property named “feattype” that indicates the type of feature. In JSON-FG format the top-level member featureType is the one indicating the type of feature.
The content of the featureType (or the feattype property) for flight plans is sfdps:FlightPlan, which follows the JSON-LD standard. This serves as an anchor to define contexts and provide links to dictionaries providing further information of the featureType. In this case, the context is sfdps and could provide the link to a dictionary containing all the information on FAA’s SFDPS.
Moreover, JSON-FG provides additional links to JSON schemas describing the structure of the collections and features data. Several links can be provided for the same item, for example a link to the schema of a GeoJSON feature, a link to the schema of a JSON-FG feature and a link to the schema of a FAA SFDPS flight plan, being all simultaneously valid (because these features follow those three schemas simultaneously).
Apart from that, nested properties in features keep their original FIXM types (such as ns5:NasRouteType, ns2:FixPointType or ns5:NasAircraftType). In addition, other nested properties that provide a link to external features stored in the aeronautical databases have their own type definition, referring to the linked type, such as arrival or departure airports and alternates (type defined as schema:Airport) or control center (type defined as nasr:ARTCC).
Finally, the API also provides links to external features, in order to complete information such as airports and control center.
6.2. Challenges and Lessons Learned
-
Sheer number of messages: Even though the subscription was limited to just three types of messages and six airports, the quantity of messages was overwhelming (about 40,000 messages/day, about 80% of which were updates to existing flight plans, over 300Mb of data downloaded each day). When a flight was updated, all the flight information was included in the message, not only the updated data, thereby unnecessarily increasing the size.
-
FAA aeronautical data format: FAA Aeronautical data was relatively easy to find, but the encoding format was cumbersome to process. Besides, only US data is included, so the data needed to be complemented with EUROCONTROL’s aeronautical data in order to build the geometries of the routes for the international flights.
-
Building the geometries of the routes: Routes are encoded in compressed strings that are hard to decode (example: KIAD./.DYR034086..FEWWW.SEEVR4.KDFW/0021). It requires understanding the format (waypoint.route.waipoint.route.waypoint and so on), interpreting special characters, numbers and having access to all the waypoints that are encoded in the route string. Then, there is also the need to add logic, as some international waypoints are duplicated (that is, two waypoints using the same id but in different coordinates) and you need to select the most probable one.
-
Missing Data: Additionally, specially from inbound flights to the US, the FAA misses crucial information, such as departure time and arrival time, or all the route information between the departure airport and the beginning of the portion of the flight occurring in FAA airspace.
6.2.1. Contrast With Testbed-16 Aviation Task Challenges
-
Spatial information in a feature: Flight plans do not explicitly include spatial information but must be inferred from the route string, which is hard to interpret and is sometimes ambiguous.
-
Limited semantic descriptions of feature collections and features: In JSON-FG this issue is solved with the featureType member, the JSON-LD context, and the links to JSON schemas. However, these dictionaries and schemas need to be implemented and available for linking. https://semantics.aero/ would be a good place to start. This is a pretty similar conclusion as in TB-16
-
Large data volume: This issue was resolved by cleaning the database of messages older than 7 days. But it is an issue as it limits the scalability of the service. For example, if updates were limited to only the data that has changed, the data transfer will likely drop to less than half of current level.
7. EUROCONTROL Flight Plans Façade Service
Developed by Skymantics, the EUROCONTROL Flight Plans Façade Service was a component designed to fetch flight data from EUROCONTROL NMB2B and relay the data through an OGC API — Features endpoint. Information from this component was retrieved by the International Flight Data Fusion Component.
7.1. Functional Overview
Depending on the use case, the NMB2B service offers two types of interfaces: a request/response and a sub/pub. For this task, as the FAA façade was built on top of a pub/sub service, the participants decided to build the EUROCONTROL façade on top of a request/response one, with the purpose of comparing building a façade on top of both types of interfaces.
As shown in Figure 13, the component is made up of several interconnected elements. The flight importer is designed to request flight plans from NMB2 and combine it with geometry information. Two databases, one for EUROCONTROL data and another one for FAA data, keeps information from airports, waypoints, control centers, and so on. A third database stores flight data and geometries ready to be served on request by the API. Finally, the component includes an API based on OGC API — Features.
The process flow is the following:
-
The NMB2B service is a request/response type, so there is no client listening to a subscription. Instead, periodically a process triggers a flight importer script that requests flight plans, storing new ones and updates existing ones.
-
Message information is decoded by the Flight Importer. Geometry of the flight route is generated based on the flight route string and FAA’s aeronautical information pertaining to waypoints and airport locations. EUROCONTROL’s aeronautical information is kept as a backup in case some locations are not found. Links to features expanding information (airports, ARTCCs) are also included. FAA and EUROCONTROL’s aeronautical information were previously extracted and stored in a PostgreSQL database.
-
The resulting flight information is stored in a PostgreSQL database.
-
Flight data in the database is published using an implementation of OGC API — Features in three different formats (HTML, GeoJSON and JSON-FG).
-
EUROCONTROL’s aeronautical information is also published using this same API.
Figure 13 — Structure of the EUROCONTROL Flight Plans Façade Service
In order to reuse the original NMB2B Services documentation to a great extent, the data structure has been kept as close to its original XML implementation as possible.
The data structure is defined in the service request and can be tailored to the needs. This is a very convenient capability, as it supports adjusting the bandwidth and storage space to the real needs. For this case, all possible data is requested, meaning that messages from NM B2B service will be bulky.
Geometry in GeoJSON and JSON-FG formats is a LineString depicting the planned route. Although NM B2B provides a similar route string as in the case of D107a, there is a different element providing a more detailed trajectory (probably generated using an internal fusion service). This element is ftfmpointprofile and is fused with EUROCONTROL’s Airports and FIXes collections (and also FAA’s Airports and FIXes collections) to generate the coordinate list that will depict the route. In fact, the resulting 4D trajectories were so nicely generated that one sample was easily packed following the draft OGC Route Exchange Model specification and presented to the OGC Routes SWG with a pretty enthusiastic reception.
Similarly, as in D107a, the JSON-FG format includes @context information, linking to semantic descriptions of the featureType. The when attribute provides information on the time interval between departure and arrival, if that information is available.
The data is published in three different formats (HTML, GeoJSON and JSON-FG)
7.1.1. API Overview
-
Main endpoint (OGC API — Features): Data for this endpoint is periodically downloaded from NM B2B PREOPS service for all flights leaving or arriving to six airports (KJFK, KBOS, KPHL, KCLT, KIAD and KMEM), same as FAA façade.
-
Additional endpoints (OGC API — Features): Data for these endpoints is static and has been extracted from EUROCONTROL NM Airspace Datasets.
7.1.1.1. Data Structure
Some of the most relevant data per flight are:
-
flightid: Different from FAA’s GUFI.
-
aircraftid: Same as the one used in FAA façade, in flightidentification queryable.
-
aerodromeofdeparture: A JSON object adapted to use similar structures as in the FAA façade, with embedded schema:Airport items that link to Airports collections.
-
aerodromeofdestination: A JSON object adapted to use similar structures as in the FAA façade, with embedded schema:Airport items that link to Airports collections.
-
estimatedoffblocktime / estimatedtimeofarrival: Properties used to estimate the time interval of the flight.
-
ftfmpointprofile: A detailed route plan, with important similarities to the Route Exchange Model being defined in Routes SWG. According to EUROCONTROL’s documentation:
FTFM (Filed Tactical Flight Model) point profile. The FTFM flight profile corresponds to the trafficType DEMAND. So in the operational dataset, it reflects the latest AO flight plan: i.e. the latest filed flight plan but updated (shifted) with the latest CDM related info and READY messages or amended by NM OPS room.
Each feature is published in GeoJSON and JSON-FG formats in order to compare these two encodings.
7.1.1.2. Process
Every hour a process is launched to request flight plans from NM B2B service. Allowed traffic bandwidth is limited, so this needs to be done with caution. New messages are parsed and entered in a PostgreSQL database (either as a new row or updating an existing one). The properties aerodromeofdeparture and aerodromeofdestination are parsed including a link to features in other collections and a context-referenced type.
The route is processed to generate the feature geometry by finding departure and arrival coordinates in the Airports collection and then either by searching the waypoint coordinates in the FIXes collection, or by calculating them if these are non-published geopoints. Geometries are stored as PostGIS geometries.
If an airport or waypoint was not found in the EUROCONTROL collections, it was searched for in the FAA collections.
Please note that the service is accessing a PREOPS version of NM B2B and some flight plans might not be inserted or might be updated late.
Data is published by an adapted pygeoapi instance, set up as an OGC API – Features endpoint.
7.1.1.3. Usage
The collection queryables can be requested. Several JSON object properties have been disabled as queryables (and thus cannot be found in the queryables list), but others have been adapted and will search in one of their subproperties. For example: properties aerodromeofdeparture and aerodromeofdestination will search in their respective airport ids.
Flight plans are dynamic and old plans (over one week old) are deleted from the database.
NOTE When using JSON-FG format, it is possible to filter by datetime (and only when using JSON-FG format). This will query for flight plans that are occurring at a specific instant or that overlap total or partially with an interval.
Example requests from the API:
-
List all flight plans departing Paris Charles de Gaulle Airport (LFPG): https://aviationapi.skymantics.com/eurocontrol/collections/eu_flight_plans/items?aerodromeofdeparture=LFPG
-
List all flight plans from Paris Charles de Gaulle Airport (LFPG) to John F. Kennedy International Airport (KJFK): https://aviationapi.skymantics.com/eurocontrol/collections/eu_flight_plans/items?aerodromeofdeparture=LFPG&aerodromeofdestination=KJFK
-
List all flight plans from Paris Charles de Gaulle Airport (LFPG) to John F. Kennedy International Airport (KJFK) that were flying anytime (UTC) during 2021 Sept 8 (note the usage of f=jsonfg parameter): https://aviationapi.skymantics.com/eurocontrol/collections/eu_flight_plans/items?f=jsonfg&aerodromeofdeparture=LFPG&aerodromeofdestination=KJFK&datetime=2021-09-08T00:00:00Z/2021-09-08T23:59:59Z
-
List all flight plans from Paris Charles de Gaulle Airport (LFPG) to John F. Kennedy International Airport (KJFK) that were flying at 10 am (UTC) on 2021 Sept 8 (note the usage of f=jsonfg parameter): https://aviationapi.skymantics.com/eurocontrol/collections/eu_flight_plans/items?f=jsonfg&aerodromeofdeparture=LFPG&aerodromeofdestination=KJFK&datetime=2021-09-08T10:00:00Z
-
List all flights operated by aircraft AFR014: https://aviationapi.skymantics.com/eurocontrol/collections/eu_flight_plans/items?aircraftid=AFR014
7.2. Challenges and Lessons Learned
-
Obsoleteness and Bandwidth: The process was different than in D107a because of the different nature of the service. The number of properties per flight could be selected in the query, making the Façade Service both flexible and adaptable. However, the fact that no subscription informed of changes in the flight information meant that it was unknown whether the retrieved data was obsolete or not. So, flights had to be requested again to ensure eventual changes and new flights were registered. However, EUROCONTROL imposes limits to the maximum bandwidth that can be used, needing to modulate the pace of requests and finding a compromise between update frequency and bandwidth consumption.
As a conclusion, even though the number of properties per flight could be selected and -in theory- the size of the messages were adapted to the needs, the Façade Service ended up using a large amount of bandwidth because NM B2B had to be queried frequently for updates.
-
Waypoints with same ID: Although the interpretation of the trajectory was easier in this case than in D107A, there was still the problem of waypoints with the same id but in different locations.
-
Data not Found on both Datasets: When implementing the fusion service, some international flights from or to Europe that were in FAA’s façade could not be found in EUROCONTROL’s, even if querying directly the NM B2B service. It was assumed that the reason for that is that the NM B2B service is a PREOPS version and might lack some data. However, the participants also found that some flights in EUROCONTROL’s façade were not in FAA’s, so the problem might be of lack of coordination among international agencies.
-
Advantages Found:
-
Flight data is encoded in GeoJSON / JSON-FG formats with all the associated advantages of readability, adoption, geometry information and semantics. Geometry information is particularly remarkable as it allows for filtering based on bounding boxes or areas, allowing also for coordinated-based fusion services.
-
The HTML output format allows to visualize the flight plan trajectory at the server level.
-
NMB2B imposes several restrictions, such as the datetime interval can only be +/1 day of current date, or the bandwidth limitations, that would easily limit intensive TIEs. All these restrictions are overcome by implementing a façade.
-
The façade was deployed close to the fusion service, improving the performance of the fusion service.
-
7.2.1. Contrast With Testbed-16 Aviation Task Challenges
-
Spatial information in a feature: This service offers a much more convenient way to assess the 4D flight trajectory in detail (in fact, the EUROCONTROL trajectory was encoded using the rules specified in the draft Route Exchange Model). The only remaining problem was the ambiguity of some waypoints that share the same ID but are located in very different coordinates.
-
Large data volume: NM B2B supports requesting flight information when needed and to select the properties to be downloaded, so this issue is solved. However, a new issue appears if there are no sub/pub services providing timely info on updates and new flights. This issue forces periodic requests that require a high consumption of bandwidth. This can be solved by using both request/response and pub/sub services provided by NM B2B to complement each other.
8. Flight Restrictions Data Fusion Component
The Flight Restrictions Data Fusion Component, built by Ng Aviation, enables users to retrieve the flight restrictions found in a specific planned or already-flown flight. To do this, it fuses flight paths with flight restrictions coming from different sources.
8.1. Functional Overview
The Fusion Service consists of a submodule named Data Joiner which does the actual data fusion, and an API built to interface clients. The Data Joiner processes requests, retrieves data from Flight Providers and Restrictions Providers, and relays fused data to the API. The API was built following OGC API — Features — Part 1: Core. This architecture is described in Figure 14.
Figure 14 — Structure of the Flight Restrictions Data Fusion Component
The fusion service does not have a database for storing raw or fused data. It is neither possible nor effective to copy all the data from every data source used for the data fusion process. There are no pub/sub endpoints for the data sources and as such it would be extremely challenging to try to retrieve all the data from the data source repositories while keeping track of any changes to the data. There are also some required parameters (e.g. origin airport) that make it even harder to get all the data.
8.1.1. Fusion Process
The component has two separate processes based on whether the end user, as a filter parameter, has provided the GUFI number of the flight for which restrictions are being looked for. Both processes are described in the Figure 15.
-
If no GUFI number is provided, the fusion service requests a list of ‘default’ flights are received from D107a. It was not possible to receive ‘default’ flights from D105 as it did not support the limit parameter and had some required parameters (origin, from, to). For each of the retrieved flights, the fusion service extracts the information about the geometry, departure and arrival time and uses it to request flight restrictions from D104. Results from D104 are returned to the client. Only the number of records defined by the limit parameter are returned.
-
If a GUFI number is provided, the fusion service first tries to get the flight details based on the GUFI using the Clause 5. If no data is returned, the fusion service tries to get the flight details from the Clause 6. This means the component is supporting flown flights and flight plans at the same time. The geometry and information about the departure and arrival time are extracted from the retrieved flight details and used to request flight restrictions using the Clause 4. This service returns (if found) a collection of flight restrictions features encoded as a GeoJSON document.
Figure 15 — Fusion Process of the Flight Restrictions Data Fusion Component
The fusion condition is an expression that can be evaluated to yes/no and can contain logical operators, spatial functions, time functions, data conversion functions or any other functions. The fusion condition is evaluated for each combination of rows from both data sources and if it evaluates as “yes”, the relation between these two rows exists. Obviously, the fusion condition contains a reference to both rows that are currently evaluated. The simplest example for the fusion condition would be rowDataSource1.id == rowDataSource2.id.
The fusion condition used for this fusion service is following spatial_intersects(rowFlightData.geometry, rowRestriction.geometry) && temporal_intersects(rowFlightData.timeRange, rowRestriction.timeRange). This condition is simplified. The actual fusion condition contains additional functions to unify the data formats. Omitted additional functions are conversion of geometry to the same coordinate reference system, conversion to the unified time range data type from the fields departuretime, arrivaltime, valid_time_begin, and valid_time_to.
As the geometry CRS from all data sources is the same (CRS84), the CRS conversion is not required and therefore not active. The reason why the CRS conversion was considered is the intention to build a data fusion service that is capable of fusing any two data sources that provide data as a GeoJSON document. While this is possible from the CRS point of view, the showstopper is the lack of a standardized way for encoding the temporal information. The “Features and Geometries JSON” draft offers a way on how to overcome this problem with the use of the proposed “when” parameter. For the testbed, it was not possible for the Fusion Component to use JSON-FG because the main data source for flight data did not offer data in the JSON-FG format. This is a good opportunity for future experiments, where all data sources will be delivered using the proposed JSON-FG format. At that time, generic fusion based on geometry and time would be possible.
8.1.2. Data Models Explored for Fused Data
The simplest way to fuse the data is to return all fields from both data sources in one row as displayed in the diagram (option A in Figure 16). However, there are many problems associated with this approach. First of all, there is not always a one-to-one relation. This is the TB-17 case. Second, encoding such a structure in GeoJSON format is not possible because there are two ids, two geometries and two sets of properties. A possible way to overcome this problem would be to select id and geometry from one entity and select only specific properties from entity a or b. In case of same name of the property in both entities, the property could be renamed.
The other extreme is to provide only ids of rows that are related (option B in Figure 16). However the user would be forced to gather the data manually based on ids received from the fusion service. On the other hand, the advantage would be that the data model is very simple and straightforward.
Another possibility would be to produce two datasets as result of the fusion (option C in Figure 16). The first dataset would contain all data from the first data source (id, geometry, properties) and list of IDs of related entities from the second data source. The second dataset would contain all data from the second data source and list of ids of related entities from the first data source. An alternative to this approach is to include the entire data object instead of a list of ids. However, this would produce a confusing nested data structure. The diagram displays the alternative with the list of ids.
The latter approach looked like a good alternative, but this option presented showstoppers as well. On one hand, the fusion service would have been able to get all flight restrictions for a specific flight. On the other hand, the fusion service would have not been able to get all flights for a specific flight restriction as the flight data sources (D105 and D107a) do not support filtering based on geometry. Furthermore, as one of the flight data sources (D105) does not support the limit parameter, which controls how many records are returned, it is really hard to offer a responsive fusion service when no filter criteria are defined from the client.
Figure 16 — Fused Data Model Options Explored
Another option considered was to force users to enter a GUFI filter to be able to use the fusion service. The API would return all restrictions that fulfill the fusion condition and are related to the flight according to the GUFI specified by the user. This idea was discarded because OGC API — Features shall support parameterless access as well.
The chosen model, as seen on Figure 17, consists of an “Enriched Entity” made up of the id, geometry and properties of an “Entity B” coupled with the ID of an “Entity A” with which it has been fused. In this example, Entity A would represent flights and Entity B would represent flight restrictions. As D105 nor D107a support filtering based on geometries (OGC API — Features: Part 3), the model was built with only one flight (Entity A) associated with a flight restriction (Entity B). Since in reality a restriction normally affects many flights, the data model uses the variable name retrievedForGUFI as a reference to the GUFI associated with the restriction in order to make clear that the restriction is associated to one flight in the model but can also be associated with another flight as well.
Figure 17 — Fused Data Model Option Selected
8.2. Before and After
If users manually performed this fusion, they would have to access D105 or D107a depending on whether they were requesting a flown flight or a flight plan. Users would also need to know which parameter to use for the filtering as both services use different ways of filtering based on GUFI. Next, users would have to extract the geometry information and the departure and arrival time and convert it to the format that is compatible with D104 filtering. As the geometry received from D105/D107a is complex, users would have to use a POST request to call D104 with geometry and date filter.
With this fusion service, users that have the GUFI of a flight visit only one service to retrieve the flight restrictions for that flight. This is independent of the fact whether the flight was already flown or will be flown in the future. The user does not have to make complicated transformations of geometry and date to be able to filter the flight restrictions.
8.3. Challenges and Lessons Learned
-
Potential Inefficiencies: A potential downside of the approach is that for the use case where the user knows whether the flight was already flown or not, the system could unnecessarily contact the flight plan service as well. In the case the flight plan and flown flight should differ, it would be impossible to compare these two. The possibility is to split the fusion service into two endpoints: one for flight plan and one for flown flight. This sounds like a good use case to compare the flight plan and flown flight. Unfortunately, the data of D105 and D107a probably does not overlap and something that remains unknown due to limited data availability from the data sources.
-
Temporal Information Limitations of GeoJSON: It is important that the input data contains data referenced by “fusion condition” that are comparable (convertible to the same unit and format). GeoJSON is a good way to do this, because of a standardized geometry encoding. However, GeoJSON lacks a standardized way of encoding temporal information. A possible solution is to transfer the data services to provide input data in JSON-FG format and use the proposed when property. In case any other property should be used for the fusion, additional information about the property is needed as the same data type and unit is required to be able to use it for data fusion. It would be really helpful if all data services that are providing the input data would support the ‘limit’ parameter and the ‘filter’ based on geometry. Data aggregation functions (count, group by) would be helpful as well.
-
Benefits of Storing Raw Data Locally: Being able to persist the input data would enable the fusion service to do more advanced data fusion operations. A possible approach would be that the data services support pub/sub pattern as well. The problem of storage is of course there, but real and independent data fusion is only possible if the data are fully available for any operations or indexing. The indexing is important from a performance point of view. The input data are processed and discarded. No collecting is taking place.
9. International Flight Data Fusion Component
The International Flight Data Fusion Component, developed by Skymantics, was designed to fuse flight plans from FAA and from EUROCONTROL. The component determines whether the other dataset has equivalent information of the flight, and if so, provides the link to the façade where the flight info can be accessed.
The main use case this fusion service covers is for an FAA operator to find what information EUROCONTROL has on a specific FAA flight plan, to find non-conformances, or to complete the available information. For example, for international flights, FAA databases often lack information on time interval and route for inbound flights. Also, note that the methods to calculate the route geometries are different (FAA dataset parses the nasRouteText in route property, whereas EUROCONTROL dataset uses the fusion product provided in ftfmpointprofile object), meaning that geometries will almost certainly differ.
The fusion service can also serve the reverse use case: that is, find what information FAA has on a specific EUROCONTROL flight plan.
9.1. Technical Architecture
As seen in the Figure 18, the Fusion Service was built with an API implementing OGC API — Processes. A script is included which queries the two façades and trying to find the flight in both datasets. APIs are queried on demand. This means there is neither a harvester collecting data nor is there a database to store the data.
Figure 18 — Structure of the International Flight Data Fusion Component
Figure 19 describes the querying process. Input data is only an id (whether GUFI or EUROCONTROL’s flight id). The client does not need to specify whether the input data is a GUFI or a flight id, as the fusion service logic handles the input accordingly.
Once the client has queried and provided a flight id, the fusion service initially seeks for the flight in FAA dataset, and turns to the EUROCONTROL dataset if not found. Once found, important fusion information is retrieved such as airports of departure and arrival, time of departure and arrival and aircraft id. If no time information is found, then other fields that might provide clues are scanned, such as coordination time.
This information is enough to query the other dataset for coincidences. It is important to take into account that the exact departure or arrival times might not match. However, searching for a flight with a specific departure and arrival airports, a specific aircraft id and that is flying at some specific instant is sufficient.
Figure 19 — Fusion Process of the International Flight Data Fusion Component
Taking into account that FAA and EUROCONTROL use different IDs for their flights, these records are not easily fused manually. The fusion service provides a simple process to find the equivalent in the other dataset or to inform that there is no equivalent.
The output is a simple JSON with the requested flight, the dataset the flight was found in (if so), the status of the process, and a list of results. The list of results is typically empty (if no match is found in the other dataset) or with one element (the exact match). However, it is sometimes possible to find several elements matching the criteria, typically due to a bug in the dataset, assigning different ids to different flight plans that correspond to the same flight.
The attributes of each result include the flight id in the corresponding dataset, the name of the dataset, the direct link to the feature (flight), and the date of last update.
9.1.1. Usage
As with any other OGC API — Processes implementation, the method used to launch the process is POST. Therefore, a browser is not a useful interface to test the service. Curl or Postman are good alternatives. Using the POST method and a JSON message with the aforementioned structure in the Body of the request makes the process execute.
Example 1 — Query the EUROCONTROL Flight Plan for FAA’s GUFI 9fc90409-15c9-49b3-a697-7bfc6b6dc29b
curl -X POST "https://aviationapi.skymantics.com/fusion/processes/aviation-fusion/execution/" -H "Content-Type: application/json" -d "{\"inputs\":{\"flight\":\"9fc90409-15c9-49b3-a697-7bfc6b6dc29b\"}}"
Result:
{
"outputs": {
"flight": "9fc90409-15c9-49b3-a697-7bfc6b6dc29b",
"dataset": "FAA",
"status": "FAA flight found in EUROCONTROL dataset",
"results": [
{
"id": "AT02815598",
"dataset": "EUROCONTROL",
"href": "https://aviationapi.skymantics.com/eurocontrol/collections/eu_flight_plans/items/AT02815598",
"lastupdated": "Unknown"
}
]
}
}
Example 2 — Query the FAA Flight Plan for EUROCONTROL’s flightid AT02815598
curl -X POST "https://aviationapi.skymantics.com/fusion/processes/aviation-fusion/execution/" -H "Content-Type: application/json" -d "{\"inputs\":{\"flight\":\"AT02815598\"}}"
Result:
{
"outputs": {
"flight": "AT02815598",
"dataset": "EUROCONTROL",
"status": "EUROCONTROL flight found in FAA dataset",
"results": [
{
"id": "9fc90409-15c9-49b3-a697-7bfc6b6dc29b",
"dataset": "FAA",
"href": "https://aviationapi.skymantics.com/faa/collections/faa_flight_plans/items/9fc90409-15c9-49b3-a697-7bfc6b6dc29b",
"lastupdated": "2021-09-08T05:18:31.394000"
}
]
}
}
9.2. Challenges and Lessons Learned
-
Using OGC API — Processes: The rationale behind this decision was that the component is not providing a feature that is readily available in an existing dataset but launching a process to find a feature among two datasets. This logic fits more naturally in OGC API — Processes rather than in a standard OGC API — Features implementation or any other existing OGC API standard or draft specifications. This decision proved successful, as the Fusion Service was able to carry out its intended purpose.
Even though the input data was simplified to the minimum, it still requires a nested JSON object. This requirement is due to the requirements of OGC API — Processes. This is not a blocker but just a small inconvenience.
For example, the input is:
{
"inputs":
{
"flight": "9fc90409-15c9-49b3-a697-7bfc6b6dc29b"
}
}Instead of:
{ "flight": "9fc90409-15c9-49b3-a697-7bfc6b6dc29b"}
-
Benefits of using the Fusion Service: This component proved useful for performance (automatic process, no need of querying manually), no typo errors (queries and formats are properly encoded), and simplicity (the use of just one interface instead of two façades). If this service were not used, users would have to manually find the details of the flight he is interested to fuse, query the façade of interest entering the values of the properties that can help fuse and in the proper format and then find the complementary flight.
-
Several issues were found with data consistency among the two datasets:
-
Some international flights in the FAA dataset were not found in the EUROCONTROL dataset and vice versa
-
Often, international FAA flights lacked information on time of departure and time of arrival, as well as trajectories outside the US airspace. This is particularly common in inbound flights.
-
Although uncommon, it was found that several GUFIs in the FAA dataset could refer to the same flight.
-
Details on flights might vary from one dataset to another, such as different departure times, arrival times or trajectories. Also, some of the properties are similar but the level of detail and information can be extremely different in others.
-
Among the dozens of properties provided for each flight, the key properties that were consistently sufficient to complete the fusion were just four: departure airport, arrival airport, aircraft id and a time reference of when the flight will be on.
-
10. Aviation Domain Expert Client
The Aviation Domain Expert Client was the component designed to enable end users to request, retrieve, and visualize raw and fused aviation data coming through APIs implementing OGC API Standards.
OGC Member Hexagon developed the Aviation Domain Expert Client. This component demonstrated the usage of APIs based on OGC API Standards for the retrieval and visualization of aviation data.
10.1. Status Quo
The SWIM Data Client was based on LuciadRIA, a solution for the development of geospatial situational awareness applications through the display of information in 3D maps running on browser-based environments. LuciadRIA is part of the Luciad suite of GIS applications focused on aviation, defense and security. Hexagon has participated in previous OGC innovation initiatives exploring and demonstrating solutions for the consumption of SWIM data and the support of OGC services through their suite of Luciad applications.
The desktop version of the Luciad suite, Luciad Lightspeed, is capable of visualizing aviation data. Currently, LuciadRIA does not officially support AIXM and FIXM standards. Prototypes designed to decode AIXM and FIXM data directly in the browser were created for LuciadRIA, but are still not fully compliant with these standards. Previous LuciadRIA versions already supported connecting to OGC services such as WMS, WMTS, and WFS 1.0/2.0.
Last year, during Testbed-16, Hexagon worked with LuciadRIA version 2020.0 and had its first experience connecting to an OGC API — Features endpoint for retrieving AIXM, FIXM and GeoJSON data.
10.2. Functional Overview
Internally, the aviation client uses Hexagon LuciadRIA version 2021.0, which is fully compatible with its previous 2020.0 version used in Testbed-16. LuciadRIA is a JavaScript API that connects to, visualizes and analyzes geospatial data in the browser. LuciadRIA is used mainly for two purposes:
-
Connect to APIs, retrieve and decode data: LuciadRIA can connect to Web Feature Services (WFS), Web Map Services (WMS), Web Map Tile Services (WMTS), and OGC API — Features endpoints. As part of this testbed, Hexagon further improved the implementation of its connector to OGC API — Features in order to accommodate this testbed’s more demanding requirements and to ensure the compatibility with the multiple servers available.
-
Render data on a map: Once decoded, features are drawn on a 2D or 3D map. The features are geometries such as points, lines and polygons that are rendered and styled accordingly.
10.2.1. Visualization
The application displays aviation data through the LuciadRIA 3D map environment. When loaded, collections are listed in a window where users can look them up, focus the map on them, toggle their visibility or remove them from the application. Aviation data can be visualized combined with other non-aviation geospatial data. The capabilities developed in TB-17 were built to be compatible with LuciadRIA’s map and feature visualization through its integration with other OGC services. Users are able to connect to a Web Map Service (WMS) or Web Feature Service (WFS) to retrieve and visualize a preferred base map (such as satellite imagery or road maps), as well as additional non-aviation data such as administrative jurisdictions or natural geographic features.
LuciadRIA has codecs built to process each data encoding. During TB-16, three prototypes were used to process AIXM, FIXM and GeoJSON data respectively. For TB-17, a prototype codec for JSON-FG was designed. This new codec extends the existing GeoJSON format and adds those features that are considered important for aviation — such as multiple CRS support, time dimension, feature type, and additional geometries. The data returned by the server is displayed “as is” in the map. The data is decoded and converted to the LuciadRIA native data model, but all original attributes are preserved including the properties, geometry and native CRS.
The data is styled accordingly to the feature type. If a feature type is recognized, the styles, such as stroke color, fill-in color, text and so forth, are properly defined for each feature type. If a feature type is not recognized, then the feature is still painted on the map but uses a default generic style. For instance, if a feature of type Runway is received, it is styled as a polygon draped on the terrain and colored in a blackish tone. Likewise, if a runway marking is received, it is rendered as white lines, polygons or points that are draped on top of the Runway. For TB-17, new feature types were introduced for which Hexagon added suitable styling.
10.2.2. Displaying Aviation Raw Data
Figure 20 — LuciadRIA Displaying Airspaces Retrieved From D104
LuciadRIA can connect to multiple endpoints and load information about airspaces, airport structures, and NOTAMS. Features are visualized in the LuciadRIA 3D map environment, as seen in Figure 20, and its properties can be explored by selecting them on the map, right-clicking on them and selecting the option to view properties.
Figure 21 — LuciadRIA Displaying NOTAMs Retrieved From D104
NOTAMS are displayed on the map in the form of markings. As seen in Figure 21, a time control tool allows users to navigate throughout a given timespan. Users can move forward or backward in time and select different timespans, and NOTAMs belonging to the selected timeframe appear accordingly on the map based on the data loaded. Users can also explore feature properties of each NOTAM by right clicking them and selecting “show properties” from the context menu.
Figure 22 — LuciadRIA Displaying STDDS Flight Data Retrieved From D105
Flight data can be retrieved from D105 and D107a. For D105, a new form was created in LuciadRIA to enable users to connect to the API, select whether to retrieve data from SFDPS, STDDs, or TFMS, search flight data from different airports and display it (as seen on Figure 22).