Structure of ASTERIX data

ASTERIX data contains a wide range of ATM Surveillance data types. The data types are grouped into data categories. Data of category 1 for instance contains 'Monoradar Data Target Reports' data. ASTERIX data is organized around these categories. Figure 1, “ASTERIX data structure” shows the ASTERIX data structure.

ASTERIXDataStructure
Figure 1. ASTERIX data structure

As shown, data is organized in data blocks. A data block contains data for one category. Different data blocks contain data for the same or different categories.

A data block contains a number of data records for the category. The content of a data record is described in a User Application Profile (called UAP). A UAP describes a group of data that belongs together and that has the same timestamp. Each category has a number of UAPs of which only one applies to a specific data record. The types of data modeled by the UAP that are supported by the ASTERIX decoders are explained in Concepts modeled by ASTERIX data. Most categories have only one UAP. Category 244 for instance has one UAP that describes track data.

In ASTERIX the smallest unit of information for a category is described in a data item. A data item can for instance describe the location of a track, in Cartesian coordinates. A UAP is defined by an ordered list of data items. A data record for a category can contain information for all or part of the data items. Different UAPs of the same category can contain the same data items.

In ASTERIX a simple value is described in a data field. A data field can for instance describe the x-coordinate of a location, in Cartesian coordinates. A data item is defined by one or more data fields, possibly repeated a number of times.

Data items can also be nested, so contain other data items.

Concepts modeled by ASTERIX data

ASTERIX data contains a wide range of ATM Surveillance data types. The most important concepts are discussed in this section. They correspond to the types of data that are currently decoded by the LuciadLightspeed ASTERIX decoders.

Track

Conceptually a track is a point, meaning a location, together with a timestamp and a heading, meaning a direction. A track is used to represent the position and heading of an aircraft at a certain point in time, for example. On a map, a track is typically represented as an icon with an indication of the heading, a rotated icon for example, a label containing identification, such as a callsign, and possibly other indications, for example, history or speed.

tracks
Figure 2. Map showing a track layer

Figure 2, “Map showing a track layer” shows a map with several tracks at a certain point in time. On the map tracks are represented by black squares. The directions of the tracks are indicated by the yellow lines. It represents the situation in the air at a particular point in time.

Trajectory

Conceptually a trajectory is a sequence of tracks. It is ordered in ascending order of the tracks' timestamps. A trajectory is used to represent an aircraft’s path to fly from point A to point B, for example. In that case, all tracks in the trajectory represent a position of the same aircraft, and the sequence of tracks is ordered in ascending time.

A non-empty trajectory has a begin time and an end time. The begin time is the timestamp of its first track; the end time is the timestamp of its last track.

On a map, a trajectory is typically represented as a polyline.

trajectories
Figure 3. Map showing a trajectory and track layer

Figure 3, “Map showing a trajectory and track layer” shows a map with a layer of trajectories (white polylines) and a layer of tracks on top.

Plots

Conceptually a plot is a point, meaning a location, together with a timestamp. A plot is used to represent the position of an aircraft at a certain point in time. The difference between plots and tracks is that plots are not linked to each other through trajectories. Plots are not ordered, and there is no relation between them in the data. Visually, plots can still represent the path of an aircraft over time. To indicate that a plot is different from tracks, a plot is typically represented as an icon.

plots
Figure 4. Map showing a few plots as red circles.

Figure 4, “Map showing a few plots as red circles.” shows a map with a layer of plots (red circles).

Weather Pictures

Conceptually a weather picture is a set of shapes, together with a time range. An ASTERIX weather picture is used to represent precipitation zones during a certain period of time. A precipitation zone is a set of shapes representing the geographic location of the zone. The zone also specifies the intensity level of the precipitation.

pictures
Figure 5. Map showing a weather picture.

Figure 5, “Map showing a weather picture.” shows a weather picture with line shapes on a map.

ASTERIX category 8 also allows weather pictures without time information.

LuciadLightspeed classes

This section describes the LuciadLightspeed classes used to model ASTERIX data, and their relationship with standard LuciadLightspeed classes and interfaces. The relationship between ASTERIX categories and UAPs and LuciadLightspeed classes is discussed in LuciadLightspeed classes for ASTERIX category and UAP. All ASTERIX classes are part of the package com.luciad.format.asterix.

