Skip to content

Coverage

unmap provides a worldwide vector basemap alongside Canadian geocoding and routing. Coverage is national where the source is national, and explicitly partial where it is not. Quote /layers/{id} for licence, attribution, and known_gaps. This page is the honest summary.

Terrain

DEM relief and elevation are worldwide within Web Mercator from global release 6, z0–12, approximately ±85.0511°. /elevation uses the same release. Vertical datums, native resolutions and terrain/surface models vary; this is not a uniform bare-earth DTM or national LiDAR. /coverage.json identifies the active source. Without a selected release, elevation is Canadian MRDEM-30 in CGVD2013.

Retained MRDEM-30 PNG relief at /terrain/4/… and Canadian contours at /contours/4/… (z9–13) keep their archive and provenance. Their watershed spill is not US coverage. Routing and geocoding remain Canadian. See Elevation API.

Names

Civic search uses OSM, OpenAddresses (CA), the National Address Register, and NRCan CGNDB. English and French are first-class on the same record. Official Indigenous names (including syllabics) are returned where CGNDB carries them. The corpus has an Inuktitut name for relatively few communities: that is a sourcing gap, not an engine gap. Community-stewarded names are out. OCAP® applies to Indigenous community data; open government name imports are not a partnership.

Boundaries

LayerOverlay tilesIdentify
municipalitiesLive on R2 (StatCan census subdivisions, OGL-Canada)Default /identify. Needs municipalities baked into the Land image.
parksLive on R2Not identify-capable
aboriginal-landsLive on R2 (OGL-Canada)Not identify-capable. Legislative/admin extents, not traditional territories.
survey.dls / survey.ntsLive on R2 (legal-land add-on)Ask for the layer; 403 without the add-on
survey.parcelsLive on R2 (legal-land add-on, also included in agriculture and energy). Paints from z10.Ask for the layer. PID search resolves too. BC only.

GET /identify?at=lng,lat defaults to municipalities. GET /data/query uses the same PostGIS tables for a bbox. Overlay tiles and identify/query are different paths: tiles can paint while the Land table is still empty.

Parks: the register, not the polygon

parks is the ECCC Canadian Protected and Conserved Areas Database (CPCAD, December 2025 edition, OGL-Canada). It is national and it is deliberately not the same thing as the green park polygon the basemap already draws: 22,438 protected areas, conserved areas and OECMs in every governance category Canada reports to the IUCN, terrestrial and marine, each carrying its designation type.

