Every public elevation / LiDAR data source I have inspected for Helios, with status, endpoint, an example fetch URL ready to paste in a browser, and a worldwide map of the integrated providers' coverage.
Where Helios sees real LiDAR shadows
The green rectangles on the map below show the bounding box of each LiDAR provider that Helios ships with natively. If your home sits inside one of them, your card paints cast shadows from real buildings AND vegetation captured by aerial LiDAR; outside, it falls back to OpenFreeMap building footprints (buildings only, no trees). Hover any rectangle to see which provider covers it.
Equirectangular projection, lat / lon graticule at 30° steps. Green rectangles span each integrated provider's coverage bbox; some overlap (NRW + Brandenburg inside Germany, Vermont inside Canada's pad).
🟢 Integrated providers
Ten providers ship natively in Helios today. Every example URL below was curl-verified on the day of publication; if one stops working it's worth filing a Helios issue, the same URL is what the runtime provider builds.
| Country / region | API name | Population | Format | CRS | Test URL |
|---|---|---|---|---|---|
| 🇫🇷 France | IGN LiDAR HD (MNH WMS) | ~68 M | BIL Float32, single fetch (already nDSM) | EPSG:4326 | Paris ~1 km² ↗ |
| 🇬🇧 England | Environment Agency LiDAR Composite (DSM + DTM) | ~57 M | GeoTIFF Float32, two coverages subtracted client-side | EPSG:4326 (CRS:84) | London ~1 km² (DSM) ↗ |
| 🇪🇸 Spain | IGN España PNOA-LiDAR MDSn | ~46 M | GeoTIFF Float32, vegetation + buildings MAX-merged | EPSG:4326 | Madrid ~1 km² (vegetation MDSn) ↗ |
| 🇳🇱 Netherlands | PDOK AHN4 (DSM + DTM) | ~17 M | GeoTIFF Float32, two coverages subtracted client-side | EPSG:4326 | Amsterdam ~1 km² (DSM) ↗ |
| 🇳🇴 Norway | Kartverket NHM (DOM + DTM, ArcGIS Image Server) | ~5.5 M | Float32 GeoTIFF via exportImage, DOM-DTM subtracted | EPSG:4326 (reprojected) | Oslo ~1 km² (DOM) ↗ |
| 🇩🇪 Germany (NRW) | Geobasis NRW nDOM | ~18 M | GeoTIFF Float32 single-band (already nDOM) | EPSG:4326 | Cologne ~1 km² ↗ |
| 🇵🇱 Poland | GUGiK NMPT (national DSM) | ~38 M | GeoTIFF Float32 via WCS 2.0.1, single fetch | EPSG:4326 native | Warsaw ~1 km² ↗ |
| 🇨🇦 Canada | NRCan HRDEM Mosaic (DSM) | ~38 M | GeoTIFF via WCS 1.1.1, single fetch | EPSG:4326 (BBOX in lat,lon order) | Toronto ~1 km² ↗ |
| 🇺🇸 United States (Vermont) | VCGI Statewide nDSM 0.7 m | ~645 K | Float32 TIFF via ArcGIS exportImage, already nDSM | EPSG:3857 native, accepts 4326 in/out | Burlington ~1 km² ↗ |
| 🇩🇪 Germany (Brandenburg + Berlin) | LGB bDOM + DGM 1 m | ~6.1 M | GeoTIFF Float32 via WCS 2.0.1, two coverages subtracted | EPSG:4326 native | Berlin ~1 km² (bDOM) ↗ |
Bring-your-own (BYO) LiDAR
The six lidar-local-ndsm-* config keys point Helios
at a user-hosted nDSM GeoTIFF inside a user-defined bounding box.
Useful in any region with raw LiDAR data available offline (initial
use case: NSW Australia). Contributed by
@jourdant in
PR #5,
idea credited to @stephenwq.
🟡 Verified compatible, integration pending
Endpoint exists, raw float values are reachable, but a piece of the integration still needs work (UTM projection helper, STAC client, API-key wrapper, etc.).
| Country / region | API name | Population | Endpoint | Why pending |
|---|---|---|---|---|
| 🇩🇪 Germany (Baden-Württemberg) | LGL INSPIRE DOM5 + DGM1 | ~11.3 M | owsproxy.lgl-bw.de/owsproxy/wcs/WCS_INSP_BW_Hoehe_Coverage_DOM5 |
WCS endpoint live, but the service rejects EPSG:4326 SUBSET and demands native EPSG:25832 (UTM 32N) E / N axes plus a SCALESIZE workaround. Needs a Krüger-forward helper before it can ship. |
| 🇦🇹 Austria (Styria / Steiermark) | Land Steiermark ALS DOM + DGM 1 m | ~1.2 M | gis.stmk.gv.at/.../ALSHoeheninformation_1m_UTM33N/MapServer/WCSServer |
ArcGIS-backed WCS only accepts native-CRS subsetting (x / y in EPSG:32633). Same UTM Krüger-forward blocker as Baden-Württemberg. |
| 🇦🇹 Austria (Tyrol / Tirol) | Land Tirol terrain ALS DOM + DGM 5 m | ~760 K | gis.tirol.gv.at/.../Service_Public/terrain/MapServer/WCSServer |
Native CRS is EPSG:31254 (MGI Austria GK Zone M28, Bessel ellipsoid). Same blocker as Steiermark, plus a MGI/WGS84 Helmert offset for ~10 m accuracy. |
| 🇨🇿 Czech Republic | ČÚZK DMR via INSPIRE WCS | ~10.5 M | ags.cuzk.gov.cz/arcgis2/services/INSPIRE_Nadmorska_vyska/ImageServer/WCSServer |
INSPIRE coverage only publishes DMR (terrain), not DMP (surface). The pipeline expects metres-above-ground. |
| 🇨🇭 Switzerland | swisstopo swissSURFACE3D Raster (DSM) | ~9 M | data.geo.admin.ch/api/stac/v1/collections/ch.swisstopo.swisssurface3d-raster |
STAC API, not WCS. Needs a STAC client (item search, asset picker) on top of the existing GeoTIFF fetcher. |
| 🇪🇪 Estonia | Maa-amet DSM 1 m | ~1.3 M | geoportaal.maaamet.ee |
WMS / WMTS confirmed public; WCS metadata referenced but exact endpoint not located, needs a Maa-amet contact. |
| 🇳🇿 New Zealand | LINZ National Elevation 1 m (DEM + DSM) | ~5.2 M | data.linz.govt.nz (Koordinates) |
Requires per-user API key under a free Koordinates account, would ship behind a linz-api-key config field. |
| 🇩🇰 Denmark | Dataforsyningen DHM (DTM + DSM) | ~5.9 M | dataforsyningen.dk |
Same shape as LINZ, opt-in API key, would ship behind a dataforsyningen-api-key config field. |
| 🇩🇪 Germany (Sachsen-Anhalt) | LVermGeo DOM1 | ~2.2 M | geodatenportal.sachsen-anhalt.de/wss/service/ST_LVermGeo_DOM1_WCS_OpenData/guest |
Documented WCS URL returns HTTP 500 from upstream at audit time. Ships once the endpoint stabilises. |
🟠 Probed, partially compatible
Data exists but a hard blocker (auth, format, projection) makes a clean live-fetch integration impossible today.
| Country / region | API name | Population | Blocker |
|---|---|---|---|
| 🇦🇺 Australia (NSW) | NSW Spatial Services 5 m Elevation | ~8.2 M | Bare-earth DEM from stereo imagery (photogrammetry, 5 m), not a LiDAR DSM. Helios's pipeline expects height-above-ground; threshold flood-fill never fires. NSW users get LiDAR DSM today via BYO. |
| 🇦🇺 Australia (federal) | Geoscience Australia ELVIS | ~25 M | Download portal, no live raster query API at federal level. |
| 🇩🇪 Germany (Bayern) | LDBV DOM20 (20 cm DSM) | ~13 M | 20 cm DSM Open Data, but bulk-download portal only, no documented WCS. |
| 🇩🇪 Germany (Hamburg) | LGV bDOM 1 m | ~1.9 M | Image-based DSM (photogrammetry) shipped as 3-3.5 GB bulk file packages (ASCII / PNG), no live raster query. |
| 🇩🇪 Germany (Hessen) | HVBG DOM1 | ~6.3 M | Self-service download via gds.hessen.de; no WCS endpoint surfaced. |
| 🇩🇪 Germany (Sachsen) | Freistaat Sachsen DOM1 + nDOM1 | ~4.0 M | Public WCS guest endpoint returns HTTP 403 (locked behind auth despite the "Open Data" branding). |
| 🇧🇪 Belgium (Wallonia) | SPW LiDAR HD 2021-22 MNS 1 m | ~3.6 M | MapServer exposes a WMSServer extension (rendered RGB tiles) but no WCSServer; the raw float DSM is only available in Lambert 08 (EPSG:3812), which needs proj4js. |
| 🇧🇪 Belgium (Flanders) | AIV DHMV II DSM | ~6.6 M | Float32 WCS exists but only in EPSG:31370 (Lambert 72). Same proj4js blocker as Wallonia; both would ship together. |
| 🇫🇮 Finland | Maanmittauslaitos Elevation Model 2 m | ~5.6 M | DTM only (bare earth), no DSM. Captures terrain shadows but not vegetation / buildings. |
🔴 Probed, incompatible
Either there's no public API at all, or the only path is a download portal / per-user OAuth / format Helios can't consume.
| Country / region | Provider | Reason |
|---|---|---|
| 🇮🇹 Italy | Ministero dell'Ambiente PST LiDAR | Access requires signed information request via email (datipst@mase.gov.it). No live raster API. |
| 🇸🇪 Sweden | Lantmäteriet Laserdata Nedladdning | Raw LAZ point clouds only, no pre-rasterised DSM exposed via WCS. |
| 🇯🇵 Japan | GSI Fundamental Geospatial Data | Shapefile-only elevation, account signup required, no raster WCS. |
| 🇬🇷 Greece | Hellenic Cadastre | LiDAR datasets withheld under security restrictions. |
| 🇨🇭 Switzerland (legacy) | swissALTI3D | DTM only (bare earth) since the 2024 LiDAR refresh. Use swissSURFACE3D Raster (above 🟡) for DSM coverage. |
| 🇧🇪 Belgium (Brussels) | UrbIS-3D | DSM exists but only as per-municipality LAZ archives. |
| 🇸🇰 Slovakia | ZBGIS DMP | DMR (terrain) is GeoTIFF; DMP (surface) is only published as pre-rendered PNG visualisations. |
| 🇺🇸 United States (federal) | USGS 3DEP | Live ArcGIS Image Server exposes bare-earth DEM only. No federal DSM service. |
| 🇺🇸 United States (state, Minnesota) | MN DNR mntopo | Raw LiDAR per-tile ZIP download only, no live raster API. |
| 🇱🇻 Latvia | LGIA Digitālais virsmas modelis | Published as Shapefile-only downloads, no WCS. |
| 🇱🇹 Lithuania | NŽT / ŽGP | LiDAR available, but no public WCS / WMTS for the DSM raster. |
| 🏴 Wales | Natural Resources Wales | Per-tile ZIP downloads only, no live raster query endpoint. |
| 🇮🇸 Iceland | Landmælingar Íslands | LiDAR programme in progress, no national DSM service yet. |
Provider compatibility checklist
To turn a new region into a Helios native provider it has to clear every box below.
- Raw float values exposed, not a pre-rendered RGB visualisation. A raster of metres-above-ground numbers, or a DSM + DTM pair whose difference is metres-above-ground.
- Live raster query API (WCS GetCoverage, ArcGIS Image Server
exportImage, STAC + asset URLs). Per-tile ZIP or per-tile FTP isn't usable from a browser card. - image/tiff Float32 output, or the IGN-style raw BIL float32 stream. The helper in
src/engine/lidar/geotiff.tshandles GeoTIFF Float32 transparently. - EPSG:4326 input/output supported natively, or a UTM-zone projection that Helios already handles in another provider, or a willingness to bundle proj4js for an arbitrary national projection (Lambert, Bessel, S-JTSK, etc.).
- No per-user authentication. Free open data, optionally with an API key the user supplies in the editor.
- CORS headers (
Access-Control-Allow-Origin: *or equivalent). Without them, browsers block the fetch from any HA dashboard not hosted on the data provider's domain.
Adding a country
- Drop a new file at
src/engine/lidar/providers/<iso>.ts, exporting aLidarSource(id, name, native cell pitch,covers()bbox probe,fetchShadowRegions()request builder). - Register it in
src/engine/lidar.ts'sLIDAR_SOURCESarray. - Add a row to this page in the integrated table.
- Update README.md's LiDAR coverage section so users discover the new region.
- Open a PR. The maintainer ships it in the next minor release alongside the others.
See src/engine/lidar/providers/de-nrw.ts for the
canonical single-coverage example, uk.ts for a
DSM-minus-DTM example, and es.ts for a two-coverage
MAX-merge example.
Source files and the latest version of this page live in the ReikanYsora/Helios GitHub repo. Architecture details: ARCHITECTURE.md. End-user docs: README.md. Release history: CHANGELOG.md.