TLcdASTERIXTrajectory

A TLcdASTERIXTrajectory models a trajectory: it models a sequence of tracks, in ascending order of time. For memory efficiency reasons the class TLcdASTERIXTrajectory has no methods to construct or retrieve individual track objects. All trajectory and individual track information can be retrieved through the following interfaces and methods implemented by the class TLcdASTERIXTrajectory:

  • The class TLcdASTERIXTrajectory implements com.luciad.shape.ILcdPointList, where the individual points are defined by the positions of the tracks. Points and corresponding tracks are ordered in ascending order of time.

  • The class TLcdASTERIXTrajectory implements the ILcdDataObject unified domain model interface. The properties of a trajectory can be retrieved using this interface. All trajectories have at least one property: their unique id. This id links all the tracks of the trajectory.

    Depending on the UAP of the data, some trajectories may have more properties. The ASTERIX data decoding guide describes which properties are available.

  • The methods getBeginTime and getEndTime can be used to retrieve the valid time interval of the trajectory.

  • The absolute time associated with a particular track can be retrieved by using the getTime( int aTrackIndex ) method. The argument trackIndex is the index of the track in the trajectory seen as an ILcdPointList. If the time for a particular track is not known -1 is returned.

  • The direction of a track can be retrieved by the getTrackHeading( int aTrackIndex ) method. If no direction is available Double.NaN is returned.

  • All ASTERIX data related to the trajectory is available through the properties of the tracks. They can be retrieved using the getTrackValue( int aTrackIndex, TLcdDataProperty aProperty ). The argument aProperty is the property of which the value should be retrieved. The exact mapping of the ASTERIX data fields to properties is discussed in the ASTERIX data decoding guide.

  • The method getIndexForTimeStamp( long aTimeStamp ) can be used to get the index of the track in the trajectory that corresponds best to the given timestamp. When the timestamp could not be located -1 is returned.

TLcdASTERIXTrack

A TLcdASTERIXTrack models a track by representing a TLcdASTERIXTrajectory at a specific point index.

All track and associated trajectory information can be retrieved through the following interfaces and methods implemented by the class TLcdASTERIXTrack:

  • The class TLcdASTERIXTrack extends the class TLcdLonLatHeightPoint. The point defines the position of the track.

  • The class TLcdASTERIXTrack implements the ILcdDataObject unified domain model interface. The properties of a track can be retrieved using this interface. The mapping of ASTERIX data fields to data object properties is discussed in the ASTERIX data decoding guide.

    Some of the properties of a track can be changed. You can change the properties by calling the setValue method of the track. The track properties that can be changed are the properties that have a corresponding property on its trajectory, as described in TLcdASTERIXTrajectory.

  • The direction of the track can be retrieved by the getOrientation() method. It corresponds to TLcdASTERIXTrajectory.getTrackHeading.

  • The trajectory associated with the TLcdASTERIXTrack can be retrieved by calling the getTrajectory method on the TLcdASTERIXTrack.

  • The method isActive() allows to check if a track is active. A track is active if its timestamp lies within the TLcdASTERIXTrajectory.getBeginTime and TLcdASTERIXTrajectory.getEndTime.

  • The setTrajectoryPointIndex(aTrajectoryPointIndex ) sets the index for which this track represents the trajectory. The properties of the track always correspond to this index. Specify an index -1 to mark a track as inactive. Note that the method TLcdASTERIXTrajectory.getIndexForTimeStamp(long aTimeStamp) can be used to retrieve the index for a given time value.

  • Use the void updateForIndex( int aTrajectoryPointIndex ) method to update the state of the track so that it reflects the state of the trajectory at the given index. It is similar to the void setTrajectoryPointIndex( int aTrajectoryPointIndex ) method except that it also changes the location of the track.

TLcdASTERIXPlot

A TLcdASTERIXPlot models a plot at a specific location for a specific time instance.

