1. Upload your .fit file (e.g. from Garmin or Bryton Rider device)

2. Choose what type of elevation correction: Geodetic (New Zealand only), or Simple Correction.

Geodetic correction is completely automatic, and will correct your ride elevation every time the activity passes by a Geodetic marker (e.g. Trig station or other marker near the roadside) in the LINZ database.

With Simple Correction, you simply need to enter your known elevation at the start, end, maximum or minimum elevation of the activity. If you know the start and elevation should be the same (you started and ended at exactly the same elevation), then tick the box. Feijoa will apply a "ramp" to your elevation so that the start and end points are the same.

3. Click to upload the activity to Strava, download it as a GPX, or download as a CSV for further analysis.

What’s a “Feijoa”?

A feijoa is a small, fleshy green fruit commonly found in New Zealand. It is prolific during the Autumn months, when children sell bags of them at road-side stalls, picked from trees and bushes in their back gardens. It’s an acquired taste – some love ’em and some hate ’em! Personally I think they’re great in smoothies.

This tool is named after the feijoa since some of the functions (Geodetic elevation correction) are NZ-specific. And it’s just a cool name.

Geodetic Correction

If you like to know how much climbing you’ve done on a ride, barometric altimeters on GPS head units are the best thing since sliced bread. As you climb, the air pressure drops slightly, and the altimeter calculates how many metres you’ve climbed. This is usually much more accurate than Strava’s calculation of your altitude based on who-knows-what.

Unfortunately, air pressure has an awkward habit of changing with air temperature and weather. If the weather starts to go bad during a ride, the barometer starts to drop (less air pressure), and your barometric altimeter interprets this as ”I must be climbing”. Furthermore, unless you manually calibrate the altimeter at the start of every ride, it can easily be 100m higher or lower than your real altitude, and requires a calibration/offset adjustment.

One day when I was trying to calculate the exact height of my local hill, I stumbled across New Zealand’s LINZ database of geodetic markers. These are the markers used by surveyors to calculate boundary markers, streets, etc. They are all logged in a public database with their exact lat/long (GPS) coordinates, and their height.

So I had the idea of taking the GPS coordinates from a ride (usually taken every second), and comparing them to local geodetic markers. Every time you go close to a marker, you should be able to get your official height from the database – as long as it’s not up/down a cliff, or next to you but up a high tower or building!

Thus Feijoa was conceived. Feijoa can take any .fit file activity done in New Zealand, and will correct the elevation according to all the geodetic markers you passed close to during the activity. It still requires barometric sensors, but just gently pushes the elevation figure up or down as you pass by each geodetic marker. This corrects for any air pressure and temperature differences that occur during the activity. (note: this is not done live – it’s only done when you upload the .fit file into Feijoa).

Bryton Speed Correction

Bryton GPS head units such as the Bryton Rider 310, 330 etc. are excellent bike computers, great value for money and with long battery life. However, they have a few quirks when uploading to Strava. I’ve had exactly the same issues with a Bryton 310 and 2x Bryton 330, so it’s not just a faulty unit.

My equipment includes a Giant RideSense speed/cadence sensor, which transmits ANT+ data to my Bryton head unit. I have the Bryton set up to display speed data from the RideSense rather than GPS, which should be more accurate, particularly any time it loses GPS connection.

The problem is that when my ride data is uploaded to Strava, the speed graph has multiple spikes and dips in it, when my actual speed was steady. This messes up my maximum speed for the ride, and just looks messy.

I investigated what was going on inside the .fit file to cause Strava to report such bad data. I discovered that when the Bryton unit temporarily loses its GPS signal, it just reports the last valid location it found. In the .fit file, this means that you get a few seconds where the GPS figures don’t change, but the reported speed and distance indicate the the bike was still moving. A few seconds later, it catches up with itself. Strava, however, gets terribly confused by these conflicting signals... has the ride paused or is it still going?... and makes these distinctive spike patterns.

Feijoa performs some processing to detect when these errors are occurring, then does its best to create valid GPS locations for the times that Bryton gave bad values. It does this through simple interpolation between the last known good value, and the next time the location value changes. It only does this if the speed value (from the speed/cadence sensor) indicates that the bike is still moving.

This function is automatic, and shouldn’t do anything to your ride data if your data doesn’t exhibit Bryton’s bad behaviour.

uncorrected Bryton speed data in Strava
Uncorrected Bryton speed data in Strava
Exactly the same portion of the ride, with the Bryton speed correction applied
Exactly the same portion of the ride, with the Bryton speed correction applied. Much better!