openSkies.knit
Date: 2026-01-20

# Contents

openSkies

Rafael Ayala, Daniel Ayala, Aleix Sellés, Lara Sellés Vidal

October 14, 2020

# 1 Introduction

OpenSky (https://opensky-network.org/) provides free access to different types of flight and aircraft information. Flight information includes lists of aicrafts that landed at or departed from a specific airport and flights registered during a certain time interval. It is also possible to retrieve status informations received from aircraft transponders, including positional information, origin and destination.

openSkies provides an R interface to the OpenSky REST API, which aims to automate and facilitate the retrieval and utilization of the information provided by OpenSky.

# 2 Installation instructions

Before installing openSkies, make sure you have the latest version of R installed. To install openSkies, start R and enter:

    install.packages("openSkies")

Once installed, the package can be loaded as shown below:

    library(openSkies)

# 3 Accessing flight information

Information regarding flights can be accessed in four ways: by airport of arrival, by airport of departure, by aircraft and by time interval. For the first two access modes, it is necessary to provide the ICAO code of the airport. This can be obtained in websites such as https://www.world-airport-codes.com/. Some examples are “EDDF” for Frankfurt International Airport (Germany), or “LEBL” for Barcelona Airport (Spain).

For retrieval of flights by aicraft, it is necessary to provide the ICAO 24-bit address of the aircraft. This can be obtained from multiple sources, such as https://www.airframes.org/. For example, 346190 corresponds to an ATR 72-600 of Air Nostrum with registration EC-NCD.

The function getAirportArrivals() lists all flights that arrived at a given airport.

    # Get all flights that arrived at Frankfurt International Airport on the 29th
    # of January, 2018 between 12 PM and 1 PM, local time.

    getAirportArrivals(airport = "EDDF", startTime = "2018-01-29 12:00:00", endTime = "2018-01-29 13:00:00",
        timeZone = "Europe/Berlin")

The function getAirportDepartures() lists all flights that arrived at a given airport.

    # Get all flights that departed from Barcelona Airport on the 12th of October,
    # 2020 between 5 AM and 7 AM, local time.

    getAirportDepartures(airport = "LEBL", startTime = "2020-10-12 05:00:00", endTime = "2020-10-12 07:00:00",
        timeZone = "Europe/Madrid")

The function getAircraftFlights() lists all flights performed by a given aircraft.

    # Get all flights registered for the aircraft with ICAO 24-bit address 346190
    # during the 26th of July, 2019.

    getAircraftFlights("346190", startTime = "2019-07-26 00:00:00", endTime = "2019-07-26 23:59:59",
        timeZone = "Europe/Madrid")

The function getIntervalFlights() lists all flights registered during a given time interval, by any aircraft. It should be noted that such type of requests will return a large number of results depending on the length of the time interval.

    # Obtain a list with information for all the flights registered during the 16th
    # of November, 2019 between 9 AM and 10 AM, London time.

    flights <- getIntervalFlights(startTime = "2019-11-16 09:00:00", endTime = "2019-11-16 10:00:00",
        timeZone = "Europe/London")

    # Count the number of registered flights.

    length(flights)

# 4 Authentication

While some data can be accessed anonymously, authenticating as a registered user offers access to additional data and higher rate limits. The OpenSky Network supports two authentication methods:

OAuth2 Client Credentials (Recommended): This is the recommended method for new users. You will need a `clientId` and `clientSecret`, which can be obtained from your OpenSky Network account settings.

    # Example using OAuth2 client credentials authentication
    getAirportArrivals(airport = "EDDF", startTime = "2018-01-29 12:00:00", endTime = "2018-01-29 13:00:00",
        timeZone = "Europe/Berlin", clientId = "your_client_id", clientSecret = "your_client_secret")

Legacy Username/Password: This method is still supported for existing users but is being phased out. New users should use the OAuth2 method instead.

    # Example using legacy username/password authentication
    getAirportArrivals(airport = "EDDF", startTime = "2018-01-29 12:00:00", endTime = "2018-01-29 13:00:00",
        timeZone = "Europe/Berlin", username = "your_username", password = "your_password")

# 5 Accessing aircraft state vectors

State vectors contain status information sent by the transponder of an aircraft. This includes position, altitude, country of origin, speed, and other types of data. While it is possible to perform these requests anonymously, authenticating as a registered user offers access to additional data (see manual pages for details).

It is possible to obtain a set of state vectors corresponding to information received at a specified time point, filtered by different criteria (such as aircraft or location).

    # Obtain a list with the state vectors for all aircrafts currently flying over
    # an area covering Switzerland.

    getSingleTimeStateVectors(minLatitude = 45.8389, maxLatitude = 47.8229, minLongitude = 5.9962,
        maxLongitude = 10.5226)

    # Obtain the state vector for aircraft with ICAO 24-bit address 403003 for the
    # 8th of October, 2020 at 16:50 London time.

    getSingleTimeStateVectors(aircraft = "403003", time = "2020-10-08 16:50:00", timeZone = "Europe/London")

It is also possible to retrieve a time series of state vectors for a specific aircraft. It should be noted that this type of requests can take a relatively long time to finish if a large amount of data points are requested.

    # Obtain a time series of state vectors for the aircraft with ICAO 24-bit
    # address 403003 for the 8th of October, 2020 between 16:50 and 16:53 (London
    # time), with a time resolution of 1 minute.

    getAircraftStateVectorsSeries("403003", startTime = "2020-10-08 16:50:00", endTime = "2020-10-08 16:52:00",
        timeZone = "Europe/London", timeResolution = 60)

# 6 System of R6 classes for aviation data

openSkies also aims to establish standard data structures for the analysis of aviation data. To that extent, a set of R6 classes is defined. The classes defined so far include openSkiesAirport, openSkiesAircraft, openSkiesFlight, openSkiesRoute, openSkiesStateVector and openSkiesStateVectorSet. For a detailed description of each class and their available methods, please check the manual of the package.

# 7 References

# Appendix

https://opensky-network.org/

https://www.world-airport-codes.com/

https://www.airframes.org/