National Open-Data Terrain
Government elevation services from national mapping agencies, ready to load as terrain sources
The built-in sources on Terrain and Basemap Sources are worldwide tilesets. This page covers the other half of the library: elevation services published directly by national mapping agencies, at resolutions global tilesets can't match — 0.5 m LiDAR for France and the Netherlands against ~30 m for a global DEM.
Load them from Sources → Terrain → Library, which opens a picker where each dataset is added or removed with one click (or all at once), graded against Mapterhorn and filterable by name, or open any of them directly with a ?terrainSourceA=<id> link. To see where each one has data before loading it, turn on its footprint in Coverage overlays.

Credit where it is due: Mapterhorn
This page only exists because Mapterhorn did the hard part first. It is an open, community-run project that solves the same problem from the other end: rather than talking to each agency's API live, it ingests the world's open elevation data — API endpoints, hundred-thousand-file bulk archives, S3 buckets, national download portals — normalises it, and republishes the result as one global, unified Terrarium raster tileset distributed as PMTiles, with a coverage map and full attribution for every contributing dataset.
Its source catalog is the best inventory of open elevation data anywhere: 153 sources across 32 countries, each with a licence, a resolution and a file list. Working through it makes the shape of the problem obvious — those 153 sources amount to roughly 690,000 individual files, overwhelmingly .tif, .asc and .zip bulk downloads. Only a handful are a single fetchable file, and only a minority of countries expose a live API at all.
That is the division of labour between the two projects. Mapterhorn gives you consistent global terrain with no per-country special cases. The sources below skip the ingest entirely and stream from the agency in real time, which keeps the native resolution — 0.5 m where the agency publishes 0.5 m — at the cost of only working country by country, at whatever speed that government's server manages. Mapterhorn is the sensible default; these are for when you want the sharpest possible data over one country.
The Mapterhorn issue tracking new data sources is also where several of the endpoints below were first discussed.
How these compare to Mapterhorn
| vs Mapterhorn | Count | Sources |
|---|---|---|
| ⬆️ Not in Mapterhorn | 5 | HKG 5 m vs 30 m global · HTI 1.5 m vs 30 m global · IDN 8 m vs 30 m global · MEX 15 m vs 30 m global · URY 30 m vs 30 m global |
| ⬆️ Finer here | 7 | CZE 0.5 m vs 5 m · CZE 2 m vs 5 m · NLD 0.5 m vs 5 m · NOR 0.25 m vs 1 m |
| ↔️ Same as Mapterhorn | 9 | CHE ? m vs 0.5 m · EST 1 m · FRA 0.5 m · GBR 1 m · NZL 1 m · USA 1 m |
| ⬇️ Finer in Mapterhorn | 11 | CAN 30 m vs 2 m · CHE 10 m vs 0.5 m · ESP 5 m vs 0.5 m · FIN 10 m vs 2 m · FRA 1 m vs 0.5 m · FRO 25 m vs 10 m · ITA 10 m vs 1 m · JPN 5 m vs 1 m |
Only a minority are an actual upgrade. That is worth stating plainly, because it is not obvious why a national agency's own API would ever be coarser than a re-published global tileset — and the reason is that the two get their data by different routes.
Mapterhorn ingests whatever an agency publishes in bulk: multi-terabyte download archives, S3 buckets, hundreds of thousands of tiles. Agencies routinely publish their finest LiDAR that way while exposing only a coarser, cheaper product over a live API — Italy publishes 1 m regional LiDAR for download but serves TINITALY at 10 m; Spain's PNOA LiDAR is 0.5 m in bulk while the IDEE tile service is ~5 m. So Mapterhorn can be finer.
It runs the other way too. Norway's hoydedata.no ImageServer resamples a 0.25 m grid on demand, four times finer than the 1 m product Mapterhorn downloaded. And where an agency publishes no bulk data at all, Mapterhorn has nothing to ingest and falls back to global 30 m, so any working API wins by default.
One caveat on both sides: Mapterhorn's delivered detail is also capped by its tileset's max zoom, whereas these APIs resample to whatever window is asked for.
The datasets
⬆️ Not in Mapterhorn
Countries Mapterhorn has no national source for, so it falls back to global Copernicus GLO-30 (~30 m). These add coverage that does not otherwise exist.
| ISO A3 | Country | Dataset | Served as | Endpoint | API resolution | Bulk download | Coverage | Mapterhorn | View |
|---|---|---|---|---|---|---|---|---|---|
HKG | HKG | Lands Department DTM 5m - LERC | lerc | tiles.arcgis.com | 5 m | same | Hong Kong SAR (LERC tiles, includes elevated roads) | not ingested | Open ↗ |
HTI | Haiti | CNIGS / World Bank LiDAR DTM 1.5m - VRT via titiler | VRT | opentopography.s3.sdsc.edu | 1.5 m | same | Nationwide, but renders only from z12 (VRT without overviews) | not ingested | Open ↗ |
IDN | Indonesia | BIG DEMNAS ~8m - ImageServer raw Float32 | WMS/WCS raw Float32 | geoservices.big.go.id | ~8 m | same | Nationwide | not ingested | Open ↗ |
MEX | Mexico | INEGI CEM 3.0 - TMS custom RGB encoding | XYZ tiles (Terrain-RGB) | gaia.inegi.org.mx | ~15 m | same | Nationwide (clips above ~5553 m) | not ingested | Open ↗ |
URY | Uruguay | IDEuy MDT nacional 30m - WCS 2.0 raw Float32 | WMS/WCS raw Float32 | mapas.ide.uy | 30 m | same | Nationwide (7–11 s per tile) | not ingested | Open ↗ |
⬆️ In Mapterhorn, but finer here
The agency's live API serves a finer grid than the bulk data Mapterhorn ingested.
| ISO A3 | Country | Dataset | Served as | Endpoint | API resolution | Bulk download | Coverage | Mapterhorn | View |
|---|---|---|---|---|---|---|---|---|---|
CZE | Czechia | CUZK DMP 0.5m (surface) - ImageServer raw Float32 | WMS/WCS raw Float32 | ags.cuzk.gov.cz | 0.5 m | same | Nationwide (surface model) | 5 m | Open ↗ |
CZE | Czechia | CUZK DMR 5G 2m - ImageServer raw Float32 | WMS/WCS raw Float32 | ags.cuzk.gov.cz | 2 m | same | Nationwide | 5 m | Open ↗ |
NLD | Netherlands | AHN DSM 0.5m (surface) - WCS raw Float32 | WMS/WCS raw Float32 | service.pdok.nl | 0.5 m | same | Nationwide | 5 m | Open ↗ |
NLD | Netherlands | AHN DTM 0.5m - WCS raw Float32 | WMS/WCS raw Float32 | service.pdok.nl | 0.5 m | same | Nationwide | 5 m | Open ↗ |
NLD | Netherlands | nDSM AHN DSM − DTM 0.5m - derived | dem-diff | diff: | — | — | — | 5 m | Open ↗ |
NOR | Norway | Kartverket NDH DOM 0.25m (surface) - ImageServer raw Float32 | WMS/WCS raw Float32 | hoydedata.no | 0.25 m | same | Nationwide (excl. Svalbard) | 1 m | Open ↗ |
NOR | Norway | Kartverket NDH DTM 0.25m - ImageServer raw Float32 | WMS/WCS raw Float32 | hoydedata.no | 0.25 m | same | Nationwide (excl. Svalbard) | 1 m | Open ↗ |
↔️ In Mapterhorn at the same resolution
No resolution gain. Worth using only when you want data straight from the agency rather than a re-published tileset.
| ISO A3 | Country | Dataset | Served as | Endpoint | API resolution | Bulk download | Coverage | Mapterhorn | View |
|---|---|---|---|---|---|---|---|---|---|
CHE | CHE | swisstopo Terrain 3D (quantized mesh, keyless) | quantized-mesh | 3d.geo.admin.ch | — | — | — | 0.5 m | Open ↗ |
EST | Estonia | Maa-amet LiDAR DTM 1m - WCS raw Float32 | WMS/WCS raw Float32 | teenus.maaamet.ee | 1 m | same | Nationwide | 1 m | Open ↗ |
FRA | France | IGN Lidar HD DSM - WMS raw Float32 | WMS/WCS raw Float32 | data.geopf.fr | 0.5 m | same | Mainland France + Corsica | 0.5 m | Open ↗ |
FRA | France | IGN Lidar HD DTM - WMS raw Float32 | WMS/WCS raw Float32 | data.geopf.fr | 0.5 m | same | Mainland France + Corsica | 0.5 m | Open ↗ |
FRA | France | nDSM IGN Lidar HD DSM − DTM 0.5m - derived | dem-diff | diff: | — | — | — | 0.5 m | Open ↗ |
GBR | United Kingdom | England EA LIDAR Composite DTM 1m - WCS raw Float32 | WMS/WCS raw Float32 | environment.data.gov.uk | 1 m | same | England only, ~75% covered | 1 m | Open ↗ |
NZL | NZL | LINZ national 1m LiDAR DEM - Terrain-RGB | XYZ tiles (Terrain-RGB) | basemaps.linz.govt.nz | 1 m | same | Regional 1 m LiDAR over an 8 m national base | 1 m | Open ↗ |
USA | United States | USGS 3DEP - ImageServer raw Float32 | WMS/WCS raw Float32 | elevation.nationalmap.gov | 1–10 m | same | Nationwide incl. AK, HI, PR | 1 m | Open ↗ |
USA | United States | USGS 3DEP - WMS raw Float32 | WMS/WCS raw Float32 | elevation.nationalmap.gov | 1–10 m | same | Nationwide incl. AK, HI, PR — same mosaic over the WMS front end | 1 m | Open ↗ |
⬇️ In Mapterhorn at finer resolution
Mapterhorn ingested higher-resolution bulk data than the agency exposes over its API — for these, Mapterhorn is the better choice.
| ISO A3 | Country | Dataset | Served as | Endpoint | API resolution | Bulk download | Coverage | Mapterhorn | View |
|---|---|---|---|---|---|---|---|---|---|
CAN | Canada | NRCan MRDEM 30m DTM - single national COG | COG | canelevation-dem.s3.ca-central-1.amazonaws.com | 30 m | 1 m | Nationwide, one single COG (via titiler) | 2 m | Open ↗ |
CHE | CHE | swisstopo swissALTIRegio 10m - single national COG | COG | data.geo.admin.ch | 10 m | 0.5 m | Nationwide, one single COG file | 0.5 m | Open ↗ |
ESP | Spain | TerrainRGB Nuevo servicio XYZ del Modelo Digital de Elevaciones de España: | XYZ tiles (Terrain-RGB) | xyz-mdt.idee.es | ~5 m | 2 m | Mainland + Balearics (not the Canaries) | 0.5 m | Open ↗ |
FIN | Finland | NLS/Paituli DEM 10m - WCS raw Float32 | WMS/WCS raw Float32 | paituli.csc.fi | 10 m | 2 m | Nationwide | 2 m | Open ↗ |
FRA | France | Ground change: IGN Lidar HD DTM (2021+) - RGE ALTI DTM (2009-2020) - derived | dem-diff | diff: | 1 m | same | Mainland + Corsica — ground change between the two IGN DTM generations | 0.5 m | Open ↗ |
FRA | France | IGN RGE ALTI 1-5m (mainland + overseas departments) - WMS raw Float32 | WMS/WCS raw Float32 | data.geopf.fr | 1–5 m | same | Mainland + Réunion, Guadeloupe, Martinique, Guyane, Mayotte, St-Pierre-et-Miquelon | 0.5 m | Open ↗ |
FRA | France | IGN RGE-ALTI Cquest repack - vrt:///vsicurl/https:// | COG | data.cquest.org | 1 m | same | Mainland France (RGE ALTI, community repack) | 0.5 m | Open ↗ |
FRA | France | RGE ALTI 1m, CQUEST COG repack (VRT) | VRT | data.cquest.org | 1 m | same | Mainland France (same data, via titiler) | 0.5 m | Open ↗ |
FRO | Faroe Islands | Umhvorvisstovan FO_DSM_2017 25m - ImageServer raw Float32 | WMS/WCS raw Float32 | gis.us.fo | 25 m | same | All islands (satellite DSM, coarse) | 10 m | Open ↗ |
ITA | Italy | INGV TINITALY 10m - WCS 2.0 raw Float32 | WMS/WCS raw Float32 | tinitaly.pi.ingv.it | 10 m | same | Nationwide | 1 m | Open ↗ |
JPN | Japan | GSI/GSJ seamless elevation tiles 5-10m - Terrain-RGB | XYZ tiles (Terrain-RGB) | gbank.gsj.jp | 5–10 m | 1 m | Nationwide (5 m where DEM5 exists, 10 m elsewhere) | 1 m | Open ↗ |
API resolution is the grid the live service streams (what the viewer renders and what the grading above uses); Bulk download is the finest grid the agency advertises for download, which is what Mapterhorn itself ingests. The sample picker in the app can regrade by either.
65 national datasets, generated at build time from lib/custom-sources.json.
Regional datasets
Some of the best data on this page covers a state or a province rather than a country. These sit below the divider in the Sample picker and are left out of Load all so the default list stays national, but each is one click away there and loads from a ?terrainSourceA=<id> link.
33 regional datasets. Kept out of Load Sample Sources so the list stays national, but each remains importable with a ?terrainSourceA=<id> link.
Beyond those, a second tier was verified to the same standard but deliberately left out of the library, because a national list is more useful than an exhaustive one. Each is a normal endpoint you can paste into Add Custom Source:
| ISO A3 | Region | Dataset | Resolution | Served as | Endpoint | Notes |
|---|---|---|---|---|---|---|
AUT | Steiermark | GIS Steiermark ALS DGM 1 m (+ DOM) | 1 m | WCS 1.0 (ArcGIS), F32 | gis.stmk.gv.at | COVERAGE=4 is the full model (1 and 2 are hillshades). Dachstein 2994.6 m (true 2995). DSM on ALSHoeheninformation_1m_UTM33N. CC BY 4.0 AT. |
DEU | Baden-Württemberg | LGL DGM1 (INSPIRE WCS) | 1 m | WCS 1.0, F32 | owsproxy.lgl-bw.de | COVERAGE=EL.ElevationGridCoverage, FORMAT=GeoTIFF. Feldberg 1494.3 m (true 1493). GDAL nodata tag wrongly says 0. dl-de/by-2.0. |
DEU | Brandenburg + Berlin | LGB DGM1 | 1 m | WCS 1.0, F32 | isk.geobasis-bb.de | COVERAGE=bb_dgm, FORMAT=image/tiff (GeoTIFF errors). Teufelsberg 120.07 m (true 120.1). Nodata −9999. dl-de/by-2.0. |
DEU | Mecklenburg-Vorpommern | LAiV DGM1 (+ DOM1) | 1 m | WCS 1.0, F32 | www.geodaten-mv.de | COVERAGE=mv_dgm; DSM mv_dom1 on /dienste/dom_wcs. Königsstuhl 123.8 m. No conditions of use, attribution required. |
DEU | Niedersachsen | LGLN DGM1 (+ DOM1) | 1 m | WCS 1.0, F32 | opendata.geoservices.lgln.niedersachsen.de | COVERAGE=ni_dgm1; DSM ni_dom1 on /dom_wcs. Wurmberg 972.07 m (true 971). Outside the Land returns bare 0. CC BY 4.0. |
DEU | Sachsen-Anhalt | LVermGeo DGM1 (INSPIRE WCS) | 1 m | WCS 1.0, F32 | geodatenportal.sachsen-anhalt.de | COVERAGE=1 (literally). Brocken 1141.16 m (true 1141.2). dl-de/by-2.0. |
ITA | Emilia-Romagna | RER DTM 5×5 LiDAR mosaic | 5 m | WCS 1.0, F32 | servizigis.regione.emilia-romagna.it | COVERAGE=DTM5X5_RDN32_RMD. Monte Cimone 2162.5 m (true 2165). The 0.5 m WCS returns degenerate TIFFs. CC BY 4.0. |
ITA | Sardegna | RAS DTM 10 m island-wide (+ 1 m partial) | 10 m / 1 m | WCS 1.0, F32 | webgis.regione.sardegna.it | COVERAGE=raster:DTM_10M_ALTIMETRIA_REV01 covers the whole island (La Marmora 1827.9 m); the 1 m mosaic only covers surveyed corridors. |
ITA | Toscana | GEOscopio DTM 1 m LiDAR (partial) / 10 m / DSM 2021 | 1 m / 10 m | WMS GetMap, F32 | www502.regione.toscana.it | One of the rare WMS servers whose image/tiff is real Float32. LAYERS=rt_morfologia.iddtm.1m.irs (1 m, partial), .iddtm.10m.rt (full), .iddsm2021.1m.rt. Monte Amiata 1730.7 m. |
ARG | Córdoba | IDECOR MDE 5 m (dem_5m_cba_ext) | 5 m | WCS 1.0, Int16 | idecor-ws.mapascordoba.gob.ar | Cerro Champaquí 2787 m (true 2790). Nodata 32767. Also MDE-Ar 30 m and MERIT 90 m clips of the province. |
AUS | Murray–Darling Basin | MDBA 1 m LiDAR DTMs + srtm_1sec_demh_v1 | 1 m / 30 m | ArcGIS ImageServer, F32 | gis.mdba.gov.au | 25 ImageServers; Kosciuszko 2223 m via the SRTM DEM-H one. Needs noData=-9999&noDataInterpretation=esriNoDataMatchAny. |
CAN | New Brunswick | GeoNB LiDAR DEM 1 m (DEM_Raw_MNE_Brut) | 1 m | ArcGIS ImageServer, F32 | geonb.snb.ca | Mount Carleton 815 m (true 820). DSM twin DSM_Raw_MNT_Brut. Pass noData=-9999. |
FIN | Helsinki | City of Helsinki Korkeusmalli 2021 1 m | 1 m | WCS 2.0, F32 | kartta.hel.fi | Needs the __wcs2subset=X,Y,ij rewrite (bare i()/j() scaleSize). Nodata -32767. CC BY 4.0. |
NLD | Zeeland waters | Rijkswaterstaat bodemhoogte_zeeland bathymetry | ~20 m | WCS 2.0, F32 | geo.rijkswaterstaat.nl | Bed level in NAP metres, Westerschelde channel −27 m. Same ij scaleSize rewrite as Helsinki. CC0. |
USA | Kentucky | KyFromAbove 2 ft DTM (Phase 2, Z metres) | 0.6 m | ArcGIS ImageServer, F32 | kyraster.ky.gov | Statewide, finer than 3DEP. Lexington airport 297 m (true 298). |
USA | Vermont | VCGI LiDAR DEM / DSM 0.35 m | 0.35 m | ArcGIS ImageServer, F32 | maps.vcgi.vermont.gov | Finest statewide grid found in the US; first-return DSM twin IMG_VCGI_LIDARDSM_SP_NOCACHE_V1. |
USA | Oregon | DOGAMI DTM / DSM mosaics (Z feet) | 0.9 m | ArcGIS ImageServer, F32 | gis.dogami.oregon.gov | LiDAR footprint only, not the whole state. Values in feet. |
USA | Iowa | ISU lidar_2020_dem / lidar_2020_dsm 1 m | 1 m | ArcGIS ImageServer, F32 | ortho.gis.iastate.edu | Statewide DTM and a draft DSM. |
USA | Connecticut | CT ECO 2023 lidar DEM 2 ft (Z feet) + DSM | 0.6 m | ArcGIS ImageServer, F32 | cteco.uconn.edu | DSM at MaxSurfaceHeight_2023. Values in feet. |
USA | Illinois | ISGS statewide lidar DEM (Z feet) | 0.3 m | ArcGIS ImageServer, F32 | data.isgs.illinois.edu | Per-county DSM services on the same server. Values in feet. |
USA | New York | NYS ITS Latest_DEM 1 m mosaic | 1 m | ArcGIS ImageServer, F32 | elevation.its.ny.gov | Newest / highest-resolution-on-top statewide mosaic. |
USA | North Carolina | NC OneMap DEM03 QL2 (Z feet) | 0.95 m | ArcGIS ImageServer, F32 | services.nconemap.gov | Declared nodata −9999. Values in feet. |
USA | Wisconsin, Ohio, Louisiana, Massachusetts, New Jersey, Alaska | State DEM ImageServers | 0.3–5 m | ArcGIS ImageServer | dnrmaps.wi.gov … | All verified F32 with CORS: WI EN_DEM_from_LiDAR, OH OH_DEM_test (feet), LA 2017_2024_Louisiana_1M_DTM (feet), MA ELEVATION_LIDAR_INT_2013to2021 (Int16), NJ NJ_10ft_DEM (3 m), AK IFSAR_DTM (5 m). None finer than 3DEP. |
Two are worth singling out. Queensland serves a best-available mosaic of 0.5–1 m drone and aircraft LiDAR — ten times finer than the 5 m national grid, and Geoscience Australia publishes no national equivalent at all. And Aguada Fénix is not a mapping agency product: it is the airborne survey that revealed the largest known Maya monumental construction (Inomata et al., Nature 2020), a platform invisible from the ground and unmistakable in a hillshade. That is the case for LiDAR archaeology in one dataset.
Global and polar datasets
Not every good source belongs to a country. These are worldwide, polar or sea-floor products from research consortia, listed under Global in the sample library:
Two things to know. ArcticDEM and REMA are ellipsoidal: the Polar Geospatial Center publishes heights above the WGS84 ellipsoid, so summits sit tens of metres off their map values and open sea reads +28 m off Greenland. And the two ML terrain models, GEDTM30 and ANADEM, are explained in the next section.
Copernicus GLO-30, the supra-national fallback
Most of the world has no national elevation API at all. What fills that gap is Copernicus GLO-30 — a free, global 30 m DEM from ESA and Airbus, and the single most important dataset on this page: it is the base layer of Mapterhorn, the source behind Digital Earth Africa, and the fallback anywhere a country publishes nothing.
Several organisations re-serve the same GLO-30 pixels in different shapes:
| Provider | Scope | Served as | Endpoint | Status here |
|---|---|---|---|---|
| Digital Earth Africa | Africa + Arabia | WCS 2.1, raw Float32 | ows.digitalearth.africa | Shipped as a sample source |
| Mapterhorn | Worldwide | Terrarium PMTiles | tiles.mapterhorn.com | Built in as the default terrain source |
| OpenTopography | Worldwide | Single global .vrt over COGs | opentopography.s3.sdsc.edu | Not shipped — VRT header is 11.7 MB per read |
| AWS Open Data | Worldwide | Per-1° COGs | copernicus-dem-30m.s3.amazonaws.com | Not usable — bucket sends no CORS header |
ANADEM and GEDTM30 are a newer idea worth understanding, both distributed through OpenTopography. Rather than re-serving GLO-30 unchanged, they apply machine learning to correct it towards bare earth — GLO-30 is a surface model, so over the Amazon it measures the canopy, not the ground, and can sit tens of metres high. ANADEM covers South America; GEDTM30 is global and calibrated against GEDI spaceborne LiDAR. Neither is finer than 30 m — the gain is vertical accuracy under forest, not detail. See OpenTopography's note on ML-derived terrain models and the GEDTM30 discussion.
Digital Earth Africa is the one worth loading directly: it is the only keyless live raw-elevation service covering any African country, and it turns a continent of nothing into a working source. It is not, however, finer than Mapterhorn — it is literally the same GLO-30 data, just fetched live from an API instead of a tileset.
Why these and not others
Surveying national mapping agencies worldwide turns up two consistent traps.
No agency anywhere publishes Terrarium tiles. Only two national agencies publish a pre-rendered elevation tile pyramid at all (Japan's GSI and Mexico's INEGI), and both invented their own encoding — Mexico's is close enough to Terrain-RGB to be described with custom factors, Japan's is not, and Japan only loads because the Geological Survey of Japan re-serves GSI's tiles as genuine Terrain-RGB. Everything else serves raw rasters on demand.
FORMAT=image/geotiff on a WMS is usually a lie. Germany's BKG, the UK Environment Agency, Portugal, Croatia, Ecuador and Canada's MRDEM all advertise it and all return an 8-bit RGB colour ramp — a picture of elevation, not elevation. The raw values live on WCS or on an ArcGIS ImageServer, never on the WMS. A related trap: ArcGIS estates usually expose MapServer (rendered) rather than ImageServer (raw), which is what rules out Slovakia, Colombia, Argentina and Australia.
Some excellent data sits behind a login. NASA's High Mountain Asia 8 m DEM (HMA_DEM8m_MOS, stereo from commercial imagery, 2014–2016, 26–46 N by 67–103 E) is the natural pre-event reference for the Himalaya, and Mapterhorn does not carry it (its Nepal coverage is Copernicus GLO-30). It needs an Earthdata account, which the app cannot supply, so it is not in the library; download it and pick it as a local COG, or serve it yourself.
The two best global commercial DEMs are in the same position, one step further out. Vantor Precision3D (1 m DTM/DSM, the maxar-sdx collection) and Airbus WorldDEM Neo (5 m DSM, airbus-dem) are both browsable through NASA's CSDA catalog in STAC search — the catalog is open and CORS-open, so you can see exactly what exists where — but the assets are s3:// URIs behind an Earthdata login, a EULA and per-request approval, so nothing streams. Getting proper API-key access to both is on the list: Airbus runs a OneAtlas elevation API whose free trial includes the WorldDEM layer, and Vantor sells Precision3D through its own delivery platform. Either would become an ordinary custom source with a key, the way Mapbox and MapTiler already are — the app has nowhere to put those credentials yet because there has been nothing to point them at.
Everything listed above was verified by decoding a real tile and checking it against a known summit or sea-level point before being added.
How they are served
Three different transports end up as the same raster-dem source in the app:
- WMS/WCS raw Float32 — the app requests a GeoTIFF per tile and re-encodes it to Terrarium in the browser, via the
float32dem://protocol. WCS 1.0 works unmodified because itsBBOX=is shaped exactly like a WMSGetMap; WCS 2.0 needs a rewrite tosubset=per axis, which a&__wcs2subset=X,Ymarker on the URL performs. - ArcGIS ImageServer —
exportImagewithformat=tiff, which returns raw Float32 and takes the samebbox=as a WMS, so it reuses the identical code path (USGS 3DEP, Czechia). - Single COG — Switzerland and ANADEM are each one national file. Neither is in Web Mercator (LV95 and geographic EPSG:4674), and the in-browser COG reader does not reproject, so these are pinned to titiler with the source's Always serve via titiler switch, whatever the global COG setting says.
- XYZ tiles — a normal tile pyramid. Spain, New Zealand and Japan are standard Terrain-RGB. Mexico is not: its layer is named "terranium" but packs elevation with Terrain-RGB's factors and a
baseShiftof 1000 instead of 10000, so it is configured with custom RGB encoding and reads ~9 km too low without it.
Surveyed, but not API-usable
These countries do publish a national elevation product — often an excellent one — that still cannot be consumed here. Each row is a reproduced failure, not an assumption.
| ISO A3 | Country | Product | Served as | Why it can't be used |
|---|---|---|---|---|
COL | Colombia | IGAC municipal MDT/MDS | 504 ArcGIS ImageServers | Live, CORS-clean, correct metadata — and the pixels are synthetic. Every Ov_i02_L0* overview is corrupt above 10 m/px, and below it the base rasters decode to an 8-value dither oscillating between the service's own minValues and maxValues. Confirmed by reading raw IEEE floats out of the uncompressed TIFF without GDAL. Worth reporting to IGAC. |
ECU | Ecuador | IGM mapabase:igmdtm | Cascaded WMS | Real national DTM including Galápagos, and GetFeatureInfo returns genuine metres (5737.7 m near Chimborazo) — but the layer is cascaded and WMS-only, absent from WCS, and image/geotiff returns 8-bit RGB. One pixel per request, no raster endpoint. SIGTIERRAS' own 3 m LiDAR host resolves but every TCP connect times out. |
PHL | Philippines | DREAM/PhilLiDAR 1 m | GeoServer | lipad-geoserver answers but 502s on every OWS path across repeated retries; the one endpoint that responds proxies a test instance publishing a single vector tile-index layer. No DTM coverage exists to serve. |
ARG | Argentina | IGN ign:mde | WMS | Advertises image/geotiff and has CORS, but returns 3-band 8-bit RGB — a rendered colour ramp. WCS is explicitly disabled. |
BRA | Brazil | IBGE national MDE | Download only | The WCS publishes 14 coverages, none elevation; of 10,646 WMS layers none is a national DEM raster. Distribution is per-state GeoTIFF download. |
CAN | Canada (Quebec) | Forêt ouverte LiDAR 1 m | Per-sheet COGs | The WMS is rendered RGB and its WCS exposes zero coverages. The underlying 1 m COGs are keyless with CORS, but there are 2,630 separate sheets and no mosaic. |
SVN | Slovenia | ARSO Slovenija_DMR 1 m | ArcGIS ImageServer | Now live and the data is flawless — 1 m Float32, Triglav decodes to 2863.2 m against 2864 m true — but CORS is allowlisted to ARSO's own domains, so a browser cannot read it. Would work behind a proxy. |
AND | Andorra | IDE Andorra relleu | WCS 1.0 | An undocumented WCS exists with 17 coverages, but no MDT among them — the relief layer returns 3-band 8-bit RGB shaded relief. |
ALB | Albania | ASIG DSM / DTM 2015 | WMS hillshade | Only Dsm_Hill_Group and Hillshade_2015_group are published; the WCS lists hundreds of coverages but none from the DSM/DTM workspaces. |
BIH | Bosnia & Herzegovina | FGU Digitalni model reljefa 5 m | GeoServer | Every OWS path returns HTTP 401 — login required across all 125 workspaces. |
IRL | Ireland | GSI Open Topographic LiDAR | ArcGIS ImageServer | All nine services are hillshade — bandCount 1, pixelType U8, '_HS_' in every name. The DEM 10 m is an INSPIRE view service derived from contours. |
ISL | Iceland | ÍslandsDEM 2 m / 10 m | GeoServer WCS | The coverage named 'islandsdem_hillshade_10m' is Float32 — so it survives a dtype check — but its values run 0 to 254.6: a hillshade stored as float. The 14.9 GB full DEM is downloadable but sends no CORS. |
LIE | Liechtenstein | DHM25 / swissALTI3D | MapServer WCS | WCS is enabled but the only elevation coverages are relief and hillshade; swissALTI3D coverage is distributed by a fee-based office. |
MDA | Moldova | geodata.gov.md | GeoServer | WCS returns 'Service WCS is disabled'; the sibling portal's WCS contains only stock GeoServer demo coverages. |
MLT | Malta | MSDI EL.ElevationGridCoverage 1 m LiDAR | GeoServer | The INSPIRE elevation layers exist but WCS is disabled, leaving only rendered WMS — and the host sits behind a Cloudflare interstitial that 403s non-browser clients. |
TUR | Türkiye | HGM grid elevation | Paid service | Priced as a product with access by written request; no anonymous endpoint. |
AUS | Australia | Geoscience Australia 5 m DEM | Download portal | No ImageServer exists; the WMS is a MapServer returning rendered RGB. Elvis is a clip-and-ship portal. |
CHE | Switzerland | swissALTI3D / swissSURFACE3D 0.5 m | Per-tile COGs + WMS | Every swisstopo WMS elevation layer is 'reliefschattierung' — hillshade — and the 0.5 m products are only per-tile COGs indexed by STAC. The 10 m swissALTIRegio single COG above is the one live option. |
ITA | Italy (Sardinia) | Regione Sardegna DTM 1 m | GeoServer WCS | Works and is genuine 1 m Float32, but the mosaic only covers surveyed blocks — mostly river corridors and the coast, roughly half the island — so on the map it reads as scattered ribbons of detail with nodata between them. TINITALY covers the island at 10 m. |
CHN | China | Tianditu elevation | WMTS / WCS | Every endpoint requires a registered tk= key. |
DNK | Denmark | Dataforsyningen DHM | WCS | GetCapabilities is open, but GetCoverage returns 403 'User not authorized' — token required at the data step. |
GRC | Greece | Hellenic Cadastre DEM 5 m | Offline / licensed | Never published as INSPIRE Elevation — the national catalogue's 147 records contain zero elevation entries. geodata.gov.gr is unreachable. |
HRV | Croatia | DGU DMR | WMS | Advertises image/geotiff but returns a 3-band RGB hillshade, and sends no CORS header. |
JPN | Japan | GSI 標高タイル (1 / 5 / 10 m) | XYZ PNG tiles | GSI's own tiles use a signed-24-bit ×0.01 m packing no raster-dem encoding can express. The Geological Survey of Japan's Terrain-RGB conversion of the same tiles is what is shipped instead. |
DEU | Germany (other Länder) | Bayern, Hessen, Sachsen, Thüringen, Hamburg, S-H, RLP DGM1 | WCS / WMS | Bayern and Sachsen WCS need credentials (401/403); Hessen's WCS 2.0 only accepts its native EPSG:25832 axes; Thüringen serves an RGB hillshade; Hamburg, Schleswig-Holstein and Rheinland-Pfalz have no open WCS. Six Länder do work and are in the regional table. |
AUT | Austria (other Länder) | BEV, Wien, Kärnten, Salzburg, OÖ, Vorarlberg, NÖ | — | BEV's INSPIRE WMS needs registration; the Länder publish hillshade MapServers, RGB WMS or downloads only. Tirol and Steiermark are the two live raw services. |
BEL | Belgium (Wallonia) | WALLONIE_MNT_2021_2022 | MapServer | MapServer only — export returns PNG and the WCSServer answers HTTP 400. Flanders is the live half. |
LUX | Luxembourg | ACT DTM 2024 | GeoServer WCS | The INSPIRE WCS lists zero coverages; the DTM is download-only. |
LTU | Lithuania | Elevation_V2 | AGOL ImageServer | TilesOnly with no exportImage, and the licence is non-commercial Esri-only. |
ESP | Spain (Catalonia, Euskadi, Canarias) | ICGC MDT 2 m / 5 m, Euskadi MDT, Grafcan MDT | WCS / WPS | ICGC's WCS only emits ArcGrid; Euskadi lists no MDT coverage; Grafcan is WPS/WMS only. The national IDEE Terrain-RGB covers all three anyway. |
ITA | Italy (other regions) | Trentino, Veneto, Lombardia, Piemonte, FVG, PCN LiDAR 1 m | — | WCS with zero coverages, disabled, unreachable, or download-only; the ministry's PCN 1 m LiDAR WCS returns HTTP 500. |
GBR | United Kingdom (Scotland, Wales, N. Ireland) | Scottish Remote Sensing Portal, DataMapWales, OpenDataNI LiDAR | GeoServer / downloads | Scotland's WCS is switched off, Wales' WCS exposes only noise maps, Northern Ireland is file download only. England's EA service is the live one. |
AUS | Australia | Geoscience Australia DEM_LiDAR_5m / SRTM 1 s WCS | MapServer WCS 1.0 | Genuine Float32 with CORS, but requestResponseCRSs is EPSG:4326 only — a 3857 BBOX is refused with HTTP 400, and this app only templates Web Mercator windows. |
USA | United States (Minnesota) | MnGeo 0.5 m Gen-2 lidar DEM | 33 COGs + VRT | Float32 COGs with CORS and range support, but in EPSG:6344 and split across 33 files under one VRT — no single reprojectable file. |
CAN | Canada (HRDEM) | NRCan HRDEM mosaic 1–2 m | WCS 1.1.1 / per-tile COGs | Only WCS 1.1.1 is served, which needs GRIDOFFSETS derived from the window; the COGs are per 100 km tile with no mosaic file. MRDEM 30 m is the single-file product and is shipped. |
IND | India | NRSC Bhuvan CartoDEM | GeoServer | WCS is disabled and the WMS carries no raw elevation layer; CartoDEM is download-only via Bhoonidhi. |
HKG | Hong Kong | Lands Department 5 m DTM (2020 LiDAR) | CSDI MapServer / AGOL tiles | The CSDI service is rendered WMS only; the AGOL ImageServer is TilesOnly LERC with no exportImage. |
KOR | South Korea | NGII / VWorld DEM | WMS | Every endpoint requires a key registered to a domain. |
TWN | Taiwan | MOI 20 m DTM | NLSC WMTS | Only hillshade, slope and aspect derivatives are served; the DTM itself is download-only on data.gov.tw. |
CRI | Costa Rica | SNIT IGN MDT | GeoServer | WCS disabled; the WMS exposes only 1:5000 contour vectors. |
GTM | Guatemala | IDEG / PACUNAM LiDAR | GeoServer WCS | The WCS answers with zero coverages; the Maya LiDAR surveys are not published as a service. |
ZAF | South Africa | NGI 5 m / SUDEM | — | No NGI ImageServer or WCS exists; the documented SUDEM WCS host is unreachable and was a hillshade. |
AFR | Africa (RCMRD) | RCMRD country SRTM 30 m ImageServers | ArcGIS ImageServer | Five countries (Uganda, Botswana, Burundi, Comoros, South Sudan) are keyless Float32 with CORS, the rest need a token — and all are the same SRTM/GLO-30 class data Mapterhorn already has, so nothing is gained. |
POL | Poland | GUGiK NMT 1 m | WCS 2.0 | Works and is free — the highest-resolution national DEM found anywhere — but sends no CORS headers at all, so a browser cannot read it. |
PRT | Portugal | DGT MDT 0.5 m / 2 m LiDAR | STAC + OAuth2 | Public STAC index, CC BY 4.0, genuine Float32 — but every asset redirects to Keycloak login, and there is no CORS. The MDT50m WMS 'image/geotiff' is 8-bit RGBA, and the INSPIRE 'ElevationGridCoverage' ATOM is a hypsometric colour ramp (non-monotonic: Torre 1993 m reads darker than Larouco 1527 m). |
SVK | Slovakia | ÚGKK DMR 5 | MapServer only | 52 MapServers and zero ImageServers; every DMR layer is rendered hypsometry. |
SWE | Sweden | Lantmäteriet Markhöjdmodell 1 m | STAC + Basic auth | STAC index is keyless and CORS-enabled, but every raster asset 401s behind a free Geotorget account — while sibling /pub/ paths stay open, so the gating is deliberate. |
Two patterns dominate. Auth at the data step: Portugal and Sweden both publish modern, public STAC catalogs under CC BY 4.0 where the index is open and CORS-enabled but every raster byte sits behind OAuth2 or HTTP Basic. Rendered, not raw: the product is a hillshade or a hypsometric colour ramp, sometimes mislabelled as an elevation coverage.
Beyond the table, a long tail of countries publishes nothing retrievable at all. Across Central Asia, the Caucasus, the western Balkans, the Caribbean, Central America, the Middle East, South-East Asia and the Pacific, the national geoportal is typically a dead host, a single-page app with no service directory, or an ArcGIS estate exposing only rendered MapServer layers. Two small countries need no entry of their own: Monaco is inside France's IGN LiDAR coverage and San Marino inside Italy's TINITALY, so both already work through the sources above.
This is exactly the gap Mapterhorn fills. It ingests several of these under licence — Portugal's 0.5 m and Sweden's 1 m are both in its source catalog — so those countries already render at national resolution in this app through the Mapterhorn tileset, just not by talking to the agency live. Greece is the one case where the data isn't open at all, and falls back to global 30 m.
Coverage edges and no-data
A national dataset stops at its border, and services disagree about how to say so. Some return a sentinel (-9999 for France and Finland, -3.4e38 for England, positive +3.4e38 for the Netherlands), some return a service exception, and some return a GeoTIFF that cannot be parsed at all.
Sentinels are handled per-source by a no-data floor/fill, so out-of-coverage areas sit flat at sea level instead of decoding as a 10 km pit. Where a service answers with an error instead, those tiles simply don't render.
Because of this, selecting a national dataset constrains the map to that country's extent by default — see Settings → Map Bounds to change or disable it.