Wind, crosswinds and bicycle speed

31 March 2021

On the internet, you’ll find many articles that discuss the theoretical effect of wind on cycling speed (plus articles on wind tunnel experiments, often paid for by companies that sell aerodynamic jerseys). But what about actual rides? And what’s the effect of crosswinds?

I did an exploratory analysis of about 125 rides around the Ronde Hoep, a polder to the south of Amsterdam. Below you see the the route.

In the annexes below, I’ll explain more about the route and about the Ronde Hoep in general. For now, let me say that the route has some characteristics that are helpful for this analysis: the start and end are near each other; the road surface is all tarmac (although quality varies); and there are no traffic lights or busy crossings. However, the route also has characteristics that cause noise in the data: some segments are somewhat shielded from the wind by trees and farms, and the route is quite winding.

I looked up historical weather data from the Royal Netherlands Meteorological Institute (KNMI). The data I used is from the weather station at Schiphol Airport, to the north-west of the route. If you zoom out a little on the map above, you’ll see the location of the weather station (according to the official coordinates, it’s actually located on a runway, but never mind that).

Note that the KNMI measures wind speed at a height of 10m. Wind speed is probably lower at cyclist height at the Ronde Hoep. This means that my analysis underestimates the effect of wind.

I examined a range of weather characteristics to see how they relate to cycling speed. The most striking finding is the role of temperature. For each degree rise in temperature, relative cycling speed (expressed as percentage deviation from the median) tends to go up by about 0.4 percentage points, which explains about a quarter of total variation in cycling speed. Note that all estimates in this article are based on a relatively small and noisy dataset, so don’t expect to find the exact same values under different circumstances.

Of course, what I really wanted to know is how wind affects cycling speed. When you ride into a headwind a strong wind will slow you down, and when you have a tailwind it will make you go faster, but what’s the effect on average cycling speed? My data suggest a negative correlation. Each m/s rise in wind speed coincides with a decrease in relative cycling speed of about 0.7 percentage point. The correlation is not very strong though.

Relative wind direction

I’m not only interested in the effect of wind on an entire ride, but also in the effect of wind dependent on the wind direction relative to cycling direction (true wind angle or TWA). A TWA of 0° means a headwind, 90° a crosswind and 180° a tailwind. To analyse the effect of headwinds, I only used segments with a TWA of 0°. Then I did the same for 10°, etcetera, until 180° (in each case, I used rounded, absolute values of TWA).

The chart shows that when you’re riding into a headwind, cycling speed is negatively correlated with wind speed: the stronger the wind, the slower you go. With a tailwind, it’s the other way around: the stronger the wind, the faster you go. That’s all pretty straightforward. However, note that the effect of a headwind seems larger than the effect of a tailwind. The analysis further suggests that a crosswind will slow you down as well.


The effect of temperature seems rather large. Possible explanations include lower air resistance as a result of lower air density; lower rolling resistance because of the effect of temperature on tyres; and perhaps that you’re less likely to wear a jacket with flappy sleeves when it’s warmer.

My analysis probably underestimates the effect of wind, most importantly because wind speed at the Ronde Hoep was probably lower than the measurements of the KNMI at Schiphol, at a height of 10m.

I know of two explanations that have been suggested for the effect of crosswinds on cycling speed: crosswinds increase the surface area of the bicycle and rider that is exposed to air resistance; and crosswinds may force you to make small corrections. Perhaps the effect of crosswinds is also responsible for the fact that the effect of headwinds appears to be larger than the effect of tailwinds: the lateral component of wind might add to the effect of headwinds but reduce the effect of tailwinds.

As I said, this is analysis is based on a small and noisy dataset with data from my own rides, so I have no idea how well this generalises. If you’re wondering about this too: analyse your own rides and let me know the results. If you work with Python: I’ve created a package for analysing bicycle rides.

Below you’ll find some background information: characteristics of the route; information about the Ronde Hoep; details about how I did the analysis; and caveats.

The route

The route around the Ronde Hoep (excluding the bit north of the A9 motorway) is just above 14 km long. On Strava, the clockwise version is more popular than the counter-clockwise version.

The Ronde Hoep route is quite winding, as illustrated by the curvature plot below.

