Tractrix for QGIS manual

Version 0.2.0QGIS 3.34 – 4.xAvailable

Tractrix for QGIS — the OpenAirside plugin — adds ten Processing algorithms that simulate aircraft and ground-vehicle manoeuvres on your map layers and check them against ICAO, FAA or EASA clearances.

On this page

Installation

Requirements

  • QGIS 3.34 LTR or later, including QGIS 4.x, built with Qt5 or Qt6.
  • Windows, macOS or Linux. No additional Python packages are required: the engine is pure Python.

Install from ZIP

  1. Download the plugin ZIP from the download centre or Downloads (account required).
  2. In QGIS choose Plugins → Manage and Install Plugins → Install from ZIP.
  3. Select the ZIP and press Install Plugin. QGIS may warn that the plugin is experimental; that flag stays until version 1.0.

If you build the ZIP yourself from a source checkout, zip the openairside/ folder on its own so that the archive contains openairside/metadata.txt at its top level.

Install with the script (macOS)

With QGIS closed, run tools/install.sh from a checkout of the repository. It copies openairside/ into the QGIS 4 default profile and enables the plugin. Set QGIS_PROFILE to install into another profile.

Where the tools appear

  • Processing → Toolbox → Tractrix, in the groups Aircraft, Airside design, Stands and aprons, Ground vehicles and Libraries. (The provider ID stays openairside.)
  • The Tractrix menu under Plugins, with every tool.
  • The Tractrix toolbar, with the first five tools.

Update and uninstall

Install a newer ZIP over the old one to update. To remove the plugin, use Plugins → Manage and Install Plugins → Installed → Tractrix for QGIS (OpenAirside) → Uninstall Plugin.

Concepts

