IGC Data Format Notes.
======================
Refer to Appendix 1 of http://www.fai.org:81/gliding/gnss/tech_spec_gnss.asp 
for the specification of the IGC data format.

A sample list of software applications that use data in IGC format can be
found at http://www.fai.org:81/gliding/gnss/gnss_analysis_software.pdf

GPSBabel can be used to translate data in IGC format to and from various other
formats.

Routes in other formats are used to represent IGC task declarations.
Tracks in other formats are used to represent IGC recorded flights.



Converting to IGC format
========================
IGC files generated by GPSBabel will NOT pass security validation tests since
the data they contain cannot be proven to originate from an approved flight
recorder.  For most software applications that use IGC files this is not an
issue but for competition scoring, record and badge claims the generated files
will not be accepted as proof of a flight.

A track stored in another format (GPX for example) representing a recorded
flight can be converted into an IGC file:

    gpsbabel -i gpx -f mytrk.gpx -o igc -F myflight.igc

If multiple track segments are provided in the input file, the one with the
most points will be used.

A route stored in another format representing a task declaration can be
converted into an IGC file:

    gpsbabel -i gpx -f myrte.gpx -o igc -F mytask.igc

A route and a track in other formats can be included into a single IGC file:

    gpsbabel -i gpx -f mytrk.gpx -f myrte.gpx -o igc -F myflight.igc

A similar result can be obtained by downloading the track log and routes
directly from a GPS device connected to a PC.  For example to create an IGC
file from data recorded in a Garmin GPS connected to the first serial port of
a PC running Linux:

    gpsbabel -t -r -i garmin -f /dev/ttyS0 -o igc -F myflight.igc

For Windows operating systems:

    gpsbabel -t -r -i garmin -f com1 -o igc -F myflight.igc

A waypoint file in another format containing a waypoint whose short name is
"PILOT" can be merged into an IGC file.  The description field of the waypoint
will be used for the pilot name in the IGC file header:

    gpsbabel -i gpx -f mytrk.gpx -f myrte.gpx -f mywpt.gpx -o igc -F myflight.igc
    gpsbabel -w -t -r -i garmin -f /dev/ttyS0 -o igc -F myflight.igc
    
Some formats such as GPX allow routes, tracks and waypoints to exist in the
same file and can be used to fully populate an IGC file:

    gpsbabel -i gpx -f myall.gpx -o igc -F myflight.igc



Converting from IGC format
==========================
Data in an IGC file can be converted into other formats.  For example to
generate OziExplorer files containing tracks representing the recorded
flight (myozi.plt) and routes representing declared tasks (myozi.rte):

    gpsbabel -i igc -f myflight.igc -o ozi -F myozi

Or to GPX format:

    gpsbabel -i igc -f myflight.igc -o gpx -F myflight.gpx

Header information from the IGC file will be written to the description field
of the track(s).

If both pressure altitude and GNSS altitude are recorded in the IGC file, two
tracks will be written to the new track file, representing the two altitude
tracks.  The latitude, longitude and timestamps in the tracks will be identical.


Merging into IGC format
=======================
A route stored in another format can be merged with an existing IGC file that
has no task declaration, to generate a new IGC file with a task declaration:

    gpsbabel -i igc -f myflight.igc -i gpx -f myrte.gpx -o igc -F mynew.igc

A two dimensional (lat/lon) track recorded during a flight by a GPS receiver
can be merged with a one dimensional (altitude) track recorded during the same
flight by a barograph instrument.  The result is a three dimensional IGC file
representing the flight:

    gpsbabel -i gpx -f baro.gpx -i igc -f my2D.igc -o igc -F my3D.igc

Sometimes there is a discrepancy between the internal clock in the barograph
instrument and GPS time which can result in the altitude and ground positions
not correlating correctly.  This can be corrected manually by passing the time
difference in seconds between the two time domains through the "timeadj"
parameter.  This can be any positive or negative integer:

    gpsbabel -i gpx -f baro.gpx -i igc -f my2D.igc -o igc,timeadj=27 -F my3D.igc

GPSBabel can also attempt to deduce the time difference automatically.  This
is done by comparing the time that it thinks that you landed on the GPS track
and the barograph and adjusting accordingly:

    gpsbabel -i gpx -f baro.gpx -i igc -f my2D.igc -o igc,timeadj=auto -F my3D.igc

The same can be acheived by downloading directly from a barograph instrument
supported by GPSBabel.  For example with a Brauniger IQ Comp GPS variometer:

    gpsbabel -i baroiq -f /dev/ttyS0 -i igc -f my2D.igc -o igc,timeadj=auto -F my3D.igc

or:

    gpsbabel -i baroiq -f com1 -i igc -f my2D.igc -o igc,timeadj=auto -F my3D.igc



Chris Jones
Aug 2004
