Updated My Road Surface Overlay Map In My Free Cycling Routing Web App to include Europe and Australia in addition to NA!


I, and my two roommates, have been working super hard for a year on a free cycling routing site, https://sherpa-map.com. I’ve announced its creation and some of its features from time to time here. One of our most exciting features is a full-on road surface overlay, showing every road in Europe, North America, and Australia that has a surface type in the OpenStreetMap database.

You can access this at the bottom of the interface, by simply pressing the “Show Overlay” button.

Black: Paved
Gray: Gravel
Brown/reddish color: Dirt
Tan: Unpaved (misc category that doesn’t fit the above)

This can be overlaid on a variety of different map types, including OSM/Google/Terrain/Mapbox, etc.

I’ve also augmented this data to include hundreds of thousands of miles of road that I used advanced AI classification techniques (segmentation AI + Resnet152 classification AI) to determine road surface. I also used some heuristics to essentially state “if residential road in town without existing surface type, paved” and “if primary/motorway road, without existing surface type, paved”.

After applying all of these techniques, I then rebuilt our routing software, Graphhopper, to utilize this data. So we can have some of the best paved/unpaved routing possible.

It has taken us so much time and effort to update this overlay to include Europe and Australia, and I’m so excited to finally share this!

Please enjoy, if you have any feedback, questions, or region requests, I’d be happy to hear it!


So many 1-2 men operations putting the companies to shame in cycling space.
Zr app

And many more around Strava.
Kudos to you both.


That cannot possibly be right, virtually all of the Netherlands is brown but I have never seen a dirt road in the Netherlands. Paris also seems to be a brown spot in France

Hmm, the data in those regions are user-submitted through Open Street Map, however, occasionally it is tagged as dirt/gravel/unpaved at some point then it could have been later paved, although that’s not a terribly common occurrence.

Further, feel free to open the left panel and switch it to Google maps and zoom in to verify, or right-click on the road and view the Google Street imagry if available.

So true, truth be it doesn’t take a hundred develops to make something powerful, it takes just a couple passionate ones, this is a side project too! Somehow we manage it while working full time. I’ll be honest, ChatGPT helps a ton :slight_smile:


Hi Eric, great effort by you guys with the site you’ve put together - the route planner seems to work very well based on my brief playing with it. I use Komoot for route planning, as I find Strava’s route planner horrible to use. A good feature in Komoot’s planner is being able to click on any point and get an indication, plus option to display, any Google Street View of that point, eg.

choose point…

then display…

A super useful feature to have if planning road routes, and one I use all the time.

Just out of interest, in what ways did you use it?

I needed that feature too, so I made it a simple right-click option on any road! I also added Google’s directions so if you’re planning on driving to the location you can get a sense of how long it might take you.



It the zoom, the more you zoom out the more the unpaved roads get amplified, so because eg Paris has a park with unpaved road the whole of Paris appears unpaved when zoomed out

Oh, it simply helps me program, not only can it write Javascript and Python to a decent extent, it helps me white board ideas and scope out features.

I’ve also used Dall-E to create graphics and the data science version to help validate portions of the physics simulator code.

I’ve even used it to teach me Rust i.e. “give me an intermediate Rust programming app example for me to build that will teach me correct locking mechanisms using Rayon crate for multithreading an application”.

I’ve also integrated ChatGPT into both the AI route insight button and I set it up to respond to emails people might send to the “do not reply” email box (if you create an account or forget your password you’re automatically emailed by this) in a snarky, sarcastic manner, as I told it “you are a sarcastic bot whose sole purpose in life is to respond to a “do not reply” email inbox”, I’m definitely on a list when the AI come for us :stuck_out_tongue:


@Eric_Semianczuk if someone accesses a route via a shared URL, then don’t show the gigantic “Sherpa Map” dialog when they follow the link - just show them the map/route., as the dialog just obscures the route, requires dismissing, and could be confusing in this use case, where the person following the link just expects to see a route map.

Fair point, it’s an active html/javascript prompt whenever the site is accessed, but it wouldn’t be terribly challenging to hide it when the link is activated for the second party. But hey, I did code it such that one could make a route and share a link to it without even creating an account! I get annoyed that RideWithGPS/Plotaroute/Komoot/etc. is always trying to get me to sign up for everything as much as possible…

