Inconsistent .fit data generated by Zwift

The distance measurement in the .fit files Zwift generates doesn’t seem to have much relation to the latitude/longitude measurements also in the file.

Here are the first few measurements from a ride I did recently:

Latitude Longitude Distance
40.772537 -73.976748 0.25
40.772519 -73.976744 2.3
40.772492 -73.976750 5.57
40.772458 -73.976762 9.58
40.772418 -73.976782 14.4

If you calculate the distance between these points using the Haversine formula (or use a website that does it for you in metres like ) you’ll see the distance value is off.

These measurements are also inconsistent with the reported distances while on a group ride - as you finish it tells you the time you took to complete the distance, but if you look in the generated .fit file for the ride you’re always nowhere near the finish line at the timestamp Zwift claims you completed the ride.

For example, here is the end of the ride with the data above:


My ride started at 19:00 so At 31:25 into the ride:

Time Latitude Longitude Distance
06/05/2020, 19:31:25 40.768082 -73.981782 16032.47

I’d actually reached 16km at 19:31:17, 8 seconds earlier:

Time Latitude Longitude Distance
06/05/2020, 19:31:17 40.768330 -73.981624 16001.86

Calculating the distance of the successive lat/lng values using the Haversine formula had me at 16km at 31:25 in agreement with the in-game total but ad odds with the generated .fit file.

Does anyone know why there is this discrepancy? I’ve tried taking altitude differences into account but it didn’t help, the datapoints are so close together I’m not surprised.

I know this is all imaginary cycling and whatever, but you’d think that would mean no crazy satellite signal problems or weird routing errors so the numbers would all add up.