How it works
The science behind the wind analysis, the ride-time model, the “feels like” temperature and the rain, and where the numbers come from. Last updated September 28, 2026.
1. The short version
Tailwind Tally takes a GPX route and answers five questions:
- How much of the route is with me or against me? Every 25 metre stretch is a tailwind, headwind or crosswind, with a rough effort figure (sections 3 and 4). To see the other way round, press Reverse route in the Load a route card. The wind is one steady value you set, or a forecast that changes with the clock and the place (sections 2 and 5).
- How long will it take? At a steady speed the ride time is simply distance over speed. If you ride at steady power instead, your speed drops in a headwind and rises with a tailwind, and the app works out the resulting ride time on a flat road (section 6).
- How will it feel? The Temperature tab estimates the feels-like temperature on every stretch (sections 8 to 12).
- Will it rain? The Rain tab shows where and when rain is expected along the route, for each direction, from the forecast (section 7).
The rest of this section is about the temperature. A thermometer tells you the air temperature. It does not tell you how the ride will feel. Riding into a headwind at 25 km/h on a 5 °C day feels much colder than 5 °C, and riding in humid heat feels hotter than the number says. Tailwind Tally estimates that feeling for every 25 metre stretch of your route:
- It works out the wind on you on that stretch: your own speed combined with the wind, given the direction you are riding.
- It takes the air temperature and humidity you enter, or the forecast for the moment you would be there.
- Below about 10 °C it uses the official wind chill formula. From 20 °C up it uses the apparent temperature, which includes wind and humidity. In between it fades smoothly from one to the other.
- It compares the result with the air temperature and colours the route by how much colder (blue) or hotter (red) each stretch feels.
It is a guide, not a measurement. Both formulas were built for a standard person in standard conditions. Clothing, sun, effort and the individual all matter, and none of them are in the model. Each section says exactly what is and is not included.
2. What goes in
- Air temperature and humidity: typed in by you, or taken from the forecast.
- Your speed: the cruising speed you enter, held constant (or, with steady power, your speed on a calm, flat day, plus your weight and the drag and rolling resistance of you and your bike under Advanced; section 6). The app does not model hills, stops or descents.
- The ride’s start, in forecast mode: the date and the start time. Everything else about timing follows from the route and your speed.
- The wind: direction and speed, typed in (speed as a Beaufort force) or taken from the forecast.
- Rain, for the Rain tab: from the forecast only (section 7). There is nothing to type in.
- The route: your GPX track, resampled to 25 metre stretches, each with a heading.
Units
Speed, temperature, distance and rain all use one setting, metric or US, shown in Your ride above the tabs. It starts from the route’s own start point (a simple box around the United States, checked on your device, with no location service asked), and switches automatically when you load a different route — until you pick one yourself, which then sticks for the rest of the visit. Rider mass, drag area and rolling resistance under Advanced stay in kilograms and square metres either way, since they describe your equipment rather than the ride’s result.
What leaves your device
Your GPX file is read in your browser and never uploaded. One optional feature contacts a service, and only when you ask: the forecast (wind, temperature, humidity and rain) sends up to three places from the route, each rounded to about 11 km, and the date, straight to Open-Meteo. The map tiles are requested as you look at the map. The privacy policy lists all of it.
The forecast
In forecast mode the app asks Open-Meteo for hourly values (temperature, humidity, wind and precipitation), for the date you pick. It sends up to three places from your route (the start, the middle and the end), each rounded to 0.1° (about 11 km), never the route itself. You give only a start time. The ride then lasts as long as the route takes at your cruising speed, and each stretch gets its own clock time:
Temperature and humidity are read from the hourly forecast at that moment (linearly between the hours), and between the three places (linearly by distance along the route). When you press Reverse route, the same places are reached in the other order and at other moments, so the temperature, wind and rain you meet can be quite different.
The rain follows the clock and the place as well, but as a step for each hour rather than a slope (section 7). The wind follows the clock and the place in the same way (section 5). The forecast wind is the standard 10 metre wind, which is also how the Beaufort scale is defined, so manual and forecast wind are directly comparable. If you type the wind yourself it is one steady value for the whole ride.
3. The wind on you
What cools or heats you is not the wind alone but the air moving past you, which is your own motion combined with the wind. On each 25 metre stretch, with v your speed, w the wind speed and φ the angle between the direction you ride and the direction the wind blows toward:
Example. You ride at 25 km/h in a Beaufort 4 wind (24 km/h). Straight into it the air passes you at 49 km/h, across it at about 35 km/h, and with it at just 1 km/h. That difference is why the same route feels so different from one stretch to the next.
4. Tailwind, headwind and effort
With the wind on each stretch known (section 3), the app answers two questions: how much of the route is with you or against you, and how much harder the wind makes the ride.
Tailwind, headwind, crosswind
Each stretch is classified by the angle between your heading and the direction the wind blows toward. If the wind pushes along your direction of travel (cos φ > 0) the stretch is easy; if it pushes against you (cos φ < 0) it is hard. A narrow band around exact crosswind, 10° wide by default, counts as neither (neutral). The route map splits the two sides once more: stretches within 20° of dead-on (a 40° band by default) count as full tailwind or headwind. These are plain distance counts: a metre of gentle tailwind counts the same as a metre of gale.
Effort
Air resistance grows with the square of the airspeed, not in proportion to the wind. On a stretch the drag effort is proportional to the airspeed squared (the formula in section 3). The effort estimate is the distance-weighted average of that over the route, divided by the value for riding the same route at the same speed on a calm day. So 1.0× means the same as a calm day and 1.6× means 60 % more aerodynamic effort.
Because of the square, a headwind costs more than an equal tailwind saves. At 25 km/h in a 20 km/h wind, the airspeed is 45 km/h against (3.24× the calm effort) and 5 km/h with (0.04×). A route that is half headwind and half tailwind therefore averages 1.64×, more than a calm day. The estimate counts drag only: not rolling resistance, gradient or changes of speed, and it assumes you hold your cruising speed whatever the wind. If you ride at steady power, the effort figure is replaced by ride times (section 6).
The last half, reversing, and the sweep
The app analyses the route in the direction it is now: the first point is the start (the blue dot on the map). The last 50 % by distance is shown separately, since it is often the part that decides how a ride feels. Reverse route flips the route, so the start moves to the other end and everything on the page is worked out for the other way round; pressing it again restores the original. The app does not compare the two directions for you: press the button and look. Whatever you have fetched stays valid, because the same places are met from the other end: the forecast, the rain and the elevation are turned around with the route, without asking the services again.
The wind-direction sweep chart tries every steady wind direction from 0° to 359° and shows the tailwind share for each; it is a what-if for a steady wind and does not use the forecast. With one steady wind, the app also checks its own arithmetic: the push of the wind along the route must add up to what the gap between the start and the finish allows (the balance check in the full report).
5. A wind that changes during the ride
In forecast mode the wind follows the clock and the place exactly as the temperature does (section 2). Each stretch is judged against the wind expected when you would be there. Between the hourly values, wind speed changes in a straight line and wind direction turns along the shortest arc: 350° to 10° passes through north, not through south. (Interpolating the east and north components instead would make the wind seem to weaken whenever it turns.) Between the places along the route the same rule applies.
What follows from it. The tailwind and headwind classes, the effort estimate and the feels-like temperature all use the wind on each stretch. What stops applying is the balance check of section 4: it assumes one steady wind, so the app shows it as not applicable. Reversing the route is not the same as flipping the signs of the result, because the other direction meets the wind at other moments; the app simply works the new direction out again.
The average. The compass and the Beaufort field show the ride’s average: the mean speed, and a speed-weighted vector mean direction. If the wind changes so much that the average cancels itself out (west for an hour, then east), no single direction describes the ride, and the app says so instead of showing an invented one. Typing or clicking a wind by hand replaces the forecast wind with your steady value.
Seeing it. In forecast mode the Wind and Temperature cards, and the Rain tab (section 7), each show a During the ride chart. The horizontal axis is the time of day. The wind chart has a row of arrows, pointing where the wind blows toward (so a north wind points down), above the wind speed. The temperature chart shows the air temperature and the feels-like temperature, with the gap shaded. Moving the pointer over a chart, or touching it, shows the values at that moment and puts an orange marker on the route map, where you would be then. With steady power the horizontal axis follows your real speed. The charts appear only when the wind, temperature or rain comes from the forecast; a value you type is the same all ride, so there is nothing to chart.
How much it matters. Real forecasts vary. For a Dutch location over 65 days in summer, the wind direction turned by more than 30° during a four-hour window on 28 % of days and by more than 45° on 14 %, though the biggest turns tended to come at light winds. On the 25.7 km sample loop, on a typical day with the wind turning 8° an hour, the time-aware answer differs from a single average wind by no more than about 2 percentage points of tailwind. When a front passes (wind turning 35° an hour, ridden at 10 km/h for 2.6 hours), the difference is 6 to 14 points, enough to change which way round looks better when you compare the two with Reverse route: one average wind says the reversed loop has 4.8 points more tailwind, while the wind at the moment says the loop as drawn has 3.7 points more. So it is a modest refinement on most days and a real one on days when the weather changes, and on long rides.
6. Riding at steady power
By default the app assumes you hold a steady speed. Some riders hold a steady effort instead: their power stays constant, so their speed drops in a headwind and rises with a tailwind. Choose Steady power under Riding style (in the Your ride card, above the tabs, so it applies to every tab) to model that. The speed you enter then means “the speed at this effort on a calm, flat day”, so you do not need to know your watts: the app works out the matching power and shows it.
The power balance
On a flat road, the power at the pedals balances air resistance and rolling resistance:
v is your speed, walong the wind component along your direction of travel (a tailwind is positive), and |vair| the size of the air velocity relative to you, so a crosswind adds drag through its size. ρ is the air density, CdA your drag area, Crr the rolling resistance, m the mass of rider and bike, g gravity and η the drivetrain efficiency. The defaults are 85 kg, CdA 0.32 m² (roughly hands on the hoods), Crr 0.005 and η 0.975; you can change them under Advanced. The air density comes from the air temperature at each stretch (dry air at sea-level pressure), so cold, dense air costs a little more.
Calibration
For your entered speed on a calm day, the balance gives the power. At 25 km/h and 20 °C the air resistance takes about 64 W and rolling resistance about 29 W at the wheel, so roughly 96 W at the pedals (about 99 W at 8 °C, where the air is denser). That is the steady power for the whole ride.
Solving for the speed, stretch by stretch
On each 25 metre stretch the app finds the speed at which that power exactly balances the resistance in the wind on that stretch. The speed on a stretch depends on the wind when you get there, and that moment depends on how fast you rode the stretches before it, so the ride is worked out stretch by stretch with the clock running at your real speed. In a tailwind the wind itself pushes the bike, so the search for the balancing speed starts beyond the point where the wind alone would carry you.
At 96 W on a straight, flat road:
| Wind along your direction | 30 headwind | 20 | 10 | calm | 10 | 20 | 30 tailwind |
|---|---|---|---|---|---|---|---|
| Speed (km/h) | 11.4 | 15.0 | 19.6 | 25.0 | 31.1 | 37.8 | 44.9 |
A headwind costs more speed than an equal tailwind gives back in time. On the 25.7 km sample loop, a calm day at 25 km/h takes 61.8 minutes. Holding the same power in a steady wind from the south-west it takes 63.6 minutes at 10 km/h, 69.1 at 20 km/h (average 22.4 km/h, ranging from 15 to 38 km/h along the loop) and 77.9 at 30 km/h.
What it changes in the results
- The tailwind and headwind classes depend only on direction, so with a steady wind they are the same as at a steady speed.
- The effort multiple (section 4) assumes a constant speed, so it is replaced by ride time: for your ride and on a calm day, with the average, slowest and fastest speeds. It also shows the share of the time spent in a headwind, which differs from the share of the distance because you are slower there. In a Beaufort 4 wind the sample loop has 67 % of the time but only 52 % of the distance into a headwind.
- The feels-like temperature uses your real speed on each stretch, so a headwind chills you less than it would if you kept your speed up.
- With a forecast, temperature, humidity and wind are read at the moment you really reach each stretch. The average wind shown in the compass fields is found with the calm-day timing, which is close but not exact.
Limits
- Flat road only. On real routes hills dominate speed, and a rider holding constant power slows far more on a climb than in any wind. Elevation is not used in this calculation, so this shows what the wind does, not the whole ride.
- Constant power is an idealisation. Many riders hold a perceived effort and vary it with terrain, traffic and fatigue.
- Not modelled: drafting, cornering, braking, coasting downhill, a changing drag area with position or wind angle, and a changing efficiency. Air density ignores humidity and altitude, which change it by a few per cent.
- The result depends on the rider parameters. The defaults are typical, not yours.
7. Rain
The Rain tab shows where and when it is expected to rain along your route. Like the temperature and the wind it comes from the forecast, so it needs From forecast and a tap on Get forecast under Weather for the ride. It changes nothing in the wind, temperature or ride-time calculations.
What you see
- The map: wet stretches are thick and coloured by intensity, dry stretches a thin grey line.
- A summary with the distance in rain, the peak intensity, the highest chance of rain, and how much rain falls on you during the ride.
- A chart of the intensity (mm per hour) and the chance of rain against the time of day, with a map marker while you hover or touch it, as in the Wind and Temperature tabs. Behind it, an amber band marks any hour a thunderstorm is forecast.
- A table of the stretches where it rains, in the order you ride them, one row for each intensity class.
Where the numbers come from
The forecast request already made for the wind and temperature also asks for two more hourly values (from the same places, so nothing extra leaves your device): the precipitation, in millimetres, and the probability of precipitation. Open-Meteo defines the first as the total (rain, showers and snow, as water) of the preceding hour, and the second as the probability of more than 0.1 mm in the preceding hour. The probability comes from an ensemble of 30 model runs at a coarse resolution (0.25°), so it is a much blurrier number than the amount.
How each stretch gets its rain
- A value stamped 09:00 describes the hour from 08:00 to 09:00. So at any moment the rain is the value of the first stamp at or after it: a step in time, not a slope, unlike the temperature and the wind, which are interpolated between hours.
- Each stretch is read at the moment you would get there (start time plus distance over speed, or your real speed with steady power) and at its place: between the sample places along the route the amount changes in a straight line with the distance.
- Which way you ride the route matters: the other direction meets the same places at other moments, so it can stay dry where this one gets wet. Press Reverse route to see it.
- The rain that falls on you is the sum, over the stretches, of the intensity times the time you spend on them. It is a depth (about one puddle’s worth), not a volume.
Thunderstorms
The same forecast request also asks for two more hourly values, from the same places: CAPE (convective available potential energy, in J/kg — how much energy is available for a storm, the standard instability measure forecasters use) and the weather code, a WMO code that occasionally commits outright to a storm (95 plain, 96 or 99 with hail). A first version of this used only the weather code, but testing it against real forecasts showed that code is rarely used at all, even where the amount of rain and the atmosphere both point to a real risk — so CAPE, which is always there, now does the real work, with the code able to raise the level further when a model does commit to it.
Two levels, by rule of thumb rather than an official threshold: possible from 1000 J/kg, likely from 2500 J/kg or wherever the weather code says so outright. Where either applies, the chart's background turns amber over that hour (a stronger shade for “likely”), the summary names the times, and the full report lists them by distance too. Because a storm is local and sudden, this is not blended between the sample places the way rain is: the highest level from any one of them is used for that hour, rather than being averaged away. Neither field reaches as far into the future as temperature and wind do; on the days they are missing, no warning is shown, which is not the same as no risk.
The classes and colours
Intensity is sorted into five classes (mm per hour): dry (under 0.1), very light (0.1 to 0.5), light (0.5 to 2.5), moderate (2.5 to 7.6) and heavy (7.6 and up). The upper two edges follow the usual rain-rate classes (light up to about 2.5 mm/h, moderate to about 7.6, heavy above, in the American Meteorological Society’s glossary and the WMO scale). The split at 0.1 and 0.5 is mine, chosen for cycling: 0.1 is the wettest a forecast “dry” can be, and drizzle below 0.5 is often ridden without a jacket. The colours are one teal hue in four steps, darker for heavier, with dry drawn in the same grey as the other maps. The ramp was checked for both themes.
Limits
- Showers are placed roughly. Forecast models put rain within a few kilometres and about an hour, so the boundary of a wet stretch is not exact, and a small shower can be missed altogether or shown where it does not fall.
- Three places at most. As for the wind, the forecast is read at up to three places along the route, and the rain in between is a straight-line blend of them.
- Hourly, not minute by minute. A shower that lasts twenty minutes is averaged over its hour.
- Wet does not change the feels-like. Wet clothing makes cold feel colder, and the temperature model has no correction for it.
- Forecast range. The amounts reach as far as the forecast does (about two weeks); the probability is often missing for the days furthest out, and the tab then shows the amount only.
- Thunderstorm warnings are a coarse signal. CAPE says the atmosphere could support a storm, not that one will happen; the levels are a rule of thumb, not an official scale; it names a whole hour, not a moment; it is not blended between places, so instability a little to the side of the route can still flag it; and it reaches less far ahead than the rain amount, with no warning shown once it runs out, which is not the same as a clear forecast.
8. Cold: wind chill
For cold weather the app uses the standard wind chill formula that Environment Canada and the US National Weather Service have used since 2001. It comes from Osczevski and Bluestein (2005), who based it on a model of heat flow from the upwind side of a head-sized cylinder moving at walking speed into the wind. With T in °C and V the airspeed in km/h:
It is officially defined only for T ≤ 10 °C and V > 4.8 km/h (the 3 mph limit in the US version). Below 4.8 km/h of airspeed there is no wind chill, which is why a tailwind that matches your speed brings no cooling at all.
Example. At −10 °C it feels like −15.3 °C at 10 km/h of airspeed, −18.8 °C at 25 km/h and −21.3 °C at 45 km/h.
Caveats. The formula describes how fast exposed skin on the face cools, in steady conditions, for someone walking. Using a cyclist’s airspeed is the usual approximation and not what it was calibrated for. The authors themselves point out the steady-state character of the concept.
9. Mild and hot: apparent temperature
Wind chill is not defined for mild weather, and it ignores humidity. From 20 °C up the app uses the apparent temperature of Robert Steadman, in the form used by the Australian Bureau of Meteorology. It combines temperature, humidity and wind. With T in °C, RH the relative humidity in % and v the wind in metres per second:
It reads as three effects on top of the air temperature: humid air feels warmer (the 0.33·e term, because sweat evaporates more slowly), moving air feels cooler (0.7 °C for every metre per second), and a fixed offset of −4 °C. The model is of an adult walking outdoors in the shade. In the original formula v is the wind at 10 metres; the app uses the airspeed on the rider, the same approximation as for the wind chill.
Example. At 32 °C and 70 % humidity the water vapour pressure is 33.2 hPa, so humidity adds 10.9 °C. Riding at 25 km/h (6.9 m/s) takes 4.9 °C off, and the offset another 4.0. The result is 34.1 °C, only 2 °C above the air temperature. In still air the same day would feel like 38.9 °C.
| Riding speed (no other wind) | Feels like at 32 °C, 70 % |
|---|---|
| Standing still | 38.9 °C |
| 10 km/h (a slow climb) | 37.0 °C |
| 25 km/h | 34.1 °C |
| 40 km/h | 31.2 °C |
Steadman’s own analysis found that, for normal midday climates in the US, humidity, wind and sun move the apparent temperature by between −5 and +7 K from the dry-bulb temperature. That is the scale of effect to expect.
In full sun (a separate, lower-bound estimate)
None of the above includes solar radiation. Steadman’s own model has an extension for it: a version of apparent temperature with a radiation term Q, the net radiation (in W/m²) a person absorbs (Steadman, 1994, “Norms of apparent temperature in Australia”).
The app derives Q from the forecast’s shortwave radiation (the total solar energy reaching a flat horizontal square metre, in W/m² — already reduced for cloud cover by the forecast model, and exactly 0 at night): Q = 0.104 × shortwave radiation, nothing subtracted first. That 0.104 is solved from two independent real numbers already used elsewhere on this page — full sun adds at most roughly 8 °C (Steadman, the NWS) and Open-Meteo’s own observed real-world maximum for shortwave radiation is about 1100 W/m² — so that a rider standing still (the single largest boost the formula can give) in the strongest sun ever seen still reads a little under 8 °C, tying smoothly back to 0 with no separate cutoff. Open-Meteo gives shortwave radiation as the average of the preceding hour, so each value is placed at the middle of that hour before it is read at the moment you would be on a stretch.
Two earlier, wronger versions of this constant are worth naming, since both looked reasonable until checked against real numbers: plugging the raw value straight in (Q = 0.7 × shortwave radiation) added over 20 °C at a common midday value, wildly past that same 8 °C ceiling. Copying Open-Meteo’s own apparent_temperature formula exactly — they hit the identical overshoot and fixed it with Q = max(0, 0.1 × (shortwave radiation − 550)), only the amount above a 550 W/m² baseline — no longer overshot, but tested against a real, genuinely clear (low cloud cover) September morning it read as no boost at all: 550 W/m² is close to that day’s very peak, reachable only for an hour or two around solar noon at that latitude and time of year. A baseline tuned for Open-Meteo’s own product turned out to be a bar this app’s typical ride rarely clears.
This is still cruder than Steadman’s own Q (radiation absorbed by a person’s own projected area, facing whichever way they face), applied here to a flat, ground-facing sensor reading instead — so it leaves out reflected light, long-wave heat radiating off the road and surroundings, and the extra a rider facing into a low sun would catch that a flat sensor does not. All three only ever add warmth, which is why this is shown as a deliberate lower bound, as its own figure (in the Feels-like card, and as a separate dashed line on the temperature chart) rather than folded into the feels-like number above it.
It needs a forecast (From forecast and a tap on Get forecast); there is no manual sun setting. Like the wind chill, it is not applied below 10 °C, so a cold, sunny ride shows no sun boost at all — a known gap, not a claim that sun does nothing in the cold. Under Australian conditions Steadman found full sun adds up to about 8 °C at the sun’s highest, in the same range as the heat index’s own sun note further below.
10. Putting the two together
The two models are not the same physics, and they disagree by a few degrees in the middle, so switching between them at a single temperature would make the result jump. Instead the app fades from one to the other between 10 °C (where the official wind chill ends) and 20 °C:
Above 10 °C the wind chill formula is evaluated beyond its official range, and capped so it never says it feels warmer than the air. That extension is only used inside the fade zone, and it is a plausible shape, not something that has been validated. The result at 15 °C, 60 % humidity and 25 km/h: wind chill 13.4 °C, apparent temperature 9.5 °C, weight 0.5, so 11.4 °C.
| Air temperature | −10 | 0 | 10 | 15 | 20 | 25 | 30 | 35 | 40 °C |
|---|---|---|---|---|---|---|---|---|---|
| Feels like minus air (25 km/h, 50 % humidity) | −8.8 | −5.9 | −3.1 | −3.8 | −5.0 | −3.6 | −1.9 | +0.4 | +3.3 |
Note the small dip in the cooling between 10 and 20 °C. It is the seam between the two models, not a real effect. The absolute feels-like temperature still rises steadily with the air temperature.
A known limit. In the fade zone, in very dry air (20 % humidity or less) at high airspeed (40 km/h or more), a slightly warmer air temperature can feel up to 1 °C colder, and up to about 3 °C in the extreme corner of bone-dry air at 60 km/h. It never happens up to 25 km/h of airspeed or in humid air.
11. Standing still: the heat index
The apparent temperature includes the cooling from riding. If you stop, or crawl up a steep hill with no breeze, that cooling disappears. For that case the app shows the heat index of the US National Weather Service, which uses only temperature and humidity. It comes from Steadman’s work and Rothfusz’s regression fit (1990): a simple formula for milder conditions, and a longer regression once the result reaches 80 °F (about 27 °C), with two extra adjustments for very dry or very humid air. The regression is published at the National Weather Service; the page linked under Sources lists every coefficient.
The published algorithm has small steps where it switches between its parts (up to about 1.3 °C in humid air), the same kind of jump the wind chill cutoff would cause. The app smooths them: it blends the simple formula into the regression over 78–82 °F, fades the two humidity adjustments in over 78–80 °F, and ramps the whole effect in between 22 and 26 °C. From about 29 °C upwards the result is exactly the published value.
Example. At 32 °C and 70 % humidity the heat index is 40.4 °C, 8.4 °C above the air temperature and far above the 34.1 °C you would feel riding at 25 km/h.
The heat index assumes shade, and the National Weather Service notes that direct sunlight can add up to 15 °F (about 8 °C). It also carries the Weather Service’s heat-illness categories, which the app quotes when the standing-still value is high: from 103 °F (39 °C) heat cramps or heat exhaustion are likely and heat stroke is possible, and from 125 °F (52 °C) heat stroke is highly likely.
12. From numbers to colours
The map on the Temperature tab colours each stretch by feels like minus air temperature at that moment on that stretch. The steps are fixed, so a colour means the same thing on every route and every day:
| Difference from the air | Colour (strength) |
|---|---|
| More than 12 °C colder | strongest cold |
| 8 to 12 °C colder | strong |
| 5 to 8 °C colder | medium |
| 3 to 5 °C colder | light |
| 1 to 3 °C colder | slight |
| Within 1 °C of the air | grey |
| 1 to 3 °C hotter | slight |
| 3 to 5 °C hotter | light |
| 5 to 8 °C hotter | medium |
| More than 8 °C hotter | strongest heat |
Each colour arm is one hue running from light to dark, so a stronger effect is always more intense: darker in the light theme, lighter in the dark theme, so it always stands out against the map. The swatches below follow your current theme. Colours are compared with the air temperature at that moment, so a morning that warms up does not read as chill. In Fahrenheit the same steps are used and shown converted.
The “coldest tenth” and “hottest tenth” figures are the average feels-like over the coldest or hottest 10 % of the distance, not the single most extreme stretch, so one stray GPS point cannot set the headline number.
13. What this is not
- Not a measurement. It is a model of an average person. Individuals differ a lot, and what a cyclist feels is subjective.
- Sun is a separate, lower-bound estimate. The main feels-like numbers, the chart's solid line and the map colours do not include solar radiation. A separate “feels like in full sun” figure (section 9) approximates it from the forecast's shortwave radiation, but it leaves out reflected and long-wave heat and the sun's angle on the rider — all of which only add more warmth — and it is not applied below 10 °C.
- No clothing, no effort. The models do not know what you wear or how hard you work. Riding hard generates heat the models do not count.
- Constant speed, or constant power on a flat road. The clock and the airspeed use your cruising speed, or with steady power the speed that power gives on each stretch. Climbs, descents, stops and sprints are not modelled, so timing is approximate. The forecast is hourly, so that is usually accurate enough.
- Wind at 10 metres, hourly. The forecast wind is the standard 10 metre wind, and the wind at a rider’s height is lower, especially among trees and buildings. Gusts are not modelled. Between the hourly values the wind is interpolated, so a sudden shift within an hour is smoothed.
- Forecast resolution. Weather models resolve places a few kilometres apart at best, and three sample places are used. Local effects such as valleys, coasts, buildings and tree cover are not captured. This matters most for rain: a shower can be placed a few kilometres or an hour away from where it really falls.
- Very hot, dry air. Above about 35 °C in dry air, moving air stops helping and can add heat. The apparent temperature formula does not capture that.
- Not medical or safety advice. The heat-illness categories quoted are the National Weather Service’s for the standing-still heat index. Use your own judgement and local guidance.
14. How it is checked
The maths is covered by automated tests (in the tests folder of the repository, run with node tests/pure.test.js) that run against the code in this app itself: it is cut out of the page and run as it is. They include: the wind chill and heat index reproduce values published by the National Weather Service (for example 0 °F with a 15 mph wind gives −19 °F), and agree with an independent copy of the published Fahrenheit and mph formula across a grid of temperatures and speeds; the heat index equals the published algorithm from about 29 °C up, while the published algorithm is shown to have steps that the app’s version does not; the combined result has no jump anywhere; and faster air always feels cooler. For the wind: directions turn along the shortest arc, a forecast wind that does not change gives the same answer as a steady one, and a wind that reverses halfway along a route is judged stretch by stretch. For steady power: the speed solver returns your entered speed on a calm day, satisfies the power balance exactly on every stretch (headwind, tailwind and crosswind), and matches an independent calculation on the sample loop, and the clock follows the rider’s real speed. For rain and the charts: rain that steps by the hour it describes and blends between places, rain distances, classes and runs, the two CAPE thresholds and the thunderstorm code both able to raise the level, an hour taking the highest level of any one sample place even if the others do not, same-level thunderstorm stretches merged in ride order, and the points of the ride charts being in ride order with a clock that only increases. The steady-wind results were also compared with a stored set of 60 scenarios before and after the changing-wind work, and were identical. For reversing the route: the fetched places and the forecast are turned around exactly and turning them twice gives back the original, and 32 scenarios (two routes, four winds, both riding styles, with and without a forecast) gave the same results for the reversed route as the earlier calculation of the other direction, to within about 1 % of the route length. Those browser-level checks are done outside the repository. The source code is public at github.com/ubrowz/tailwind-tally, so all of the above can be inspected.
If you find a case where a number looks wrong, please say so on the issue tracker with the temperature, humidity, speed and wind you used.
15. Sources
- Osczevski, R. and Bluestein, M. (2005). The new wind chill equivalent temperature chart. Bulletin of the American Meteorological Society, 86(10), 1453–1458. journals.ametsoc.org
- US National Weather Service. Wind chill: formula, validity range and chart. weather.gov/safety/cold-wind-chill-chart
- Steadman, R. G. (1984). A universal scale of apparent temperature. Journal of Climate and Applied Meteorology, 23(12), 1674–1687. journals.ametsoc.org
- Steadman, R. G. (1979). The assessment of sultriness. Part I: A temperature-humidity index based on human physiology and clothing science, 861–873; Part II: Effects of wind, extra radiation and barometric pressure on apparent temperature, 874–885. Journal of Applied Meteorology, 18. Part I · Part II
- Rothfusz, L. P. (1990). The heat index equation (or, more than you ever wanted to know about heat index). NWS Southern Region Technical Attachment SR/SSD 90-23. weather.gov (PDF) · the equation with all coefficients
- US National Weather Service. Heat index: what it is, shade assumption, and the heat-illness categories. weather.gov/ama/heatindex
- Australian Bureau of Meteorology: thermal comfort and apparent temperature. bom.gov.au
- Steadman, R. G. (1994). Norms of apparent temperature in Australia. Australian Meteorological Magazine, 43, 1–16. The sun-exposed apparent temperature (radiation term
Q) behind the separate “feels like in full sun” figure. connectsci.au - Open-Meteo. GitHub discussion on its own
apparent_temperaturecalculation: the same Steadman sun formula, and the maintainers' note that real-world shortwave radiation reaches about 1100 W/m² at its strongest - the real-world maximum this app's ownSUN_ABSORPTIONconstant is solved against. github.com/open-meteo/open-meteo - Open-Meteo. Weather forecast API documentation: the hourly precipitation (sum of the preceding hour), precipitation probability, weather code (WMO) and shortwave radiation (global horizontal irradiance, preceding-hour average) variables. open-meteo.com/en/docs
- American Meteorological Society. Glossary of Meteorology: rain, with the light, moderate and heavy rain rates. glossary.ametsoc.org
- US National Weather Service Storm Prediction Center: CAPE and the weak/moderate/strong/extreme instability bands the two thunderstorm levels are drawn from. spc.noaa.gov
- Weather forecast data: Open-Meteo.com, licensed CC BY 4.0.