srtm-lidar-at — landscape from LiDAR + satellites alpha

A bbox or a point in, what the segmentation learned out: terrain (25 m DTM), land-cover shares, realistic tree apices, structure heights, landmarks, forest loss. Austria-wide, 7 850 Katastralgemeinden, served from a pre-built index. JSON, CORS, no key.

Coverage right now: 5 743 / 7 850 complete KGs at product v2.4 (73.2 %) — complete = whole KG (no split blocks), all layers, cells served; 167 more at v2.4 awaiting cells publication (v2.4-pending — poll, not a gap). 7 850 = all Austrian Katastralgemeinden (same universe as umfeld-at). Index updated 2026-10-26T21:33:36Z; live numbers at /api/v1/status. Unprocessed areas answer 202 / 404 ready:false — processing runs around the clock.

Landscape only. Everything is keyed by bbox, point or KG code; no property-register identifiers or vector outlines are served. Clients hold their own geometry and ask us about the bbox of each feature.

Start here

GET /api/v1/landscape?bbox=15.084,47.064,15.088,47.068
GET /api/v1/landscape?lon=15.0857&lat=47.0665&radius_m=20
GET /api/v1/trees/bbox?bbox=15.08,47.06,15.09,47.07&min_height=25
GET /api/v1/cells?lon=15.0857&lat=47.0665&k=1
NeedCall
Everything about a bbox / point/api/v1/landscape?bbox= (alias /context)
Realistic tall trees/api/v1/trees/bbox?bbox=
Towers, masts, wind turbines/api/v1/landmarks/bbox?bbox=
Measured building heights/api/v1/buildings/bbox?bbox=
Per-cell observations (H3 res 12, ~300 m²)/api/v1/cells?bbox= · /api/v1/cells?lon=&lat=&k=1 · /api/v1/cells/{h3}
Whole-KG cell file (download)/api/v1/kg/{code}/cells (format=h3b | json summary)
Relief grid for 2.5D/api/v1/heightfield?bbox=&cell=50
Hillshade / slope map tiles/tiles/hillshade/{z}/{x}/{y}.png · /tiles/slope/…
Which KGs are processed/api/v1/kgs?bbox= · /api/v1/kgs?limit=1000&offset=0 · /api/v1/kg/{code}
Coverage/api/v1/status

Cells — what we measured, hexagon by hexagon

Every processed KG is also published as a grid of H3 res-12 cells (~307 m², ~52 000 per KG). Each cell carries one 41-byte observation record — land-cover shares in nine groups (geb bau acker gruen wald wasser verkehr alpen sonst), structure cover and count, LiDAR heights (mean / p90 / max), tree count, tallest tree and canopy share, NDVI mean + seasonal amplitude and a phenology class, height and ground change between ALS years, Hansen forest-loss year, terrain (elevation, slope, aspect, roughness, TRI, TPI) and a consistency verdict against the statistical land-use layer of umfeld-at for the same cell. On top of that: every tree apex ≥ 3 m and every segmented structure with its LiDAR height, positioned inside the cell. Same cell ids as umfeld-at, so the two layers zip together client-side: the statistical land use per cell lives in umfeld-at's public NE API — GET https://umfeld-at.exe.xyz/api/v1/ne (pin + counts), /api/v1/ne/cell/{h3}, /api/v1/ne/cells?lon=&lat=&k=1, /api/v1/ne/chunk/{h3_res9}; contract ne.md, overview umfeld-at llm.txt. Observed here, statistical there.

GET /api/v1/cells?bbox=16.354,48.187,16.357,48.189
    # cells in a box (span ≤ 0.05°, ≤ 16 384 cells)
GET /api/v1/cells?lon=16.355&lat=48.188&k=1
    # the cell under a point + 1 ring
GET /api/v1/cells?bbox=…&format=columns&fields=cover,h_max
    # raw quantised columns for a map heat layer
GET /api/v1/cells?bbox=…&res=10
    # server-side roll-up to res 11 / 10
GET /api/v1/cells/8c1e108cc922dff
    # one cell, all layers (obs + trees + structures)
GET /api/v1/cells/dict
    # fields, units, code tables, limits
GET /api/v1/kg/01008/cells
    # whole-KG H3B container (CC BY 4.0 product download)
GET /api/v1/landscape?bbox=…&include=cells
    # per-bbox roll-up block inside /landscape

Formats json | columns | bin | csv | geojson (+ h3b for chunk and whole-KG downloads); layers obs,trees,structures. Not processed yet → 404 {ready:false, retry_after_s}; a bbox that is only partly covered answers 200 with meta.partial:true. Readiness: /api/v1/status → cells{kgs_ready, cells_total, epoch}. Full field layout and the binary record specs are in the reference.

Flags — when something looks wrong

Every public layer can be flagged, tokenless: a cell whose observed cover group looks off, a giant tree that is a mast, a structure height that cannot be, a tile artefact. Subjects are H3 res-12 cells (or a point → its cell) and KG codes only. Repeats fold into one row; when you omit observed we snapshot what we serve for that cell at that moment, so the flag can be judged after a rebuild. Send looks_right too.

POST /api/v1/flags  {"lon": 15.0857, "lat": 47.0665, "layer": "cells.cover", "claim": "wrong_type",
                     "expected": {"group": "gruen"}, "note": "mown meadow", "source": "my-map"}
GET  /api/v1/flags?bbox=…&format=columns      # disputed cells in a viewport tile
GET  /api/v1/flags/heat?res=7                      # national overview for a map glyph
GET  /api/v1/cells/8c1e108cc922dff?flags=1         # cell dossier with its flag tally
GET  /api/v1/flags/dict                            # layers, claims, limits

Segmentation map

/segmentation — draw an area, see the object segmentation (precomputed products first, live LiDAR where none exists yet), overlay DTM / ortho / CIR / forest change, export GeoPackage / KML / MBTiles, share a result. Details: llm.txt → Segmentation UI.

Documentation

Full reference (plain text, for humans and LLM agents) · Licences & attribution

Datenquelle: BEV – Bundesamt für Eich- und Vermessungswesen (CC BY 4.0, bearbeitet) · Contains modified Copernicus Sentinel data 2022–2025 · © ESA WorldCover 2021 · Hansen/UMD/Google/USGS/NASA GFC · © OpenStreetMap contributors (ODbL). Derived segmentation, statistics and the cell layer © srtm-lidar-at, CC BY 4.0 (licence). Per-source obligations: /api/v1/license. Not operated by or affiliated with BEV, ESA or the Copernicus programme. Stage: alpha — field names and limits may still move between epochs.