An ADS-B feed consists of a series of latitude, longitude and altitude points, without any "start" or "end" markings as such.

Using this data, which can contain arbitrary gaps and errors, what's the most reliable way to determine when an aircraft has landed or taken off at an airport?

Update: I'm looking at preprocessed feeds in VRS's AircraftList format, which on closer inspection has a boolean "Gnd" field. (Note that there's no guarantee that any but the most basic data fields will actually be available in practice.)

  • 2
    $\begingroup$ I would use when the altitude is +/- 100 feet of the field elevation and its speed has dropped below 40 knots. You could use ellipsoid height if you want to make it simpler but you'll probably have some issues in high altitude areas. $\endgroup$
    – Ron Beyer
    Jun 30, 2016 at 12:02

1 Answer 1


It depends on the type of ADS-B feed you have.

On the lowest level, the messages transmitted from the aircraft, usually contain information about the air/ground status of the aircraft1. When the aircraft is airborne, Airborne Position Message are transmitted (types 9 - 18 or 20 - 22) for position and altitude. Airborne velocity is in message type 19. On the surface, message types 5-8 are used to transmit both surface position and movement. So by looking at the raw messages, the transition between airborne and surface type indicates landing, vice versa in indicates take-off.

This is accurate for most larger aircraft, smaller aircraft and helicopters don't always have a weight-on-wheel switch or similar device that is used to toggle the air/ground status. In these case speed may be used as trigger which is a less accurate indicator.

If you don't have access to the raw messages, you have to find an other way to do it.

Typically ADS-B feeds for air traffic control consist of ASTERIX 021 reports. If you have an ASTERIX category 021 data stream, the air/ground status of the aircraft is included in Item I021/040, first extend, bit 7 - Ground Bit Setting (GBS).

If you have a stream with only latitude, longitude and altitude, then I would try to use the altitude field. On the surface there is no altitude transmitted (it is not in message type 5-8, the bits are used for surface movement), so if the altitude is no longer there, you can expect the aircraft to be on the ground. However, this depends of course on the implementation of the ADS-B decoder; it may just give stale altitude data instead of blanking the altitude on the ground.

If you don't have good detection near the landing zone, you can try to extrapolate the altitude graph from the final approach section and based on that estimate when / where the landing would be. You may want to adjust for the flare if you need to.

1I am assuming 1090ES ADS-B here which is the defacto global standard; UAT and VDLm4 technology varieties of ADS-B also contain air/ground status but in a different manner.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.