Direction of travel
Draw every path line in the direction the aircraft or vehicle moves. For pushback, draw from the parked position in the direction the aircraft moves backwards.
Working CRS
Calculations are done in metres. If the input layer is in a projected CRS with metre units it is used as is; otherwise (for example EPSG:4326) the tool works in the local UTM zone and writes outputs in that CRS.
Tracking point
The point of the aircraft that follows the line: the nose gear, the cockpit (pilot's eye, the ICAO and FAA design assumption), or a custom point ahead of the main gear. The main gear follows the tractrix of the line.
Standard and context
The clearance added around the swept envelope depends on the standard (ICAO, FAA, EASA or none) and the context (taxiway, taxilane or stand). See the standards reference.
Clearance versus edge margin
The clearance is a buffer around the whole aircraft envelope, for wingtip-to-object checks. The edge margin is the distance from each outer main-gear tyre to the pavement edge, checked against the wheel-to-edge clearance when you give a pavement layer.
Run
One aircraft on one line part. Every output feature carries a run label such as A320 / path 3, so group paths can be told apart and separation can be checked between runs.

Common outputs

The manoeuvre tools — aircraft path, pushback / towing and GSE path — write the same five optional layers, plus an optional HTML report and a JSON summary. Untick an output in the dialog to skip it; Poses is off by default.

Table 1 Output layers of the manoeuvre tools and their fields.
Output (ID)GeometryFields
Swept and clearance envelopes (ENVELOPES)MultiPolygonrun, element, unit, area_m2, clearance_m, note
Path elements (TRACKS)LineStringrun, element, unit, length_m
Footprints, animated (FOOTPRINTS)MultiPolygonrun, unit, step, s_m, time, heading, steer_deg, height_m
Poses (POSES)Pointrun, aircraft, step, s_m, time, heading, steer_deg, steer_limit, steer_ok, ref_point
Issues (ISSUES)MultiPolygonrun, kind, value, limit, s_m, note
HTML report (REPORT)FileOptional; not created by default
Summary (SUMMARY)StringJSON list, one object per run

Element values

Envelopes use element = swept_envelope, clearance_envelope, main_gear_swept, nose_gear_swept, engine_swept, tug_swept or vehicle_swept. Tracks use the key-point name: nose, cockpit, nose_gear, main_gear_centre, main_gear_left_outer, main_gear_right_outer, wingtip_left, wingtip_right, tail, tailplane_tip_left/_right and engine_N_exhaust.

Issue kinds

Table 2 Values of kind in the Issues layer.
kindMeaningvalue / limit
steering_limitThe nose-wheel (or steering) angle needed to follow the line exceeds the limit. Explained.Worst angle / limit, degrees
edge_marginAn outer main-gear tyre comes closer to the pavement edge than the wheel-to-edge clearance. Explained.Margin / required margin, metres
conflict_contactThe swept envelope overlaps an obstacle.Overlap area, m² / 0
conflict_clearanceAn obstacle lies inside the clearance envelope.Distance / clearance, metres

The dialog log prints one line per run with the maximum steering angle, exceedances, minimum edge margin, contacts and clearance infringements.

Tools reference

Each tool is listed with its Processing ID, for use in scripts and models. Parameter IDs are shown in capitals.

Aircraft path simulation (taxi / group path)

openairside:aircraft_path · group Aircraft

Simulates one or more aircraft following each line of the path layer. The tracking point stays on the line; the main gear follows the tractrix. Select several aircraft for a group path; an aircraft field on the path layer overrides the selection line by line.

ParameterDescriptionDefault
PATHPath lines, drawn in the direction of travelrequired
AIRCRAFTAircraft; select several for a group pathA320
AIRCRAFT_FIELDField on the path layer holding an aircraft ID or ICAO type (e.g. A320, B738, B77W); optional—
TRACKINGTracking point: nose gear, cockpit (ICAO/FAA cockpit over centreline), or custom pointNose gear
TRACK_DISTCustom tracking distance ahead of the main gear, m (min 0.5)20.0
SPEEDSpeed for the animation time, km/h15.0
STEER_LIMITNose-wheel steering limit override, degrees; 0 uses the library value0
STANDARDClearance standard: ICAO, FAA, EASA, or None / custom distanceICAO
CONTEXTClearance context: taxiway, taxilane or standTaxiway
CLEARANCEClearance distance override, m; −1 takes it from the standard−1
PAVEMENTPavement polygons for the edge-margin check; optional—
OBSTACLESObstacles: buildings, equipment, parked aircraft (any geometry); optional—
FOOTPRINT_SPACINGDistance between footprints, m (min 0.5)10.0
ENVELOPES … REPORTThe common outputssee above

Tips. For taxiway design use cockpit tracking; for stand lead-in lines use nose-gear tracking. Checks start once the tracking point is on the line, so the first metres of travel do not raise false edge-margin issues. The summary gives, per run, the maximum steering angle, exceedances, minimum edge margin, obstacle contacts and clearance infringements.

Pushback / towing simulation

openairside:pushback_tow · group Aircraft

Pushback: draw the path from the parked position in the direction the aircraft moves (backwards). The main-gear centre follows it and the nose-wheel angle follows from the path curvature; the tug sits on the nose gear (towbarless) or at the end of the towbar. Tow forward: the tug's front axle follows the path and the towbar, nose gear and aircraft follow as an articulated train.

ParameterDescriptionDefault
PATHPushback / tow pathrequired
AIRCRAFTAircraftA320
MODEPushback (aircraft reverses, main-gear centre follows the path) or tow forward (tug leads)Pushback
TUGTug from the vehicle library (pushback tractors)first tug
TOWBARUse a towbar; untick for towbarlessticked
TOWBAR_LENGTHTowbar length, m (min 1)6.0
TOW_LIMITTowing steering limit, degrees (10–120)90
SPEEDSpeed, km/h5.0
STANDARDClearance standardICAO
CONTEXTClearance contextStand
CLEARANCEClearance override, m; −1 = from standard−1
PAVEMENT, OBSTACLESOptional check layers—
FOOTPRINT_SPACINGDistance between footprints, m5.0

Tips. The drawn line is smoothed over ±3 m, so small digitising kinks do not create steering spikes. Exceedances of the towing limit are written to the Issues layer; the tug and towbar appear in the envelopes as tug_swept.

Turning radii and 180° turn

openairside:turning_analysis · group Aircraft

Steady-turn radii for each aircraft at a nose-wheel angle: main-gear centre, inner and outer main-gear tyre edges (R1, R2), nose gear (R3), wingtip (R4), nose (R5) and tail (R6), plus the minimum pavement width for a 180° turn. Optionally draws the 180° turn at a point.

ParameterDescriptionDefault
AIRCRAFTAircraft (several allowed)A320
STEERNose-wheel steering angle, degrees (0–89); 0 = the library maximum0
LOCATIONPoint at which to draw the 180° turn; optional—
HEADINGInitial heading, degrees from north0
TABLETurning radii table (no geometry)created
GEOMETRY180° turn geometry: swept envelope, main-gear swath and radius circlescreated

Table fields: aircraft, name, steer_deg, steer_limit, R_main_gear_centre, R1_inner_mlg_edge, R2_outer_mlg_edge, R3_nose_gear, R4_wingtip, R5_nose, R6_tail, R_max, min_width_180, source. Geometry fields: aircraft, element, radius_m.

Jet blast contours

openairside:jet_blast · group Aircraft

Velocity contours behind every engine of the aircraft at each input point — stand positions, or the Poses output of a path simulation to sweep the blast along a route — plus engine intake hazard areas. Calibrated to ICAO Doc 9157 Table A2-1; indicative only (see methodology).

ParameterDescriptionDefault
POINTSAircraft positions (points)required
HEADING_FIELDNumeric field with the aircraft heading, degrees from northheading
AIRCRAFT_FIELDField with the aircraft type; optionalaircraft
AIRCRAFTAircraft when there is no aircraft fieldA320
REFERENCEThe point represents the main-gear centre or the nose gearMain-gear centre
THRUSTThrust levels: idle, breakaway, take-off (several allowed)Breakaway
VELOCITIESContour velocities, km/h, comma separated56,80,161
EVERYUse every Nth point (thin a dense pose layer)1
DISSOLVEDissolve contours per velocity (blast along a path)off
INTAKEAdd engine intake hazard areason
OUTPUTJet blast contours (polygons)created

Output fields: aircraft, element, thrust, velocity_kmh, velocity_mph, velocity_ms, length_m, model. element is jet_blast or intake_hazard; model records whether the type is calibrated individually or with the fleet factor.

Stand design (lead-in, parking, clearances, conflicts)

openairside:stand_design · group Stands and aprons

Each lead-in line is a stand. Draw it in the direction of taxi-in, ending at the stop position of the tracking point. The aircraft taxis in along the line; the final pose is the parked position.

ParameterDescriptionDefault
LEADINLead-in lines; the end is the stop positionrequired
STAND_FIELDStand name field; optional—
AIRCRAFT_FIELDAircraft field; optional—
AIRCRAFTDesign aircraft when there is no aircraft fieldA320
TRACKINGThe lead-in line is followed by the nose gear or the cockpitNose gear
STANDARDClearance standardICAO
CLEARANCEClearance override, m; −1 = from standard−1
OBSTACLESObstacles; optional—
STANDSStand footprints and clearances (polygons)created
STOPLINESStop bars (lines)created
PARKEDParked positions (points)created
CONFLICTSStand conflicts (polygons)created

The stand clearance zone uses Annex 14 3.13.6 — 3 / 3 / 4.5 / 7.5 / 7.5 / 7.5 m for codes A–F — the FAA ADG taxilane wingtip clearance, or your override. Conflicts are raised when a stand's clearance zone (stand_clearance) or its entry envelope (taxi_in_clearance) reaches another stand's parked aircraft, or any obstacle (obstacle). The Parked positions layer, with heading, feeds straight into Jet blast contours.

Taxiway fillet / required pavement

openairside:fillet_design · group Airside design

For each centreline drawn through the turn and each design aircraft, the cockpit (or nose gear) follows the centreline and the outer main-gear tyres sweep a swath. Required pavement = swath + wheel-to-edge margin, united with the nominal straight taxiway width. Fillet = required pavement minus the existing pavement (or minus the nominal taxiway if no pavement layer is given).

ParameterDescriptionDefault
CENTRELINETaxiway centrelines through the turnrequired
AIRCRAFTDesign aircraft group (several allowed)A320
STANDARDICAO / EASA (Doc 9157 Table 1-1) or FAA (TESM by TDG)ICAO / EASA
TRACKINGPoint on centreline: cockpit (ICAO/FAA design method) or nose gearCockpit
MARGINWheel-to-edge margin override, m; −1 = standard−1
WIDTHNominal taxiway width override, m; 0 = standard0
PAVEMENTExisting pavement; optional—
OUTPUTRequired pavement and fillets (polygons)created
TRACKSMain-gear outer tyre tracks; optionalcreated

Output fields: line, aircraft, element, margin_m, width_m, area_m2, max_track_in_m, with element = required_pavement, nominal_taxiway or fillet. The summary reports the maximum main-gear track-in from the centreline.

Envelope separation check

openairside:envelope_separation · group Airside design

Minimum distance between every pair of envelopes that belong to different runs — for example the swept envelopes of two aircraft on parallel taxiways. Pairs closer than the required separation are flagged, and the shortest connecting line is written for each pair.

ParameterDescriptionDefault
ENVELOPESEnvelope polygons (typically an Envelopes output)required
RUN_FIELDField identifying the runrun
ELEMENT_FIELDElement field; optionalelement
REQUIREDRequired separation, m7.5
OUTPUTSeparation linescreated

Output fields: run_a, run_b, distance_m, required_m, ok.

GSE / vehicle path simulation

openairside:vehicle_path · group Ground vehicles

Swept path of a ground support or airside vehicle whose front (steered) axle follows each line. Trailers follow as an articulated train. Checks the steering lock and the articulation angle between units, with a jack-knife warning above 90°.

ParameterDescriptionDefault
PATHVehicle path (front axle)required
VEHICLEVehicle from the libraryfirst vehicle
SPEEDSpeed, km/h15.0
STEER_LIMITSteering lock override, degrees (0–90); 0 = library value0
CLEARANCEClearance around the vehicle, m0.5
PAVEMENT, OBSTACLESOptional check layers—
FOOTPRINT_SPACINGDistance between footprints, m3.0

The library contains towbar, towbarless and remote-controlled tugs, a baggage tractor with four dollies, a belt loader, a catering high-loader, a hydrant dispenser, a fuel bowser semi-trailer, a lavatory/water truck, passenger stairs, an ambulift, an apron bus, an ARFF vehicle and a follow-me car.

Aircraft library table and vehicle library table

openairside:aircraft_library · openairside:vehicle_library · group Libraries

Export the libraries as tables without geometry. The aircraft table can be filtered by ICAO code letters (CODES, default A–F) and by a text match on manufacturer, name or ICAO type (MATCH).

Aircraft fields: id, icao_type, manufacturer, name, engine_class, n_engines, engine_layout, wingspan, length, tail_height, wheelbase, cmg, mgw, mtow_kg, icao_code_letter, adg, tdg, wtc, max_steer_deg, steer_source, source. Vehicle fields: id, name, category, length, width, wheelbase, front_overhang, max_steer_deg, n_trailers, source.

Check steer_source before relying on a steering limit: it cites the manufacturer document, or says that a default was used.

Demo project walkthrough

Open sample_data/demo_airport.qgz from a checkout of the repository. It contains a taxiway with two 45 m turns and no fillets, an apron with four stands (S2 and S3 deliberately too close for code C), a pushback route and a baggage-train route, and the outputs of every tool in sample_data/demo_outputs/.

  1. Taxi an A320. Run Aircraft path simulation on the taxiway centreline with cockpit tracking and the pavement layer. The minimum edge margin is 4.39 m, above the 3 m required: no issues.
  2. Taxi a B777-300ER on the same line. The outer main gear leaves the unfilleted pavement by 6.6 m and two edge-margin breaches are flagged. The turns need fillets.
  3. Design the fillets. Run Taxiway fillet / required pavement with both aircraft. The maximum track-in is 2.63 m for the A320 (2.7 m by hand) and 11.6 m for the B777-300ER; the fillet polygons show the pavement to add.
  4. Check the stands. Run Stand design on the lead-in lines. S2 and S3 are 0.18 m apart where code C requires 4.5 m: a conflict is written.
  5. Push back. Run Pushback / towing on the pushback route. The maximum nose-wheel angle is 17.8°, against 17.5° from the analytic solution.
  6. Jet blast. Run Jet blast contours on the Parked positions output, breakaway thrust. The A320's 56 km/h contour reaches 48 m behind the tail, as in ICAO Doc 9157.
  7. Baggage train. Run GSE / vehicle path on the baggage route with the tractor and four dollies, and inspect the articulation angles.

Animating with the Temporal Controller

Footprint layers are temporal: each footprint has a time timestamp computed from the distance travelled and the speed you entered. The layer is configured automatically (single field, instantaneous, not accumulated).

  1. Open View → Panels → Temporal Controller.
  2. Choose Animated temporal navigation (the play icon).
  3. Press the refresh button next to the range to fit it to the layers, set the step (for example 1 second), and press play.
  4. To export frames for a video, use Export animation in the same panel.

Simulated times start at 2026-01-01 00:00 UTC. Use a lower FOOTPRINT_SPACING for a smoother animation. For a 3D view, extrude the footprints in QGIS 3D by the height_m field.

Styling

On load, outputs are given a categorised style: envelopes and stands by element, footprints by unit, issues and stand conflicts by kind, jet blast by velocity_kmh. Layer opacity is set between 45 % and 100 % so the base map stays visible.

Table 3 Default colours by element.
elementColour
swept_envelope, parked_footprint, vehicle_swept #1f78b4
clearance_envelope, stand_clearance #fdbf6f
main_gear_swept #33a02c
nose_gear_swept #b2df8a
engine_swept, intake_hazard #e31a1c
tug_swept #6a3d9a
required_pavement, entry_swept #a6cee3
fillet #ff7f00
nominal_taxiway #bdbdbd

Change the style as you would for any layer, then save it with Style → Save as default or as a .qml file to reuse it across projects.

Reports

Set HTML report to a file path to write a report with one section per run: aircraft or unit, travel, maximum steering angle against the limit, steering exceedances, minimum outer-tyre to pavement-edge margin and breaches (when a pavement layer is given), swept area, clearance applied, obstacle contacts and clearance infringements, and every note — including what geometry was estimated and where the steering limit came from. The same figures are returned as JSON in the SUMMARY output, for models and scripts.

Scripting and models

Every tool can be used in the graphical modeller and from the Python console:

import processing

result = processing.run("openairside:aircraft_path", {
    "PATH": "centrelines",          # layer name, id or path
    "AIRCRAFT": [0],                # index into the aircraft list
    "TRACKING": 1,                  # 0 nose gear, 1 cockpit, 2 custom
    "STANDARD": 0,                  # 0 ICAO, 1 FAA, 2 EASA, 3 none
    "CONTEXT": 0,                   # 0 taxiway, 1 taxilane, 2 stand
    "PAVEMENT": "pavement",
    "ENVELOPES": "TEMPORARY_OUTPUT",
    "ISSUES": "TEMPORARY_OUTPUT",
})
print(result["SUMMARY"])

Enum parameters such as AIRCRAFT take indexes into the list shown in the dialog; to choose aircraft by type in a script, put the ICAO type in a field of the path layer and pass it as AIRCRAFT_FIELD. For use outside QGIS, see the command-line engine.