---
operation_id: get_cover_glb
method: GET
path: /v1/cover/3d.glb
summary: Bbox → Bodenbedeckung + Terrain als eine GLB
tags: [cover]
stability: beta
since_version: 0.9.0
auth: api_key
min_tier: hobby
data_product: osm-cover
snapshot_aware: true
attribution_block: false
rate_limit_tier: authed
related:
  - /v1/buildings/3d.glb
  - /v1/osm-cover/datasets
  - /v1/terrain-mesh/datasets
---
# `GET /v1/cover/3d.glb` — Bodenbedeckung und Terrain einer Bbox als eine GLB

Gegenstück zu [`/v1/buildings/3d.glb`](get-buildings-glb.md) für die Flächen. Liefert
eine binäre glTF mit **einem Node je Cover-Klasse** (`cover_urban`, `cover_road`,
`cover_water`, `cover_green`, …) und einem Node **`terrain`**. Das Terrain füllt jede
Stelle, an der keine Cover-Klasse liegt; die Klassen liegen konform darauf (dasselbe
TIN, Klassen-Offset 3–15 cm gegen Z-Fighting).

Die Geometrie kommt aus `bin/cover_bbox_export.py` — dieselbe Implementierung wie
der CLI-Export. Quelle ist ALKIS (tatsächliche Nutzung), pro Land im Schema
`cover_alkis_<bl>` der API-Datenbank (`bin/cover_alkis_publish.sh`). **Beta:** zurzeit
nur Berlin.

## Parameter

| Name | Default | Bedeutung |
|---|---|---|
| `bbox` | — | WGS84 `minLon,minLat,maxLon,maxLat` |
| `bl` | aus der bbox | Bundesland-Code; nötig nur, wenn die bbox zwei Länder schneidet |
| `drape` | `terrain` | `terrain` = absolute Höhen auf dem Gelände, `flat` = z≈0 ohne Terrain |
| `include_terrain` | `true` | Node `terrain` mitliefern (nur `drape=terrain`) |
| `max_error_m` | `1` | Terrain-Toleranz = LOD-Stufe des Terrain-Layers: `1`, `2`, `5` |
| `water` | `level` | `level` · `clip` · `conform` · `none` |
| `classes` / `exclude_classes` | — | Klassenfilter, komma-separiert |
| `target_frame`, `origin`, `rotate_x`, `rotate_z`, `weld_tolerance_m`, `compression` | wie `/v1/buildings/3d.glb` | Frame-Parameter, identisch, damit beide Exporte deckungsgleich liegen |

**Limits:** bbox ≤ 1 km², mit `X-Lodapi-Admin-Token` ≤ 25 km²; höchstens 36 Terrain-Kacheln.
Ein Export läuft zur Zeit (CPU-gebunden, ~15 s je km² inkl. Terrain).

## Antwort-Header

| Header | Inhalt |
|---|---|
| `X-Lodapi-Cover-Classes` | Nodes in der Datei, in Reihenfolge |
| `X-Lodapi-Z-Reference` | `terrain_conformal` (absolut, DHHN2016) oder `flat_with_class_offsets` |
| `X-Lodapi-Seam-Complete` | `false`, wenn eine Terrain-Kachel oder ein Nachbar nicht lesbar war |
| `X-Lodapi-Complete` | `false`, wenn der Export unvollständig ist (z. B. Kachel fehlt) |
| `X-Lodapi-Anchor-LonLat` | Anker des Frames |
| `X-Lodapi-Attribution` | Quellenangabe (prozent-kodiert) |

## Zusammen mit Gebäuden (scenerii)

```
GET /v1/cover/3d.glb?bbox=…&target_frame=mercator&origin=corner&rotate_x=-90&rotate_z=-90&compression=draco
GET /v1/buildings/3d.glb?bbox=…&target_frame=mercator&origin=corner&rotate_x=-90&rotate_z=-90&compression=draco&z_base=absolute&include_ground=false
```

**`z_base=absolute` ist Pflicht**, sobald das Cover gedrapt ist: mit dem Default
`per_building` steht jedes Gebäude auf z=0, das Gelände aber auf NHN-Höhe — die Gebäude
lägen um die Geländehöhe zu tief. Mit `drape=flat` passt `per_building`.

## Fehler

| Status | Wann |
|---|---|
| 400 | ungültiger Parameter; bbox in mehreren Ländern ohne `bl` |
| 404 | keine Cover-Daten für das Land / in der bbox |
| 413 | bbox über dem Limit |
| 422 | Export abgebrochen (z. B. Flächenbilanz verletzt), Klartext im `detail` |