SF2G Route Corridors

Loading maps...

💨 How Wind Factor Is Calculated

Every SF2G ride is enriched with historical wind data so you can see how much Mother Nature helped — or hurt — your commute. Here's how it works:

1

Fetch Historical Wind

We pull hourly wind speed, direction, and gust data from the Open-Meteo Archive API using your ride's start coordinates and date. Wind is sampled at the hour your ride began (Pacific time).

2

Calculate Ride Bearing

Your ride's direction of travel is computed from the start and end GPS coordinates using the Haversine bearing formula. This gives a compass heading (0° = north, 90° = east, etc.) representing the overall direction you rode.

3

Project Wind onto Ride Direction

Wind direction is reported as where wind blows from (meteorological convention). We flip it 180° to get the direction wind is going to, then use cosine projection to decompose it into:

  • Tailwind component = wind speed × cos(wind_to − ride_bearing)
  • Crosswind component = wind speed × sin(wind_to − ride_bearing)

A positive tailwind means the wind was pushing you forward; negative means you were riding into a headwind.

4

Classify & Display

The tailwind value (in m/s, displayed as mph) is classified for color-coding:

Strong tailwind> 6.7 mph (3 m/s)
Light tailwind — 2.2–6.7 mph (1–3 m/s)
Calm< 2.2 mph (< 1 m/s either way)
Light headwind — 2.2–6.7 mph (1–3 m/s)
Strong headwind> 6.7 mph (3 m/s)

On the leaderboard, each rider's Avg Wind column shows the mean tailwind across all their SF2G rides. Individual ride wind values are visible on profile pages.