Wind Factor

Every ride. Wind-aware.

Wind Factor automatically analyses your Strava activities and tells you exactly how much the wind helped — or hurt — your performance.

Wind Factor is no longer a standalone app. It now lives inside velometry.cc, where you can use it together with other new cycling metrics. Head over to velometry.cc to connect with Strava and get started.

Go to velometry.cc Connect with Strava

Now available inside velometry.cc

Understand your rides on a new level

Was that a fast day because you're getting stronger, or because the wind was pushing you? Now you'll know.

🌬️

Per-ride Wind Factor

A single signed number tells you if the wind was an ally (+) or an enemy (−) on that ride. Automatically added to your Strava description after every activity.

👑

Segment KOM / Top-10 context

Set a PR on a Strava segment? Wind Factor shows the wind score for that specific effort — so you know if you truly earned it or had a 30 km/h tailwind.

🗺️

Route-aware analysis

The route is split into stable straight segments. Each segment gets its own wind measurement — turns, stops, and zigzags are automatically excluded.

Fully automatic

Connect once and forget. Wind Factor listens to Strava webhooks and processes every new ride in the background — powered by Open-Meteo's ERA5 reanalysis archive, the same weather data used by meteorologists.

🚴

Speed-aware physics

The same 20 km/h wind affects a 40 km/h sprinter four times more than a 20 km/h casual rider. The algorithm accounts for this with aerodynamic weighting.

🧭

Head / side / tail breakdown

See how your ride time split between headwind, crosswind and tailwind — with a score for each. A near-zero Wind Factor finally tells you whether it was a calm day or a headwind out and a tailwind back.

Three steps, zero effort

After the one-time setup, everything happens automatically.

1

Connect your Strava account

Click "Connect with Strava" and grant read + write access. Wind Factor registers a webhook with Strava to be notified whenever you finish a ride.

2

Ride normally

Record your ride on Strava as usual. Wind Factor picks up the webhook event a few minutes after you save the activity.

3

Read your Wind Factor in Strava

Open the activity description — you'll find the Wind Factor score, average wind speed and direction, a head / side / tail breakdown of your ride time, and individual scores for any KOM or Top-10 segment efforts.

What gets added to your activity

The result appears directly in your Strava activity description. No separate app to open.

Strava activity description
4:08 PM · Tuesday, May 31 · Ochodza, Poland
Afternoon Ride
🌬️ WindFactor: 0.08  |  5.9 km/h 152° ↖↑
🧭 Head 36% -2.3  |  Side 28% 18km/h  |  Tail 36% +2.0
👑 Dół (siodło) Kopytówka  |  WF: 1.88
👑 Paszkówka - Kopytówka  |  WF: 1.71
2️⃣ Leńcze od Podolan  |  WF: 0.21
2️⃣ Leńcze pod Kościół-Grabie  |  WF: 0.73
← Headwind (bad)Tailwind (good) →
WF < 0 — headwind hindered your time
WF ≈ 0 — crosswind, negligible impact
WF > 0 — tailwind boosted your ride
🧭 line — share of ride time in head / side / tail wind. Head & tail show their Wind Factor; side shows crosswind strength in km/h
Route segment analysis (debug view)
653 segments · gaps = turns / stops filtered

The route is split into stable straight segments. Each is coloured by its Wind Factor: ■ green = tailwind, ■ yellow = crosswind, ■ red = headwind. Gaps are turns, stops, or sections too short to analyse reliably.

How the Wind Factor is calculated

The algorithm turns a raw GPS track and hourly weather data into a single meaningful number in five stages.

Processing pipeline

1
GPS smoothing (two passes) A centred moving average removes GPS noise. Two window sizes are used: a narrow one for sharp turn detection, a wider one for stable movement vectors.
2
Breakpoint detection The track is cut at sharp corners (bearing change ≥ 15°) and wherever a time window shows high circular variance — indicating zigzags or switchbacks.
3
Segment building & filtering Sections between breakpoints are split by time window, recursively refined by bearing spread, then filtered: minimum 3 pts, 3 s duration, 15 m displacement, 0.5 m/s speed.
4
Wind fetch & per-segment factor Each segment requests one wind sample from Open-Meteo ERA5 at its centroid and temporal midpoint. The factor is computed from along-track wind and riding speed.
5
Time-weighted route average The final Wind Factor is the duration-weighted mean across all stable segments. Coverage shows what fraction of ride time was analysed.

Along-track wind projection STEP 4

Only the wind component aligned with your direction of travel matters. A pure crosswind has zero effect on your time.

W = |W| · cos(θ) // θ = angle between wind direction // and movement bearing // + = tailwind, − = headwind

Aerodynamic weighting STEP 4

Aerodynamic drag scales with v². The same 20 km/h wind is four times more impactful at 40 km/h than at 20 km/h. The reference speed is 35 km/h.

AeroWeight = (v_kmh / 35)² windFactor = W · AeroWeight // v = mean segment speed

Head / side / tail split STEP 5

Each segment is classified by the angle θ between wind flow and travel direction — three equal 120° arcs. Percentages are duration shares (always summing to 100). Head and tail report a time-weighted Wind Factor; side reports the crosswind component, since its along-track effect is ≈ 0 by definition.

cos(θ) > 0.5 → tailwind cos(θ) < −0.5 → headwind otherwise → sidewind // side score = |W| · sin(θ) in km/h

Circular statistics for bearings STEP 2

Bearing spread and mean direction use vector sums — not arithmetic averages — to avoid the 359°/1° bug where the mean of two near-north headings would come out as 180°.

R = |Σ e| / n spread ≈ √(−2 · ln R) degrees // R → 1: concentrated headings // R → 0: scattered / zigzag

Default configuration

Parameter Value Purpose
bearing-break-threshold 15° Minimum turn angle that triggers a segment split
analysis-window 60 s Max segment duration (wind can change on long straights)
max-bearing-variance 60° Circular spread threshold for window variance splits
min-displacement 15 m Filters out GPS drift and stationary periods
aero-reference-speed 35 km/h AeroWeight = 1.0 at this speed; scales quadratically

Ready to see your real performance?

Wind Factor now lives inside velometry.cc — connect your Strava account there and get Wind Factor scores alongside other new cycling metrics.

Go to velometry.cc

Wind data provided by Open-Meteo ERA5 reanalysis archive.