The plot shows that the road frequently changes direction by more than 90°. This is especially the case with left turns, which makes sense since the plot is based on the counter-clockwise version of the Ronde Hoep ride.

For comparison, I’ve also created a curvature plot of the ride around the Naardermeer to the south-east of Amsterdam. This plot is based on the clockwise version of that route.

Turns are quite frequent, especially the on first kilometres along the Keverdijk. However, 90° turns are rare. There are a few sharp turns as you approach Naarden, and at about 11 km there’s a zig-zag through the tunnel under the Loodijk at the end of the Melkmeent.

The Ronde Hoep

Ronde Hoep, 14 January 2015. Photo dirkmjk

The Ronde Hoep is peatland that was reclaimed between 1100 and 1300. Ditches were dug from the rivers that form its borders, which resulted in the radial allotment pattern still present today. The polder is encircled by the rivers Bullewijk, Waver, Oude Waver and Amstel (formally: Amstel-Drechtkanaal).

The Ronde Hoep is one of the largest open areas of the Randstad urban area. Along the ring dike, there are some farms, a few draw bridges, and a pumping station. There are no roads within the ring dike, and the polder is an important habitat for meadow birds.

In the 1970s, plans were averted to build a motorway and to dig a canal through the polder. Municipalities also protested against the construction of an overhead power line through the polder, but the power company denied such plans existed.

Algemeen Uitbreidingsplan, kaart G. Fragment of map and legend

I’m not sure when people started appreciating the Ronde Hoep for its scenic value, but apparently they did so as early as the 1930s. A map published in 1934 (as part of the famous Algemeen Uitbreidingsplan) marks the ring dike as existing hiking and cycle path. In that same year, a newspaper reported that the second wind mill of the polder was to be demolished because of the maintenance cost; the remains were to be converted into a house. «Meanwhile, yet another bit of scenery disappears», the newspaper commented.

The main entrance to the Ronde Hoep is through Ouderkerk aan de Amstel. If you ride through Ouderkerk, follow the detour, so you don’t hinder pedestrians in the narrow and sometimes busy Dorpstraat.

Sources: Trouw; ARC; ONH; Wikipedia.


I analysed rides over the period 2013-2021, recorded with a Garmin Edge 800 cycling computer. Normally it is set to ‘smart recording’, which means that data points like location, time, speed and total distance are recorded «each time you change direction, speed or heart rate».

I created the Python bikeride package to parse gps files; create segments from pairs of records; add weather data for the corresponding date and hour; and calculate statistics like true wind angle.

For the analysis of entire rides, I aggregated segment data per ride. I left out a small number of segments where I probably stopped, for example to let a tractor pass (segments where the Garmin recorded a start or end speed zero or where duration was longer than 15 secs). I left out rides with a speed below 85% of the median speed, because these are likely rides on a city bike or otherwise rides that are not comparable.

For the analysis per TWA (i.e. wind direction relative to cycling direction), I took two more steps before aggregating segments per ride. First, I limited the analysis to segments with the corresponding TWA. Second, I threw out segments shorter than 20 metres. There are two reasons for this. First, with shorter segments, location errors will have a large effect on the calculated direction of the segment. Second, on a winding route, conditions of the previous segment will carry over to the next segment: it will take a bit of time for your speed to adapt to the change in relative wind direction. As a result, speed on short segments will to a considerable extent reflect the conditions of the previous segment (as well as the effect of slowing down in a turn).

For a number of reasons, it’s difficult to accurately measure the effect of especially wind. As indicated, wind speed at cyclist height will be lower, and turns in the road cause noise in the data. In addition, wind speed and direction may vary considerably and be affected by trees and other objects.


My analysis probably underestimates the effect of wind. First, wind speed at cyclist height is probably lower than wind speed measured by the KNMI at 10m. Second, I guess I probably make a bit more of an effort when riding into a headwind than when I have a tailwind.

My data will contain noise. First, because of the turns in the road. Second, because houses and trees have an effect on wind speed and perhaps directions. Third, wind speed and direction will vary considerably; this is not reflected in the hourly weather data I use.

Finally, my estimates will be affected by the distribution of wind speeds, temperatures and cycling speeds during the rides. Different circumstances might result in different estimates. The same apply to gear and rider position.

31 March 2021 | Categories: amsterdam, cycling, garmin, strava | Nederlands