The Adventure basemap
:::info Verified 2026-09-12
Written against the style the server builds today (app/services/basemap_style.py)
and checked in the rider app, the desktop client and headless renders.
:::
FastGIS serves its own vector basemap, Adventure, from tiles it builds itself (OpenMapTiles schema, Europe-wide, self-hosted glyphs and sprite). It exists because a general-purpose map answers a rider's first question — what is that road made of? — only by clicking. Adventure answers it at every zoom.

What the map shows
Surface is the first channel. Paved roads are white with a grey casing;
roads OpenStreetMap positively tags as unpaved are ochre with a dashed casing;
tracks are a brown dash from z11; paths a thin dash from z13, grey when paved,
brown otherwise, and cycleways a blue dash so a bike path never passes for a
sidewalk. A road with no surface tag is drawn as paved — in Europe an untagged minor road is usually
surfaced, and overclaiming gravel would cost the layer its credibility.
FastGIS bakes its own tiles with its own OpenMapTiles profile, and that
profile carries the surface from z8 instead of z12, so a gravel county road
is gravel on the regional view too. The tiles also carry tracktype,
smoothness, sac_scale, motor_vehicle and motorcycle on every way from
z12 — the difference between a grade-3 forest road and a grade-5 quad trail,
and whether a motorcycle may use it — ready for the style to read.
Roads by class. Motorways amber, trunk roads pale amber, everything else white, all with casings darker than both road and land — that contrast is what makes the network read as roads rather than texture. From z14 the network splits into tunnel, ground and bridge tiers so an interchange keeps its edges; ramps are drawn at 0.6 of their parent class; one-way arrows appear at z16. A footbridge or cycle bridge gets a grey deck under its dashes, and a bridge mapped as an outline in OpenStreetMap is drawn as the slab it is, so a harbour crossing never reads as a path across open water. Piers and pontoons are decks too, whether mapped as a way or an area, and a pedestrian plaza or quay is a flat tint rather than a dashed ring. A footway that runs along a jetty is drawn as the jetty: the tiles flag any way that is also a pier, however it is classed.
Harbours. Marinas, docks and harbour basins are a blue-grey tint with a firm edge from z12; breakwaters, groynes and quay walls are drawn as the structures they are, and a quay apron as a deck. OpenMapTiles carries none of these — they come from FastGIS's own tile profile, which is why Sanxenxo's marina and Bergen's moles used to be paper.
Barriers on the way. A gate, bollard, block or cattle grid where a road or track runs through it gets a small grey badge from z15, red when the gate is tagged locked — the fact a rider most wants before committing to a forest road. Only barriers on a rideable way are drawn; the bollards and gates of city footways and stairs are left out, and every badge yields to a road name or a POI in a collision.
Route shields on motorways, trunk and primary roads from z8–10, secondary
z11, tertiary z12. E-roads and motorways take the green plate, other numbered
roads the blue card, matching the signs. A road carrying two numbers
(E 16;E 39) shows one, E-route first.
Ferries are a dashed blue line from z7 and are named from z11 — in Norway a ferry is route information, not decoration.
Terrain. Hillshade from z5, contours at 50 m from z13 (500 m from z9, 100 m from z11), peaks with elevation from z9 by prominence, and passes (named saddles such as Stelvio or Gavia) with their own glyph from z11. Landcover distinguishes forest, scrub and heath, grass, farmland, rock, ice, sand and wetland; protected areas get a dashed edge and a name.
Places. Countries and states appear at the continental view; cities, towns, villages and hamlets step in by their OpenMapTiles rank so a regional view is not a wall of equal names; suburbs and neighbourhoods are a quieter upper-case tier from z12. Water bodies are named by class (seas and oceans large and spaced, lakes from z9); rivers are named along the line from z11. Airfields show their runways from z10 and their IATA code.
Points of interest are ambient badges drawn from the tiles. The default set
is what a GPS unit shows unasked — fuel, charging, food, cafés, lodging,
hospitals — and the rider app's POI panel toggles the rest: campsites, huts,
shelters, viewpoints, sights, pharmacies, repair, motorcycle parking,
supermarkets, shops, drinking water, toilets, ATMs and ferry terminals.
Each category has its own zoom at which it starts (fuel and charging from
z13, a bakery from z16) and badges are placed by a rider's priority, so fuel
wins a collision against a bar. In a dense centre each category also has a
budget that rises with zoom: fuel, charging, hospitals and ferries are never
held back, a restaurant badge is, because the panel — not the badge — is the
directory. How crowded a city centre gets is a rider setting — Badge
density, sparse / normal / dense / most — carried on the style URL as
?poibudget=, so the offline map keeps whatever was last chosen; the server
default is dense and can be changed fleet-wide with BASEMAP_POI_BUDGET.
Most puts badges first: a restaurant badge wins over a side-street name,
which comes back one zoom step closer, while the names of motorways, trunk and
primary roads always stay on the map. The tiles themselves carry only the categories the map
can draw: FastGIS's own profile prunes the rest at the source (a Bergen
centre tile went from 2 431 points of interest to 516) and ranks fuel,
charging, hospitals, campsites, huts, shelters and drinking water ahead of
everything else, so the density budget spends itself on what a rider stops
for. Each badge also carries what a rider chooses a stop by — the fuel types
a station sells, a charger's socket types and capacity, whether a campsite
takes tents or charges a fee, whether a shelter is a hut or a bus stop — and
springs and wells count as drinking water. The glyphs are CC0 silhouettes
from Maki and Temaki on FastGIS's own badge frame. The night palette is a
server render too (?theme=night): in the rider app, Adventure theme
under Settings → Map switches it to Day, Night, or Auto, which follows the
phone's appearance.
![]()
Modes
| Mode | What changes |
|---|---|
| Day | The look described above. |
| Night | Not an inversion: roads become the bright element and the land recedes, the way it looks with headlights on. Unpaved stays unmistakably ochre; shields keep their colours. |
| Surface | Paved roads recede towards the paper, unpaved roads and tracks take the ink, and untagged roads get their own state. For the ride where the surface is the question. |
| Language | Labels in the app's language where OpenStreetMap has one, the local name as fallback; settlements show the local name as a second line from z12, because that is what the sign says. The tiles carry the app's ten languages plus Norwegian no (OpenStreetMap's key for Norwegian exonyms, which nb falls back to) and nothing else — a pack should not carry Amharic. |

Where to switch it on
-
Rider app (Epona): Settings → Map → Adventure in the basemap grid. The same screen holds the Adventure theme (Auto / Day / Night), the badge categories, the badge zoom floor and the badge density; the app's language sets the label language. Offline packs cache the style, glyphs and sprite so the map works without signal — see Offline data.

-
Desktop client: the basemap picker; night is a separate entry.
-
Anything that speaks MapLibre: the style is one URL,
/tiles/basemap/{region}/style.json, with optional knobstheme=night,surface=1,lang=xx,poi=…(a comma list,allornone),poizoom=N(a floor on POI visibility),poibudget=sparse|normal|dense|max(badge density in dense centres), plusslope=1,curvature=1andunpaved=km|sharewhere those overlays exist for the region. Unknown or malformed values are ignored rather than rejected, so an older client always gets a map. The full parameter list is in the API reference.
Before and after
The 2026-09 look-and-feel programme, in four waves, one contact sheet each.
Ferries were in the tiles and never drawn. Now dashed blue from z7, named from z11.
Places by rank, suburbs as a quieter tier, rivers named, land-use tints.
Passes with their own glyph; peaks stepping in by prominence.
Runways, aprons and the IATA code.
CC0 glyphs, six more rider categories, badges placed by priority.
What is deliberately not drawn
Transit lines, aerialways, house numbers, helipads, car parks and the long tail of land-use classes. A rider never routes on them, and a busy city map is its own hazard. Every class the tiles carry is either drawn or listed as a decision in the style's coverage test, so an omission is never an oversight.