Maps & geo
All map data is local OpenStreetMap vector data — there is no tile server. The dashboard draws the map from that data on a canvas; the same data answers every CLI query.
Loading map data
aios geo catalog "manchester" # browse downloadable regions (needs Internet, once)
aios geo fetch "greater manchester" # download + ingest a region
aios geo add path/to/extract.pbf # ingest a local .osm.pbf you already have
aios geo list # what's loaded, with coverage + sizes
aios geo update "greater manchester" # refresh; --reparse re-ingests the cached PBF offline
aios geo remove "greater manchester"
New map kinds (points of interest) only populate on ingest, so re-run aios geo update <region>
after upgrading.
Your current location
The one shared notion of “where you are” is geo:here. Everything reads it; several writers set it:
aios geo here 53.48 -2.24 # explicit lat/lon
aios geo here "Piccadilly" # a place name (geocoded from local data)
aios geo here gps # a one-shot GPS fix
On the dashboard, Set Home offers From map centre or From GPS location (a fix), and the marker shows its provenance and age (e.g. gps · 12s ago).
Finding and routing
aios geo near water # nearest of a kind to your location
aios geo route "here" "town hall" [--walk] # turn-by-turn directions
On the dashboard use the POI layers (grouped, with survival essentials on by default), the Nearest panel, and the Get Directions panel. The panel below the map is a stack of cards — each click/action adds a card at the top (so the previous one stays, buttons and all — that’s your “back”); ✕ closes a card and Clear all empties the stack. Or route to anything in one click: click any POI or spot on the map, or a Nearest result, and hit ➜ Directions here — it routes from your current location to that point and draws it (respecting the Walk toggle). A click also pre-fills the Get Directions “To” field. Driving routes follow the arterial (motorway/A-road) network for long journeys, so turn-by-turn works up to ~600 km straight-line; beyond that it returns distance + bearing only. Walking stays local (up to ~150 km) — nobody follows continental turn-by-turn on foot, and there’s no fast-road network to keep the graph small. Past a mode’s limit the device shows straight-line distance + bearing rather than loading most of the country’s road graph.
Terrain & the field tools (“Survey”)
Backed by offline SRTM elevation (DEM). When you add/fetch a region it offers to fetch that
region’s elevation tiles too (or --fetch-elevation/--no-elevation to skip the prompt); fetch them
later any time with aios geo dem fetch <region>.
- Sightlines —
aios geo viewshed— 360° terrain visibility from a point (what you can see / be seen from). - Best site —
aios geo siting— ranks spots to camp or settle by terrain, water, flood-safety, food-growing land, solar and power access. - Analyse this spot —
aios geo survey [<point>]— surveys one location (“what’s here?”): its terrain (elevation, slope, flood height-above-water), how far to water/food/health/shelter/ supplies/fuel/power/road/farmland, soil + climate growing-suitability, phone/radio signal (comms masts you have line-of-sight to — informative only, it doesn’t affect the score), and an overall off-grid suitability score. It’s the per-point analysis behind Best site — usesitingto find the best spot among many,surveyto interrogate one. On the dashboard, click any POI or bit of ground → Analyse this spot; the assistant answers “is this a good spot / what’s around here” the same way. - Signal —
aios geo coverage— which transmitting comms masts you have terrain line-of-sight to (the honest “will my phone work here”). - Relief shading — on the dashboard, Map → Terrain (Elevation & Temperature) toggles a hillshaded background
(the land shaded by height and slope, so ridges and valleys stand out at a glance) and contour lines
(isolines of equal height, at an interval that adapts to the zoom). It’s the “lay of the land” behind the
Survey tools, drawn straight from the same offline elevation data — no line-of-sight query needed. It works
at every zoom: close in it samples full-resolution elevation; zoomed out to a whole region it samples a
coarse overview (built once, cached under your data drive, refreshed automatically when you fetch/remove
elevation tiles). Contour lines only draw when zoomed in enough to be meaningful. Relief is off by
default — the shading is computed on the fly for each view, so it’s opt-in via the toggle (once on, it
stays on across restarts); the map itself stays fast whether or not you use it.
aios geo relief [<point>] [--radius KM]prints the elevation range + contour interval;aios geo relief --rebuildrefreshes the wide-zoom overview cache. - Temperature shading — Map → Terrain (Elevation & Temperature) → Temperature shading tints the map by
temperature (blue = cold → red = warm), drawn from the baked CHELSA climate grid, with a °C legend. A
Season selector switches between Annual mean, Summer (warmest quarter) and Winter (coldest
quarter) — all on one shared scale, so summer really does look warmer than winter. The climate data is
coarse (~1 km), but when you zoom in it’s downscaled with the elevation model (the lapse rate ≈ 6.5 °C/km
— so ridges read cooler and valleys warmer than the flat cell). Off by default; needs the region’s climate
grid (baked into the ISO; for a region you added,
aios geo grid fetch "<region>" climate). - Climate zones — Map → Terrain (Elevation & Temperature) → Climate zones colours the map by
Köppen-Geiger climate class (e.g. Cfb — temperate oceanic, BWh — hot desert, Dfb — humid
continental), with a legend of the zones in view. Where temperature shading says how warm, the
Köppen layer says what kind of climate — how seasonal, how arid, how harsh the winters. The zone also
shows in Analyse this spot. Baked into the ISO; for a region you added,
aios geo grid fetch "<region>" koppen. - Point-to-point checks:
aios geo elevation,aios geo los <from> <to>.
On the dashboard the terrain tools are the Survey buttons. They measure from the anchor chosen in
measure from (map centre, or home / GPS) — the same control Find Nearest uses — and each result
says which it used. home / GPS is disabled until a location exists, so the choice can never point at
a location you have not set. The CLI has no map centre to offer, so it keeps defaulting to here, with
an explicit place as the override.
Bookmarks
Save named map locations to jump back to — and the assistant understands them too.
aios geo bookmark add "Good Cascade Example" --at 53.41230,-2.33010 # or --at "<place>", or default to your location
aios geo bookmark list
aios geo bookmark remove "Good Cascade Example"
aios geo bookmark demo # generate a demonstration tour of the loaded region
On the dashboard, ★ Save this view stores the current centre + zoom (tick “Save POI layers” to keep
the layer set too); click a saved bookmark to jump back. Because a bookmark is a real location, its
name works anywhere a place does — aios geo near water "Good Cascade Example", routing to/from it,
or in chat (“route to Good Cascade Example”).
Auto (the dashboard button, or aios geo bookmark demo) auto-generates a handful of working examples
around your location — one each for the cascade, power trace, signal, sightlines, siting and town-centre
tools — a self-guided tour of what the system can do. It anchors on your current location if set, else the
map centre, else the region centre. A fresh install seeds these automatically on first boot. On a large
region it takes a few seconds; the dashboard builds it in the background and the bookmarks appear one by
one as they’re found.
Field status (correcting the map)
Offline, the map is frozen at its snapshot date — there’s no re-fetch to fix it. Your own observations are the only way to correct it: mark a feature’s real-world status and the whole system respects it.
Click a POI on the dashboard → Mark: verified / unusable / gone / clear. Or from the CLI:
aios geo near assembly # shows each result's id (fid) + any field mark
aios geo mark gone way:12345 # this assembly is destroyed
aios geo mark unusable way:678 # closed / flooded / blocked right now
aios geo annotations # list your marks
aios geo unmark way:12345 # clear it
- gone → excluded from Nearest (you get the nearest open one) and drawn struck-through.
- unusable → still shown, but flagged (amber) — temporary closures can carry an expiry.
- verified → confirmed good (a green ring).
- blocked → for a bridge or tunnel: the span is impassable, and directions reroute around it.
The mark button appears only when you click a bridge/tunnel. From the CLI:
aios geo mark blocked <fid>. - note → jot free-text intel on a place (“good water, reach via the north track”) without judging it
good or bad. Type in the note box and hit 📝 Note (a blue ring); the note also rides along if you set
a status. From the CLI:
aios geo mark noted <fid> your note here.
Marks are operator observations stored in the graph, keyed to the feature’s id — so they persist on your data disk and survive a data refresh.
Severing a crossing (bridge/tunnel gone or blocked) reroutes directions the same way a drawn
danger area (see Area marks, below) does — the system just avoids the road nodes on that span. It’s the precise way
to say “the only bridge over the river is out” without drawing a box over it. (Marking an ordinary road
segment — not a discrete bridge/tunnel — is not yet supported; draw a blocked area across it instead.)
Area marks (a whole region, not one place)
Some ground-truth is areal, not point-shaped — “this whole district is flooded”, “these streets are blocked”, “this area has lost power”. Draw a shape and tag it, and the whole system reasons over it as a durable overlay — the areal twin of a field mark.
On the dashboard: open No Go Areas, click ◯ Circle (drag from the centre outward) or ▭ Rectangle (drag one corner to the opposite corner) — a rectangle hugs a grid of streets/blocks more tightly than a circle. Then tag it flooded / blocked / no power / hazard, choose what travel it blocks, and add an optional note. Marked areas draw as translucent coloured shapes; click one to see it or remove it. Or from the CLI:
aios geo area add flooded --at 53.47,-2.25 --radius 1.5 "river burst its banks" # circle
aios geo area add flooded --shape rectangle --bounds 53.46,-2.26,53.48,-2.23 "district" # rectangle
aios geo area add blocked --at 53.48,-2.24 --radius 0.8 --blocks vehicle "debris — passable on foot"
aios geo area list # each area shows an id + its block level
aios geo area remove <id>
- flooded / blocked → any POI inside is treated like gone for Nearest (you get the nearest source that’s actually reachable), and the area is flagged with its reason.
- no power / hazard → informational: POIs inside are still returned, but flagged.
- An explicit point mark wins over the area — a
verifiedwell inside a flooded area stays reachable (“I can still get to this one”); an unmarked shop beside it is skipped.
Routing steers around blocking areas. Each area carries a block level — blocks everything
(default for flooded/blocked), blocks vehicles but walkable (a wadeable flood, a vehicle cordon), or
no travel effect (default for no-power/hazard). Get Directions then avoids areas that block your mode:
a --blocks vehicle area is skipped when driving but routed through on foot. It’s cheap — a route only
tests the handful of active areas — and needs no extra setup.
Area marks are operator-drawn geometry (not tied to any map feature), so they persist on your data disk and survive a data refresh. Circles and rectangles cover the field need; polygon/line shapes aren’t planned.
Networks & dependencies
aios geo trace # follow the power grid to the connected component + feeding substations
aios geo impact power|water # what loses power/water if the nearest source fails (inferred)
aios geo cascade # multi-hop: power fails → water works down → who else loses water
These are inferred by proximity from OSM data — explainable heuristics, not utility records.
On the dashboard, click the feature itself and the analyses appear as buttons on its card, alongside the usual field marks and directions: a power line offers ⚡ Trace this network; a substation offers ⚡ What loses power (one hop — the consumers attached to this substation) and ⚡ Full cascade (the water works that fail with it, and who then loses water); a water works offers 💧 What loses water. Each draws its result on the map, and every marker it draws can be clicked for the detail behind it.
Soil & climate (baked)
Beyond terrain, every spot also carries soil quality and climate figures (see Analyse this spot). These come from two raster layers that are baked into the ISO for its region, so they work offline with no fetch on a clean install:
- Soil — SoilGrids (ISRIC, CC-BY 4.0): pH / organic carbon / texture → a 0–1 growing-suitability.
- Climate — CHELSA v2.1 (CC0, public domain): mean annual temperature
- precipitation → a 0–1 growing-suitability, plus annual/summer/winter temperature grids.
- Climate zones — Köppen-Geiger, Beck et al. (CC-BY 4.0): the categorical climate classification.
For a new region you add yourself, fetch its grids once with aios geo grid fetch "<region>" (clips
SoilGrids + CHELSA + Köppen to that region); aios geo grid list shows what’s installed.
Data sources & licences
All map data is local and openly licensed: OpenStreetMap (© OpenStreetMap contributors, ODbL), SRTM elevation (public domain), SoilGrids (ISRIC, CC-BY 4.0), CHELSA v2.1 climate (CC0), and Köppen-Geiger climate zones (Beck et al., CC-BY 4.0).