Making alternative to Strava Heatmap
Mapping bicycle rides in Berlin, Germany
tl;dr
Strava (service to track your fitness activity via GPS) has a feature called Global Heatmap which shows public rides uploaded by Strava users for one year. Many cyclists I know use Strava Heatmap to find the best route. But Strava Heatmap shows only density (road popularity). That is why I built my Strava Activity Map which also shows speed and filters rides by starting point.
Looking for the Best Route
I’m working on data visualisations the last couple of years and I do sporadic road cycling. Also, I’m a happy Strava Premium user. When I just moved to Berlin I was heavily using Strava Route Builder to discover directions for my workouts. It allows you to plan routes which are optimised for road popularity and saves a lot of time when planning workouts or bicycle trips. I love it!
A necessary part of route planning with Strava is the Global Heatmap. I use a Heatmap layer in the Route Builder to see popular alternatives and then adjusting the route to one of them.

So, what is wrong with Strava Heatmap?
I respect Strava for making such amazing tools as Global Heatmap and Route Builder. I think it’s more useful than Runtastic Routes. But as a cyclist and visualisation developer I see some issues to solve:
First: Strava is not updating Global Heatmap since 2015. Maybe it is related to newer Strava Metro service. I’m curious if routing is using same outdated data from 2015.
Second: Strava Heatmap is not differentiating types of rides. So when you see red line on Strava Heatmap you cannot tell if this road is good for Road Bike or for MTB. Eventually, you will end up on an unpaved forest track with your 23mm road bike tires. Other Strava users also pointing on this.

Making an alternative
Recognising the type of ride by GPS track is a challenging task. So, I approached it in a simpler way: I colored Strava activities by its average speed and let your brain to recognise patterns. The resulting map will show where the fast riders are going and where the fast riders are not going.

I thought it will be funny to color also by a speed at every particular point. Now you see every traffic light on your way.

How else can you get inspiration for your next route? What if you can see where other athletes from your neighbourhood go? Therefore I made a drag & drop filter for activities start point. You can see rides which are starting within selected bounding box.

Data
To get data for public activities, I used Strava API with some tricks. This map represents ~8k rides (~40M points) from May 2017 for the area of Berlin, Germany. It’s not every ride available on Strava for this area/period but it’s far enough for preprocessing on my laptop 😀.
Originally I wanted to color/filter map by ride distance to filter commuters. I calculated that 15% of total 8k rides are within 15km. But it makes only ~2% of total 40M points because short rides have fewer points. And filtering short rides does not make a noticeable impact on a map.
This is how activities are distributed by distance and speed:

Visualisation
I think the easiest way for me to make a heatmap which shows average weights (speed in this case) is to use HERE Visualisations, which my team develops 😉. But I wanted to check what other tools can do.
I tried Carto (they have beta vector tile support) and Mapbox Datasets API. But my data was too heavy for them (at least with free quotas). So I had to preprocess it on my laptop with a node.js script and then make vector tiles with Tippecanoe (nice that Mapbox guys open source all these tools!). When tileset was ready I hosted it on a Mapbox.
I did map rendering with Tangram.js. I like its flexibility. Tangram data transformations and shader modifications are very cool. But eventually, I did not use those features for this maps.

I can spend hours describing how visualisation was done and how it can be improved. If you are curious leave a comment and I will elaborate it with the following post.
Other cities
This map shows rides only from Berlin, Germany. But I’m considering adding other cities. If you want me to continue working on it, please share and like this post 😀. Also, you can vote for the next city by filling this form.

