gps-wizard

FIT - Flexible and Interoperable Data Transfer

The following data fields are supported by the FIT loader:

FIT Name Description Name Type Units Resolution
timestamp Date + Time ts float64 s -
position_lat 1 Latitude lat float64 deg 1 x 10-7
position_long 1 Longitude lon float64 deg 1 x 10-7
distance Cumulative Distance dist float64 m 1 x 10-3
altitude 2 3 Altitude - - - -
enhanced_altitude 3 Altitude ele float64 m 2 x 10-1
speed 2 4 Speed - - - -
enhanced_speed 4 Speed sog float32 m/s 1 x 10-3
vertical_speed 5   roc float32 m/s 1 x 10-3
cog 6 7 Course Over Ground cog float32 deg 1 x 10-3
Sat 6 Satellites sat uint8 - -
hdop 6 8 HDOP hdop float32 - 1 x 10-1
heart_rate Heart Rate hr uint16 bpm -

Notes:

  1. Latitude + longitude are converted to degrees and rounded to 7 decimal places; see section below.
  2. Altitude and speed are unused because enhanced altitude and speed are better; see section below.
  3. Altitude and enhanced altitude are recorded to the nearest 0.2m.
  4. Speed and enhanced speed are recorded in mm/s, providing up to 3 decimal places for m/s.
  5. Vertical speed is only present in Suunto FIT files.
  6. COG, satellites and HDOP are only available in COROS FIT files.
  7. COG is currently an integer in COROS FIT files. Decimal places have been requested.
  8. HDOP provides exactly 1 decimal place in COROS FIT files.

Latitude and Longitude

Latitude and longitude are specified in “semicircles” in FIT files, which are 32-bit signed integers.

SiRF and ublox chips output 32-bit signed integers ranging from -900,000,000 to 900,000,000 for latitude (representing -900 to 900) and -1,800,000,000 to 1,800,000,000 (representing -1800 to 1800) for longitude.

GPS / GNSS chips outputting NMEA data typically provide a maximum precision of ddmm.mmmmm for latitude and dddmm.mmmmm for longitude. Since the mm before the decimal point is whole minutes (00 - 60), overall resolution is only 60% of the SiRF and ublox binary formats which provide 7 decimal digits.

In principle “semicircles” use 32-bit signed integers more effectively, but in reality they have no real benefit. Scaling the outputs of a GPS / GNSS chip does not increase the resolution, it just gives the illusion of it.

Enhanced Fields

Speed and altitude are 16-bit integers in FIT files, which have the following limitations:

The “enhanced” altitude and speed are simply 32-bit integers to overcome these 16-bit limitations.

It is not clear what activities Garmin had in mind for the enhanced fields but sky diving is a possibility:

The enhanced altitude and speed could also be intended for other speed records. For example:

Magic Values

The binary value of speed in a FIT file may be 0xFFFF which is 65.535 m/s, or 127.37 knots.

These values should not be taken literally.

Manufacturer Variations

A dedicated page describes the subtle differences between FIT files from different manufacturers.

Conversion Issues

During the testing of the GPS Wizard modules, it was observed that GPSBabel can have an adverse effect on FIT files.

Re-saving a FIT file, without changing the format and then converting to GPX (i.e. FIT -> FIT -> GPX) results in a slightly different file to a direct FIT->GPX conversion.

Some trackpoints with a speed of zero gain a non-zero speed (presumably derived from positional data) and some speeds change by 0.001 m/s.

This is quite unexpected as re-saving a FIT file using GPSBabel should not have any effect on the speeds in the file.

TODO