Also, we’ve been working on a new interface for months, here’s a sneak peak

So I’ll probably slip your suggestion into the functionality of this new GUI.

1 Like

Yes, impressed with that! :+1:

1 Like

This looks pretty impressive. I’ve always been struggling with the road surface information when planning routes, often looking at maps from different sources and combining it with my own experience. This dataset looks like the best I’ve seen so far. Kudos!

Many routing tools simply default to paved when there is no data available, which, at least where I live, is almost always wrong. These heuristics you’re using seem to work pretty well. I’ll definitely be adding this to my tool-belt.

It’s definitely not flawless. I noticed a few mistakes like some pedestrian-only streets at the city center being marked as dirt and the same with cobblestones. Though, the latter I don’t really mind… that cobbled climb in my town is way worse than any dirt or gravel road.

Thanks a lot for the feedback! I’ll have to research and see if that’s an OSM data issue for some of what you mentioned, I could be a bit harsher with the “inside city limits, if residential roads and surface type is dirt surface type = paved”… regardless, I hope you continue to enjoy using it.

Hi Eric, I recently tried sharing a Sherpa route link with a friend, who told me “it didn’t work”, assumed the link was duff, and gave up…

  1. I suspected the massive “Sherpa-map” dialog box was the issue, fully obscuring the map/route behind it, and sure enough it was - I really suggest you make a change to hide that box for anyone accessing a shared link as you indicated you might. People tend to give these things one chance, and if it doesn’t appear to work first time they just move on.

  2. There was another issue also: for my friend (but not for me), when they clicked the shared route link on Mobile they also saw a regular browser error dialog in front of the massive “Sherpa-map” dialog, with error text something akin to “error in map data” - can’t remember exactly. They showed me this, and I was able to dismiss the error dialog, then touched to the side of the Sherpa-map dialog (dismissing that also), and the route was shown correctly, but they never got that far…

So, a couple of points of friction there; just one point of friction sharing ride routes with other people renders it unviable as an option, which is a shame!

Solid points, I’ll take these to heart in our new UI we’ve been developing from the ground up. Our current version has a couple of pain points, including what you had noted and it’s compatibility on non-desktop, mobile devices.

Here’s a sneak peek of what we’ve been building: Imgur: The magic of the Internet

I’ll ensure that the splash page at the beginning is far more inclusive of different device types and generally more responsive and straightforward, thank you for the insight.

1 Like

In the UK it seems to like going straight through town and city centres. Is there a way to tell it to not to? It picks gravel as an option, is there away to say stick to paved? Does it try and minimise either climbing or max gradient? How do I see all the steep climbs on the route?

Just had a play with it, I really like the style of the map, with the topography shown. Also find the option for weather etc super cool. There is definitively a lot of potential!

Unfortunately I also encountered some issues. I looked at the roads I regularly ride here in the UK. For some reason, zooming in makes a lot of the roads disappear. It still routes on them, when I click somewhere where I know a road is, and the route is visible, but the road is not.

Also the surface classification needs some work. Around here, modt of the smaller roads seem to be “unknown”. I’ve looked at some of my normal routes, and about 80% of it was “unknown” (I know that all of it us tarmac).

Maybe related to that, the gradients are also a bit off - I looked at some climbs I know, and the steep and shallow sections were not really in the right place, if they were there at all.

Hi, I’m glad you tried it out!

So, first, I’m based in the United State’s MidWest and I’ve only been able to use the AI surface classification on a handful of states as it’s very time consuming and costly, in Europe, that’s entirely human entered data visually represented from Open Street Map.

Further, I was informed yesterday that in the UK the roads North of Cambridge are not available at some of the lower zoom levels. I had rendered these, but it takes weeks to render and over a week to transfer them to the hosting server, with billions + of map image files, and they must have failed the file transfer or been lost at some point.

SO, long story short, the easist fix is to simply re-render them and stick them on the server, I’ve been rendering those tiles since yesterday, but it will probably take the entire week to finish, then a day or two to transfer, the good news is, I’m working on it!


Ah, I was thinking there must be some data missing! I think I tried an old version before and I thought it used to have the other zoom levels, so I was a bit confused. But if you have to re-render them, that makes sense.

Thanks for all the work by the way, I didn’t want to sound too critical, I think it’s a great project!

1 Like