---
operation_id: list_osm_cover_datasets
method: GET
path: /v1/osm-cover/datasets
summary: 3D-Tiles-OSM-Cover-Tilesets (thematisch geclustert, b3dm + Draco)
tags: [osm-cover]
stability: beta
since_version: 0.1.0
auth: none
data_product: osm-cover
snapshot_aware: true
attribution_block: false
rate_limit_tier: public
related:
  - /v1/terrain-mesh/datasets
  - /v1/tilesets
---
# `GET /v1/osm-cover/datasets` — OSM-Cover-Tilesets

Discovery-Endpoint für die **OSM-Bodenbedeckung als 3D-Tiles** (ADR-0017): OSM-Flächen (Wiese, Wasser, Wald, Straßen, Schienen …) auf das DGM1-Gelände drapiert und als b3dm + Draco-Compressed glTF gerendert. Konsumiert direkt von Cesium, three.js (`3d-tiles-renderer`), Blender (3D-Tiles-Addon).

Pro BL der jüngste Snapshot. Der entscheidende Unterschied zu `/v1/terrain-mesh/datasets`: jedes BL liefert **mehrere thematische Cluster-Tilesets** statt genau einem. Die Themes (`surface`, `transport`, `canopy`, bei Küsten-BL zusätzlich `sea`) sind eigene Tilesets, die der Client als parallele Layer lädt — unabhängig rebuild- und cutover-bar.

Die Tilesets selbst werden statisch von Caddy unter `tiles.lodapi.de/osm-cover/<bl>/<snapshot>/<theme>/tileset.json` ausgeliefert (Reverse-Proxy auf Hetzner-Storage-Box).

> **Status: beta.** Cover-Geometrie ist Buffer-basiert (Straßen), Veredelung via osm2streets ist Phase 2. Lizenz: ODbL (Share-Alike) — siehe Attribution.

## Wann verwenden

- 3D-Visualizer, die LoD2-Gebäude **+** Gelände **+** Bodenbedeckung zusammen zeigen.
- Selektives Layern: nur `surface` ohne `transport`/`canopy`, oder Canopy als zuschaltbarer Baum-Layer.
- Three.js/Cesium-Szenen, die OSM-Kontext ohne eigenen OSM-Render-Stack brauchen.

## Examples

### curl

```bash
curl -s https://api.lodapi.de/v1/osm-cover/datasets \
  | jq '.datasets[] | {bl: .bundesland_code, themes: [.themes[] | {name, tiles: .tile_count, url: .tileset_url}]}'
```

### Three.js — alle Themes als parallele Tilesets

```ts
import { TilesRenderer } from "3d-tiles-renderer";

const r = await fetch("https://api.lodapi.de/v1/osm-cover/datasets");
const { datasets } = await r.json();
const be = datasets.find(d => d.bundesland_code === "be");
for (const theme of be.themes) {
  const tiles = new TilesRenderer(theme.tileset_url);
  tiles.setCamera(camera);
  tiles.setResolutionFromRenderer(camera, renderer);
  scene.add(tiles.group);
}
```

### Cesium — Themes einzeln zuschaltbar

```ts
const r = await fetch("https://api.lodapi.de/v1/osm-cover/datasets");
const { datasets } = await r.json();
const be = datasets.find(d => d.bundesland_code === "be");
const canopy = be.themes.find(t => t.name === "canopy");
const ts = await Cesium.Cesium3DTileset.fromUrl(canopy.tileset_url);
viewer.scene.primitives.add(ts);   // Baum-Layer separat ein-/ausblendbar
```

## Parameters

Keine.

## Response

`200 OK · application/json` — Schema `#/components/schemas/OsmCoverDatasetListResponse`.

```json
{
  "datasets": [
    {
      "bundesland_code": "be",
      "snapshot_date": "2026-06-15",
      "themes": [
        {
          "name": "surface",
          "tileset_url": "https://tiles.lodapi.de/osm-cover/be/2026-06-15/surface/tileset.json",
          "tile_count": 1234
        },
        {
          "name": "transport",
          "tileset_url": "https://tiles.lodapi.de/osm-cover/be/2026-06-15/transport/tileset.json",
          "tile_count": 567
        },
        {
          "name": "canopy",
          "tileset_url": "https://tiles.lodapi.de/osm-cover/be/2026-06-15/canopy/tileset.json",
          "tile_count": 89
        }
      ],
      "bbox": [13.0883, 52.3382, 13.7612, 52.6755],
      "license": "odbl-1.0",
      "attribution": "© OpenStreetMap-Mitwirkende (ODbL)",
      "built_at": "2026-06-15T22:14:00Z"
    }
  ]
}
```

### Antwort-Header

| Header | Wert |
|---|---|
| `Cache-Control` | `public, max-age=300` |

## Themes

| Theme | Inhalt |
|---|---|
| `surface` | Flächen-Bodenbedeckung (Grün, Wasser, Urban, Plätze, Parken, Sport, Friedhof, Hecke) |
| `transport` | Straßen, Wege, Schienen (Buffer-Geometrie) |
| `canopy` | Baumkronen-Mesh (aus DLR-Höhenraster) |
| `sea` | Topf-Meer (flach Z=0) — nur Küsten-BL |

Die `themes`-Liste ist variabel lang: Binnenland-BL liefern 3 Themes (ohne `sea`), Küsten-BL 4.

## Stolperdrähte

- **ODbL-Share-Alike**: osm-cover-Daten unterliegen der Open Database License. Vor öffentlichem Einsatz Attribution + Share-Alike-Pflichten prüfen (Themis-Freigabe).
- **Canopy ist best-effort**: Wenn das DLR-Höhenraster für ein BL fehlt/truncated ist, kann das `canopy`-Theme fehlen — der Endpoint listet dann nur die vorhandenen Themes.
- **Blender-3D-Tiles-Addon braucht Draco-Decoder** (`KHR_draco_mesh_compression`).
- **Cover liegt knapp über dem Terrain** (`cover_base_lift_m`), um Z-Fighting mit dem terrain-mesh zu vermeiden — beim gemeinsamen Rendern beide Produkte laden.

## Verwandte Endpoints

- [`GET /v1/terrain-mesh/datasets`](./list-terrain-mesh-datasets.md) — Gelände-Mesh (ein Tileset pro BL).
- [`GET /v1/tilesets`](./list-tilesets-bbox.md) — LoD2-Buildings-3D-Tiles.