All plot information can be retrieved through the following interfaces and methods implemented by the class TLcdASTERIXPlot:

  • The class TLcdASTERIXPlot extends the class TLcdLonLatHeightPoint. The point defines the position of the track.

  • The class TLcdASTERIXPlot implements the ILcdDataObject unified domain model interface. You can retrieve the properties of a plot using this interface. The mapping of ASTERIX data fields to data object properties is discussed in the ASTERIX data decoding guide.

  • The direction of the plot can be retrieved with the getOrientation() method.

  • The class TLcdASTERIXPlot implements the ILcdTimeBounded interface. This interface can be used to query the timestamp of the plot detection by a radar.

TLcdASTERIXWeatherPicture

A TLcdASTERIXWeatherPicture models a weather picture. A TLcdASTERIXWeatherPicture contains precipitation zones.

All weather picture information can be retrieved through the following interfaces and methods implemented by the class TLcdASTERIXWeatherPicture:

  • The class TLcdASTERIXWeatherPicture implements the ILcdDataObject unified domain model interface. You can retrieve the properties of a picture using this interface. The mapping of ASTERIX data fields to data object properties is discussed in the ASTERIX data decoding guide.

  • The class TLcdASTERIXWeatherPicture implements the ILcdTimeBounded interface. This interface can be used to query the time range of the weather picture. If the data does not contain time information for the picture, the time range is undefined.

  • The class TLcdASTERIXWeatherPicture implements the ILcdShapeList interface. This interface can be used to retrieve the precipitation zones associated with this picture as ILcdShape instances.

  • The number of precipitation zones can be retrieved through the method getPrecipitationZonesCount().

  • You can retrieve a particular precipitation zone through the method getPrecipitationZone(int aIndex). There is no specific ordering.

TLcdASTERIXPrecipitationZone

A TLcdASTERIXPrecipitationZone models a set of geometries with the same precipitation intensiy.

You can retrieve all weather picture information through the following interfaces and methods, implemented by the class TLcdASTERIXPrecipitationZone:

  • The class TLcdASTERIXPrecipitationZone implements the ILcdDataObject unified domain model interface. You can retrieve the properties of a picture using this interface. The mapping of ASTERIX data fields to data object properties is discussed in the ASTERIX data decoding guide.

  • The class TLcdASTERIXPrecipitationZone implements the ILcdShapeList interface. This interface can be used to retrieve the shapes representing the zone.

  • The intensity level of the precipitation zone can be retrieved through the method getIntensity().

LuciadLightspeed classes for ASTERIX category and UAP

ASTERIX categories are modeled by the abstract class ALcdASTERIXCategory, all associated UAPs by the abstract class ALcdASTERIXUserApplicationProfile. Supported categories have a counterpart class that is an extension of ALcdASTERIXCategory. Their UAPs extend from ALcdASTERIXUserApplicationProfile.

The class ALcdASTERIXCategory makes following methods available for all categories:

  • The getCategoryNumber() allows to retrieve the number of the category.

  • The getUAPCount and getUAP(int aIndex) are general methods to retrieve the UAPs associated with a category. Sub classes may offer more specific methods.

Make sure to use the equals method for comparing ALcdASTERIXCategory objects and ALcdASTERIXUserApplicationProfile objects.

Each supported category is represented by a class named TLcdASTERIXCategoryN where N is the category number. These category classes offer a number of extra methods and constants on top of the ALcdASTERIXCategory:

  • All category classes have clear methods to retrieve the associated UAPs. If only one UAP is associated the method getUAP() is available. If more then one UAP is associated a dedicated method is available for each UAP type.

    Currently, the only category class that uses specific UAPs is Category 1. To retrieve the UAPs for this category, use either the getTrackUAP() or the getPlotUAP() methods to get the track or the plot UAP respectively.

  • For each category and UAP, the ASTERIX data is described by the data items in the UAP. Data items are mapped to properties of domain objects in LuciadLightspeed . This is described in detail in the ASTERIX data decoding guide. Since categories can have many data items, and data items can have a complex structure, many data item properties and sub-properties are needed to represent all data items of a category. To facilitate working with these properties, all categories define constants for the display names of all data item properties and sub-properties. You can derive the property names from these display names by using the TLcdASTERIXDataTypes.retrievePropertyNameForConstant(String) method. The ASTERIX data decoding guide explains the naming convention and usage for these constants.