Trail Notes

Why GPS Elevation and Elevation Gain Differ Everywhere

Same ride, three apps, three different climb totals. None of them are lying — they're measuring a noisy number in different ways.

Reading time: 8 minutes Last updated: July 2026

GPS Is Worst at the Third Dimension

Satellite geometry makes vertical position the weakest measurement a GPS receiver produces: vertical error typically runs 1.5 to 3 times larger than horizontal error. A receiver placing you within 3 meters horizontally may be 5–10 meters off vertically — and unlike horizontal wander, vertical error swings continuously up and down while you stand still.

Two more things stack on top of the raw satellite error:

  • Ellipsoid vs. sea level. Satellites measure height above a mathematical ellipsoid, not sea level. The difference (the geoid separation) reaches ±100 meters depending on where you are on Earth. Receivers correct for it, but cheap ones use coarse correction tables — a source of constant offset.
  • Barometric altimeters. Better devices blend a pressure sensor with GPS. Baro elevation is smooth and precise moment to moment but drifts with the weather — a passing front can move your "elevation" 30 meters while you sleep.

Why Elevation Gain Is Even Worse

Total climb sounds simple: add up every meter that goes up. But apply that to a noisy signal and the noise itself becomes "climb." If elevation jitters ±2 meters on every point and your device records every second, a dead-flat highway accumulates hundreds of phantom meters per hour: +2, ignore the −2, +2 again, forever.

This is why raw point-to-point summation always overstates gain — commonly by 2–5× on flat-to-rolling terrain. Every serious tool filters the signal before summing, and the filter choice is why apps disagree:

ApproachHow it worksEffect on the number
Raw summationAdd every positive deltaWildly inflated
Threshold / hysteresisOnly bank climbs bigger than a band (2–10 m)Close to honest; small rollers may be missed
Smoothing firstAverage elevation over distance/time, then sumHonest on sustained climbs, clips sharp ones
DEM replacementDiscard GPS elevation; look up terrain-model height per positionConsistent, but only as good as the terrain model

Our GPX Analyzer uses a 2-meter hysteresis: a climb only counts once it exceeds the noise band, and descents reset the baseline the same way. Expect its gain figure to land near what a barometric Garmin reports — and far below what naive tools claim for the same file.

Reading Your Own Numbers Honestly

Compare like with like

Gain numbers are only comparable within one tool's method. Track your progress in a single tool rather than comparing totals across apps.

Trim stationary ends first

A GPS left recording at camp logs hours of pure noise — vertical jitter included. The GPX Track Editor detects and trims stationary tails automatically.

Check the elevation profile, not just the total

The analyzer's elevation chart shows the shape of the data. Sawtooth fuzz on flat sections is noise; if the fuzz is huge, distrust the gain number regardless of the tool.

Expect baro and GPS files to differ

The same ride recorded by a barometric watch and a phone will disagree on gain by design. The watch is usually closer.

Common Elevation Problems in GPX Files

Elevation reads zero for the whole track

The recording app never had a vertical fix, or stripped elevation on export. Position can be fine while elevation is absent — the fields are independent in the file.

A constant offset from known elevations

Benchmarks say 1,204 m, your file says 1,167 m everywhere: geoid correction or baro calibration error. Harmless for gain calculations — the offset cancels out.

Single-point spikes hundreds of meters tall

Momentary multipath or a bad fix in a canyon. One spike can add its full height to a naive gain total; threshold-based methods largely ignore it. Cut the offending points with the editor if the profile matters.

Non-numeric elevation values

Corrupted exports sometimes write junk into <ele> elements. The GPX Validator flags these, and the analyzer skips them rather than poisoning the stats.

Related Tools and Guides