How each map draws a road that changes from paved to unpaved. The web maps were compared on six such roads (Namibia C38, Bolivia RN3, Nepal NH48, Iceland 54, Australia 27, Alberta 40, zoom 15); the phone apps were checked by hand. The proposal and the five styles are in the article.
Data says what the map's data or tiles know about the surface, so whether a change is a style change only. Tracks and paths says how the map draws highway=track and paths, which an Unpaved signal on roads is best kept distinct from; they were compared on seven more views full of them (Thailand and Switzerland, zoom 15 and 14). Styles that fit lists the article's five styles (1 grain fill, 2 dashed centre line, 3 dashed fill, 4 dashed casing, 5 dashed fill full width) that look like none of the map's tracks, paths or tunnels; "4 on main roads" means the dashed outline only on red, orange and yellow roads. "To check" means not verified yet; corrections are welcome as a GitHub issue.
Show it, keep the class
| Map | Open source | Unpaved on main roads | Data | Tracks and paths | Styles that fit | Where to ask |
|---|---|---|---|---|---|---|
| OSM Carto (openstreetmap.org) | yes | Every class from zoom 6: a fine grain in the class colour | Full surface; explicit lists of unpaved values, so unknown values such as laterite are drawn as paved |
Brown dashes, rhythm by tracktype; paths salmon dots |
1 (in use) | GitHub |
| Americana | yes | Every class from zoom 12: lighter dashes of the class colour | Paved or unpaved, from OpenMapTiles, only from zoom 12 | None drawn | Any; 5 in use | GitHub |
| DMD2 | no | Every class seen: dark dashes in the fill | Counts laterite as unpaved (seen on test roads in its web planner) |
Coloured dashes inside the line, like its unpaved roads | 3 in use | DMD forum |
| CyclOSM | yes | From zoom 14, primary and below, as cycling surface dashes. surface=unpaved is in none of its lists (75% of unpaved km) and trunks get no surface rule |
Full surface and smoothness (explicit lists) |
Dark green dashes by bike type; paths teal dots | Its own dashes, in the road colour | GitHub |
| Tracestrack Topo | partly | Secondary and below: a dashed outline. Primary and trunk: no difference | A list of unpaved values that includes laterite; a value it does not know is drawn as paved (seen on test roads) |
Brown dashes; its unpaved minor roads look close to them | 1, 3; 4 on main roads (as today) | GitHub |
| cycle.travel | no (built with its maker's open tilemaker and glug) | A dashed dark outline; a secondary keeps its yellow (Canada), a tertiary turns from cream to white on its unpaved section (Switzerland). Map data in Europe and North America only | A list of unpaved values: rock, cement and asphalt_lanes drawn as paved (seen on test roads); tracktype counts |
Brown dashed and dotted lines, no outline; paved tracks drawn as minor roads; paths green dots | 4 in use (tunnels not checked) | OSM forum |
Show it, partly
| Map | Open source | Unpaved on main roads | Data | Tracks and paths | Styles that fit | Where to ask |
|---|---|---|---|---|---|---|
| OsmAnd | yes | Only with the "Road surface" or "Road quality" overlay, off by default, from zoom 14 | Full surface, smoothness and tracktype |
Default style: grey-green dashes by tracktype; paths dark grey dashes. Off-road style: black dashes on a tan underlay, paths dark red dashes; its "Road surface integrity" option recolours roads by surface, replacing the class colour. The OsmAnd web map uses the OSM Carto style instead |
1, 3, 4 | GitHub (#9465) |
| Locus Map | no | Depends on the map theme; not on the LoMaps web map | To check | Web map: thin dark dashes, tracks and paths alike | 1, 3, 4 | Helpdesk ideas |
Show it, lose the class
| Map | Open source | Unpaved on main roads | Data | Tracks and paths | Styles that fit | Where to ask |
|---|---|---|---|---|---|---|
| Humanitarian (HOT) | yes | Every class from zoom 11, but the road takes the residential colour, so an unpaved primary looks like a minor street | Paved whitelist; untagged unclassified and residential roads count as unpaved | Same fill as its unpaved roads, plus dashes; paths dots | Keep the class colour; then 1, 2, or 4 on main roads | GitHub (#104) |
| Ride with GPS | no | Drawn as dashed brown lines, like tracks | Paved or unpaved, from zoom 10; untagged roads and values it does not know, such as laterite, count as paved |
Two brown dashed lines on a pale fill, like its unpaved roads | 1, 3; 4 on main roads | Help center |
| OsmAnd Motorcycle styles | yes | Primary to residential with a gravel or dirt surface drawn like tracks; motorway and trunk never | Full surface and tracktype |
Five colour categories by surface and track type: green dashes for dirt and tracks without a grade, brown for easier ones; paths red dashes. Unpaved roads below trunk take the track colour and width | 1, 3, 4, on the road's own class colour instead of the track look | GitHub discussion #22 |
| AdvOSM (Garmin maps) | no: style rules not published (the TYP file can be read from any map) | Every class except service, as one yellow dashed line, so an unpaved trunk looks like an unpaved minor road | surface, smoothness, tracktype and width; warning icons for bad smoothness, low tracktype grades and narrow roads |
Tracks white dashes between grey edges, thinner than roads; closed tracks red dashes; footpaths red dashes | 1, 2, 3, 4 in the class colour | Contact form on the site |
| Gaia GPS (Gaia Topo) | no | surface is not used. Tertiary, unclassified and residential roads with smoothness very_bad or worse, or 4wd_only=yes, are drawn as tracks; trunk, primary and secondary never. The premium Overland layer shows surfaces |
smoothness (very_bad or worse) and 4wd_only, only to turn a minor road into a track |
Light brown-yellow fill with a dashed outline; paths dark grey dashes | 1, 3; 4 on main roads | Community forum |
Do not show it
| Map | Open source | Unpaved on main roads | Data | Tracks and paths | Styles that fit | Where to ask |
|---|---|---|---|---|---|---|
| Organic Maps, CoMaps | yes | No | Paved or unpaved, with good or bad, already in the map data (used for routing only) | Olive dashes, the same for every track; paths brown dashes; footways white dashes | 1, 3; 4 below primary (tunnels have a dashed outline) | GitHub (#8485) |
| OSMF Shortbread (vector.openstreetmap.org) | yes | No | Full surface in the tiles from zoom 11 |
None in the Spirit style; thin black dots on osm.org | 1, 3 (tunnels have a dashed outline) | Spirit PR #93 (open) |
| MapTiler (Streets, Outdoor) | no | No | Paved or unpaved, from OpenMapTiles, from zoom 12 | Thin plain lines; tan dashes in the layer on osm.org | 1, 3, 5 | MapTiler support |
| Komoot | no | No; surfaces only in the route summary | No surface in the map tiles, only tracktype; surfaces come from its routing data |
Own "Track" category: cream with a brown edge | 1, 2, 3 | Help center |
| Mapy.com (basic map) | no | No | Surface classes for minor ways only (asphalt, hardened road, field track); none on main roads | Thin dark grey dashes | 1, 3, 4 | Community forum, ideas |
| Kurviger | no | Only on the planned route, not on the map | To check | Faint thin grey lines | Any | Forum |
| AllTrails | no | No | Tiles not checked; the map draws laterite, unpaved and gravel roads alike |
Dashed double line; paths grey dots | 1, 3; 4 on main roads | Help center |
| Maps.me | no | No | To check | Dark olive dashes, the same for every track; paths brown dashes; footways white dashes (as Organic Maps) | 1, 3 | Help center |
| Guru Maps | no | No | To check | Brown dashes, no grade difference seen; paths thin light grey dashes | 1, 3, 4 (tunnels not checked) | Documentation, support in the app |
| OpenTopoMap | yes | No; surface only on paths | Full surface |
Thin solid black lines by tracktype; paths black dots |
1, 3, 4 | GitHub |
| Thunderforest (OpenCycleMap, Transport, Outdoors) | no | No | No surface on roads; surface only on paths (Outdoors tiles) |
White line with a dashed grey outline (Transport: faint grey lines) | 1, 3; 4 on main roads | Contact |
| Stadia Maps (Alidade Smooth, Outdoors) | no | No | Paved or unpaved, OpenMapTiles-compatible tiles, from zoom 12 | Thin plain lines | Any | Support |
| Strava | no | No | Paved or unpaved on roads from zoom 12, finer values on tracks; untagged roads and values it does not know, such as laterite, get none |
Cream with a brown edge; paths dark green dashes | 1, 2, 3 | Community Hub ideas |
| CalTopo | no | No | To check | Heavy black dashes; paths red dashes | 1 | Feature requests |
| Protomaps basemap | yes | No | No surface in the tiles: a schema change comes first | Thin plain lines | Any, after a schema change | GitHub |
Where the classifier goes
For open-source maps: where the surface is classified today, and which ready-made version of the paved whitelist fits. All versions pass the same 67 test cases.
| Map | Where the surface is classified | Version to use |
|---|---|---|
| OSM Carto | SQL lists in project.mml |
SQL |
| CyclOSM | SQL in views.sql |
SQL |
| Humanitarian (HOT) | SQL CASE in project.yml (repository archived in March 2025) |
SQL |
| Any osm2pgsql flex or tilemaker pipeline | Lua import script | Lua |
| OSMF Shortbread (Spirit) | The style itself: tiles carry the raw surface |
A whitelist expression in the style; JavaScript as reference |
| Americana, MapTiler, Stadia, OpenFreeMap | Upstream in OpenMapTiles (SQL) and Planetiler (Java) | Whitelist upstream; SQL as reference |
| OsmAnd | Rendering style rules (the map files carry surface) |
Rules in the rendering style |
| Organic Maps, CoMaps | The map generator already has a paved whitelist | Nothing: style change only |
| Protomaps | No surface in the tiles | Schema change first |
Tile schemas
A style can only draw what its tiles carry.
| Schema | Used by | Surface | From zoom |
|---|---|---|---|
| OpenMapTiles | Americana, MapTiler, Stadia, OpenFreeMap | Paved or unpaved | 12 |
| Shortbread | OSMF vector tiles | Full surface and tracktype |
11 |
| OsmAnd (OBF) | OsmAnd | Full surface, smoothness and tracktype |
12 to 14 |
| Organic Maps (MWM) | Organic Maps, CoMaps | Paved or unpaved, good or bad | with the road |
| Protomaps | Protomaps basemap | None | |
| Mapbox Streets v8 | Mapbox-based maps | Paved or unpaved, where OSM has it | not documented |