Features carry name (English), name_fr, name_ind (ECCC's Indigenous-language name, present on 95 areas), class (185 designation types), biome (T terrestrial/freshwater, M marine) and region. Marine areas that belong to no province have region: CA-MARINE.

Two honest limits. Areas appear when their reporting authority reports them, not when they are proclaimed, so a very recent designation can be missing. And ECCC's Indigenous Protected and Conserved Area flag is not ingested, so this layer will not tell you whether an area is an IPCA.

Coverage is national: every province and territory, plus Canada's marine areas.

Water, railways and remote roads: use the basemap

The basemap's own layers carry them. Water is the water layer at z0-14, railways are kind: rail inside the roads layer at z3-14, and roads are the roads layer at z3-14, all with name:fr and the name2/script fields that carry Indigenous names. Every style already draws them. Zoom 15 is stored and answers 204.

For an authoritative hydrographic product rather than cartography, CanVec Hydro and the Canadian Hydrospatial Network are the sources to ask about.

Remote / northern

profile: "remote" composes existing core overlays plus remote.airports (Transport Canada ANS points, 93 NAV CANADA towered and flight-service airports, remote add-on). Roads come from the basemap's roads layer through z14. Zoom 15 is stored and answers 204. Winter / ice / seasonal geometries are held: no licensed extract, and the Salles & Mullan compilation is OCAP®. Place names already search through OSM / CGNDB. Community-stewarded Indigenous data stays out (OCAP®). See Remote profile.

Mining

profile: "mining" composes AGS Alberta occurrences and prospectivity, Saskatchewan resource potential, and reused energy.mineral-tenure. Identify those mining ids via Land extra tables (mining add-on). Claim numbers identify as energy.mineral-tenure. This is not a national mine map. See Mining profile.

Routing

The Canada Valhalla graph is OSM plus NRN-class public roads already in that extract. auto, car, bicycle, pedestrian, and truck run on that graph. use_highways (0 avoid motorways/trunks, 1 prefer) is the one preference those road classes support. Terrain is the other axis: cycling and walking times account for grade from our own 30 m elevation model, and use_hills (0 avoid climbs, 1 indifferent) tunes it. Driving times do not vary with grade, because Valhalla's driving costing has no grade term. Industry profile presets do not change routing.

There is no winter-road graph, no resource-road costing, and no field-access network. avoid: ["winter"] is not offered because the graph does not model the restriction. See Routing API.

DLS (AB/SK/MB) and NTS parse in the geocoder. Lookup needs the Land image. FPS, Ontario concession/lot, and river lots parse only. Quebec and Atlantic cadastre are not sourced. See Geocoding.

Public transit

Static data is live and national. Transit routing and isochrones are live. /route?mode=transit and /isochrone?mode=transit run on a dedicated national graph built from every active Canadian GTFS feed the Mobility Database lists. A feed is routing:ready only after golden rides on the baked image return a transit leg naming it: 128 of 138 registered feeds on 2026-10-09. The rest stay in the graph unadvertised or out of it.

/transit/* is national for the routable feeds whose licence is cleared for republication: 80 feeds in seven provinces when it was first built nationally on 2026-10-09, rebuilt weekly. It holds back 48 routable feeds:

  • 44 whose terms neither the Mobility Database nor Transitland gives. They are held until the terms are found.
  • 3 whose terms restrict redistribution or commercial use: Laval, Lévis and Whitehorse.
  • VIA Rail Canada, whose frequencies.txt headways cannot be stated as exact departures.

STM (whose terms carve out the metro) and BC Ferries (terms not found) were already served and stay on it pending a licence decision. GET /coverage.json is the live list.

  • National feeds record Mobility Database terms, not a per-agency legal review. Three catalog downloads stay watch.
  • Every /transit/* response credits each feed it draws on in meta.attribution.
  • GO Transit and UP Express publish no calendar.txt, putting all service in calendar_dates.txt. GTFS permits this. The static API compiler supports it, and the normalizer synthesizes calendar.txt before Valhalla ingest so valhalla#5703 does not drop them in silence.

Every departure is schedule-based only and says schedule_type: "scheduled". Valhalla has no GTFS-Realtime support and none planned, so delays and cancellations would be invisible. arrive_by is unimplemented upstream, so the route contract accepts departure time only. There is no transit matrix. See Transit API for the static contract.

GET /coverage.json lists every assessed feed with its terms and its gap.

Reading the dates

GET /coverage.json is unauthenticated and unmetered. Cache-Control is public, max-age=3600 while the archive serving is the Canada extract, a readable planet, or a value that is not a build id. When BASEMAP_RELEASE names an eight-digit id whose object is not in the bucket, the same document is private, no-store. Every source in it carries a provenance block: source_updated_at (the publisher's own edition, when they state one), unmap_updated_at (when we last produced what is serving), build_id, version (the dataset version serving), content_hash, freshness_policy and freshness_status. The document states the basis vocabulary below in its own freshness_basis, as { en, fr }.

freshness_policy.basis says where those dates came from, and it is the field to read first:

basisMeans
manifestWritten by the job that produced the deployed artifact. Observed.
recordedCommitted in our registry by a pipeline run or a person. True when written, not watched since.
polledThe upstream feed is queried live, per request or every few minutes by a scheduled job, so the answer is minutes old at most.
unknownIngested and serving, with no date recorded for it. The date is absent, not guessed.
noneNothing is ingested, or the source is deliberately held.

unknown and none are different answers and never share a word: the first says we have the data and not the date, the second says we do not have the data.

freshness_status is current, stale or unknown, and unknown is a real answer we do not round up. stale means past the declared cadence in freshness_policy.interval, which is a statement about our refresh and not about the world: a source can change upstream without saying so. freshness_policy.stale_after is the instant the word stops being current, so you can recompute it against your own clock if you cached the document.

Each capability carries its own freshness_status, rolled up from its sources: stale if any one is stale, current only when every one is current, and unknown otherwise. A planned capability is unknown, because it has nothing to be fresh about.

The routing graph's build date is here too, as the routing source's unmap_updated_at, with the OSM extract behind it as source_updated_at. Both are null rather than guessed when the deploy that shipped the graph did not record them.

What we will not say

  • Complete Indigenous-language coverage.
  • National high-resolution terrain.
  • That aboriginal-lands maps nations or traditional territories.
  • That /identify returns municipalities before the Land bake includes municipalities.copy.
  • That routing follows resource, winter, ice, or field roads.

Next steps