Helios

HELIOS Card for HA - LiDAR provider registry

Helios, 3D real-time solar exposure card for Home Assistant

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.

Integrated, ships natively Compatible, integration pending Partial, blocked by format / format issue Incompatible, no usable public endpoint today

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.

France IGN LiDAR HD , ~68 M people Environment Agency LiDAR Composite , England, ~57 M people IGN España PNOA-LiDAR MDSn , ~46 M people PDOK AHN4 , Netherlands, ~17 M people Kartverket NHM , Norway + Svalbard, ~5.5 M people Geobasis NRW nDOM , Nordrhein-Westfalen, ~18 M people GUGiK NMPT , Poland, ~38 M people NRCan HRDEM Mosaic , Canada, ~38 M people VCGI nDSM , Vermont USA, ~645 K people LGB bDOM + DGM , Brandenburg + Berlin, ~6.1 M people North America South America Europe Africa Asia Australia

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.

Adding a country

  1. Drop a new file at src/engine/lidar/providers/<iso>.ts, exporting a LidarSource (id, name, native cell pitch, covers() bbox probe, fetchShadowRegions() request builder).
  2. Register it in src/engine/lidar.ts's LIDAR_SOURCES array.
  3. Add a row to this page in the integrated table.
  4. Update README.md's LiDAR coverage section so users discover the new region.
  5. 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.