Tiles and styles
The tile server (https://maps.updraftmaps.com) serves MapLibre styles, vector tiles (MVT), fonts (glyphs), icons and raster PNG tiles.
Styles
| Style | Address |
|---|---|
| Pilot eye, light | https://maps.updraftmaps.com/styles/pilot-light.json |
| Pilot eye, dark | https://maps.updraftmaps.com/styles/pilot-dark.json |
Pilot eye: contours and ridges stand out, power lines and cable cars are emphasised, open fields (landing candidates) are set apart from forest and scrub, cities are plain; Updraft's approved take-offs, landings and hazards are on top. You may change the style (colours, layers, labels); the attribution line stays and a changed map must not look endorsed by Updraft (Attribution).
3D terrain is off in the style; to turn it on: map.setTerrain({ source: 'terrain', exaggeration: 1.3 }).
Sources
Each source's TileJSON is at https://maps.updraftmaps.com/{source}; tiles at /{source}/{z}/{x}/{y}.
| Source | Type | Zoom | Content |
|---|---|---|---|
base |
vector (OpenMapTiles 3.16 schema) | 0–14 | Land cover, water, roads, cable cars, boundaries, labels |
contours |
vector, layer contour (ele, idx) |
9–14 | Contour lines (z≤10 100 m, z11–12 50 m, z13 20 m, z14 10 m) |
hillshade |
raster 512 px | 5–12 | Hillshade |
terrain |
raster-dem 512 px, terrarium |
5–11 | 3D terrain |
power |
vector, layer power (class, voltage, cables, name) |
9–14 | Power lines and towers (OSM) |
sites |
vector | 6–14 | Approved take-off and landing sites |
hazards |
vector | 9–14 | Hazards (power line, cable …) |
skyways |
vector | 7–14 | Skyway lines |
thermals |
vector, layer thermals |
8–14 | Thermal grid (below) |
regions |
vector | 4–12 | Flying regions |
The information layers (sites, hazards, skyways, thermals, regions) carry no exact pilot counts: they give confidence_tier (low, medium, high) and min_pilots (steps 3, 5, 10, 20, 50, 100) (Privacy).
Thermal grid
thermals is a function source: the breakdown is chosen with the query string of the TileJSON address, and the tile addresses carry it.
https://maps.updraftmaps.com/thermals all months, all day, all directions
https://maps.updraftmaps.com/thermals?month=7 July
https://maps.updraftmaps.com/thermals?month=7&hour_bucket=6 July, 12:00–14:00
https://maps.updraftmaps.com/thermals?hour_bucket=7&wind_sector=6 14:00–16:00, wind from the west
| Parameter | Values | Default ("all") | Meaning |
|---|---|---|---|
month |
1–12 | 0 | Local month (Europe/Istanbul) |
hour_bucket |
0–11 | 12 | Local two-hour slot: 0 = 00–02, 6 = 12–14, 11 = 22–24 |
wind_sector |
0–7 | 8 | 45° sector the 850 hPa wind blows from: 0 north, 1 north-east, 2 east … 7 north-west |
An invalid value returns an empty tile. H3 hexagons of ~5 km² at z8–10 and ~0.1 km² at z11–14; there are no tiles below z8, above z14 the client overzooms.
| Field | Meaning |
|---|---|
h3 |
H3 index of the cell |
avg_climb_ms |
Mean climb, m/s (rounded to 0.1) |
confidence_tier |
low, medium, high |
min_pilots |
"At least N distinct pilots" (3, 5, 10, 20, 50, 100) |
A cell is served only when enough distinct pilots (5 by default) found thermals in it. The wind sector comes from the model wind at the flight's take-off cell; flights without a model wind are only in the "all directions" breakdown.
Raster tiles
PNG tiles drawn from the same style, for clients that cannot draw vectors:
| Address | |
|---|---|
| 256 px | https://maps.updraftmaps.com/raster/pilot-light/{z}/{x}/{y}.png |
| 512 px (same area, high-density screens) | https://maps.updraftmaps.com/raster/pilot-light/{z}/{x}/{y}@2x.png |
| TileJSON | https://maps.updraftmaps.com/raster/pilot-light.json |
Zoom 5–16 (404 outside); dark theme pilot-dark. Raster tiles hold the base map only (land cover, water, roads, cable cars, contours, hillshade, power lines, labels); thermals, skyways, take-offs and landings are not in them. Example: flutter_map.
Caching
| Response | Cache-Control |
|---|---|
| Base, contours, hillshade, terrain, power (stable names) | public, max-age=3600 |
| Information layers and thermals | public, max-age=60 |
| Raster PNG | public, max-age=3600, stale-while-revalidate=86400, stale-if-error=604800, Last-Modified + 304 |
The base map is rebuilt monthly, power lines weekly, the thermal grid nightly. For offline use in a mobile app extend the cache freshness on the client or use region packs (PMTiles per region; base map, contours and terrain only).
Keyed and public access
| Path | Checks | Counted for you |
|---|---|---|
| Without a key | Coarse limit per client address; a plain 429 without a body when exceeded | No |
With a key (X-Api-Key header or ?key=) |
tiles scope, per-key rate limits; 401/403/429 with the API body |
Yes |
For browser requests the tile server only admits registered origins (CORS); tell us your site's origin when you ask for a key. Use the keyed path in your application: the limits are set per key, we can see your usage and reach you if something goes wrong.