Drop a GPX file to score how hilly your route really is.
The hilliness score combines three dimensions of what makes a route feel hilly. Each component uses square root scaling, which expands differences between gentle and moderate routes while preserving meaningful separation at the top end — unlike logarithmic scaling, which compresses hard routes into an indistinguishable band near 100.
Total elevation gained divided by total distance. The most intuitive, universal metric — a marathon with 5,000ft of gain is objectively hillier than one with 1,200ft. Sqrt-scaled with a ceiling of ~264 ft/mi (50 m/km).
For each climbing segment, the gradient is raised to the power of 1.5 and multiplied by segment distance. The 1.5 exponent captures that steep grades are disproportionately hard without over-penalizing moderate grades. Sqrt-scaled with a ceiling of 8.
Measures how sustained the climbs are. A route with one long 2km climb feels much hillier than one with twenty 100m bumps, even if total climbing distance is the same. Uses a power-sum formula where each climb's length is raised to p=1.3, naturally rewarding longer climbs disproportionately without arbitrary blending of statistics. Sqrt-scaled with a ceiling of 500.
Linear scaling compresses gentle-to-moderate routes into a narrow band at the bottom. Logarithmic scaling fixes the bottom but over-compresses the top — routes with 130 and 260 ft/mi gain both hit the ceiling. Square root scaling strikes the right balance: the jump from flat to rolling is still amplified, while genuinely harder routes maintain meaningful separation (210 ft/mi scores 89, not 100).
GPS elevation data goes through three filtering passes. First, a median filter (window size 7) removes sharp elevation spikes caused by GPS drift during watch pauses. Second, a moving average (window size 5) smooths remaining noise. Third, a 3-meter dead-band threshold eliminates GPS wobble — small oscillations under 3m (~10ft) that aren't real terrain changes but accumulate into significant phantom elevation gain. This approach mirrors Strava's elevation correction and produces gain figures consistent with corrected industry values. Sub-1.5ft segments are discarded as GPS jitter. Only uphill segments (>0.5% grade) contribute to the score.
0–15 Flat · 15–30 Nearly Flat · 30–45 Gently Rolling · 45–60 Rolling · 60–70 Hilly · 70–82 Very Hilly · 82–100 Mountainous