GET /v1/tilesets

3D-Tiles-Tilesets, die eine WGS84-Bbox schneiden

stable seit v0.1.0 tilesets auth: none

Beispiel-Ergebnis

So sieht die Antwort aus

Frankfurter Bankenviertel als gestreamtes 3D-Tiles-Stadtmodell aus der Vogelperspektive, Hochhäuser im Hintergrund, Blockrandbebauung im Vordergrund.
Die Antwort liefert ein Tileset (he, Snapshot 2026-06-20, 4,9 Mio. Gebäude). Die tileset_url geht direkt in Cesium3DTileset.fromUrl(); CesiumJS streamt dann nur die Kacheln im Sichtfeld. Gerendert aus der echten API-Antwort, kein Mockup. Daten: © Hessisches Landesamt für Bodenmanagement und Geoinformation (HLBG) (Wortlaut aus lodapi.attribution der Antwort (dl-de-zero-2.0))

Aufruf

curl -G https://api.lodapi.de/v1/tilesets \
  -d bbox=8.66,50.108,8.665,50.111

Antwort (gekürzt)

{
  "tilesets": [
    {
      "tileset_id": "c4e915a4-38d3-4fe4-85f4-7aa17bc339e6",
      "region_code": "he",
      "bundesland_code": "he",
      "snapshot_date": "2026-06-20",
      "s3_key": "tileset.json",
      "tileset_url": "https://tiles.lodapi.de/he/2026-06-20/tileset.json",
      "tile_count": 77181,
      "total_bytes": 1049651086,
      "building_count": 4927877,
      "generated_at": "2026-06-20T17:26:04.366336Z",
      "bounding_volume": { "type": "Polygon", "coordinates": [[[7.777325, 49.395978], …]] }
    }
  ],
  "count": 1,
  "bbox": [8.66, 50.108, 8.665, 50.111],
  "lodapi": {
    "attribution": [{ "bundesland_code": "he", "license_id": "dl-de-zero-2.0", … }]
  }
}

Darstellung: CesiumJS 1.131, ohne Basiskarte und ohne Cesium ion. Einheitliche Gebäudefarbe per Cesium3DTileStyle.

GET /v1/tilesets — 3D-Tiles per Bbox

Liefert alle 3D-Tiles-1.1-Tilesets, deren Bounding-Volume die angegebene WGS84-Bbox schneidet. Ein Tileset = ein Bundesland-Snapshot. Die zurückgelieferte tileset_url ist direkt für Cesium3DTileset.fromUrl(...) verwendbar — kein weiterer API-Roundtrip nötig.

Wann verwenden

  • Beim Initialisieren eines 3D-Viewers: welche Tilesets musst du laden?
  • Beim Wechsel der Karten-Region: nachladen, wenn neue BL ins Sichtfeld wandern.
  • Discovery-Endpoint für Cross-BL-Apps (mehrere Tilesets gleichzeitig laden).

Examples

curl

curl -s 'https://api.lodapi.de/v1/tilesets?bbox=8.5,50.0,8.8,50.2' | jq '.tilesets[] | {bl: .bundesland_code, url: .tileset_url, count: .building_count}'

Cesium (TypeScript)

const r = await fetch("https://api.lodapi.de/v1/tilesets?bbox=8.5,50.0,8.8,50.2");
const { tilesets } = await r.json();
for (const t of tilesets) {
  const ts = await Cesium.Cesium3DTileset.fromUrl(t.tileset_url);
  viewer.scene.primitives.add(ts);
}

MapLibre + Deck.gl (TypeScript)

import { Tiles3DLayer } from "@deck.gl/geo-layers";
const r = await fetch("https://api.lodapi.de/v1/tilesets?bbox=...");
const { tilesets } = await r.json();
const layers = tilesets.map(t => new Tiles3DLayer({ id: t.tileset_id, data: t.tileset_url }));

Parameters

ParameterInTypeRequiredBeschreibung
bboxquerystringyesWGS84 minLon,minLat,maxLon,maxLat (Komma-separiert)

Response

200 OK · application/json — Schema in openapi.json (#/components/schemas/TilesetListResponse).

{
  "tilesets": [
    {
      "tileset_id": "f4b...",
      "region_code": "he",
      "bundesland_code": "he",
      "snapshot_date": "2026-04-15",
      "s3_key": "s3://lodapi-tiles/he/2026-04-15/tileset.json",
      "tileset_url": "https://tiles.lodapi.de/he/2026-04-15/tileset.json",
      "tile_count": 21785,
      "total_bytes": 731000000,
      "building_count": 4934236,
      "generated_at": "2026-05-13T17:42:00Z",
      "bounding_volume": { "type": "Polygon", "coordinates": [...] }
    }
  ],
  "count": 1,
  "bbox": [8.5, 50.0, 8.8, 50.2],
  "lodapi": { "attribution": [{ "source": "HLBG", "license": "DL-DE/Zero 2.0", ... }] }
}

Antwort-Header

HeaderWert
Cache-Controlpublic, max-age=300

Attribution

lodapi.attribution[] enthält einen Eintrag pro zurückgegebenes BL. Frontends müssen den source-String anzeigen, wenn license != DL-DE/Zero 2.0. Siehe Attribution-Guide.

Zugang

Dieser Endpoint geht ohne API-Key. Die Kachel-Dateien selbst (tileset.json, b3dm/glb-Kacheln) liefert tiles.lodapi.de als statische Dateien aus; diese Auslieferung ist nicht zugangsbeschränkt, auch nicht für die Layer, die laut Pricing zu einem bezahlten Tarif gehören (Terrain-Mesh, Bodenbedeckung). Die Tarifgrenzen gelten für die API-Endpoints, siehe Limits und Zugang. Wer ganze Bundesländer als Kacheln abziehen will, schreibt bitte vorher an hello@lodapi.de.

Stolperdrähte

  • bounding_volume ist GeoJSON-Polygon (kein 3D-Tiles-Bounding-Volume-Format). Nützlich für Map-Vorschauen, nicht für 3D-Frustum-Culling.
  • Mehrere Tilesets pro BL: möglich bei Mehrsnapshot-Coverage. Aktuell liefert die API nur den jüngsten Snapshot pro BL.
  • bbox-Schneiden vs. -Enthalten: ST_Intersects, nicht ST_Contains. Ein Tileset, das die bbox nur am Rand kratzt, ist enthalten.

Verwandte Endpoints

Verwandt

  • /v1/tilesets/{tileset_id}
  • /v1/tilesets/{tileset_id}/tileset.json
  • /v1/buildings

Bereit?

Der erste Call geht sofort.

LoD2-Gebäude für alle 16 Bundesländer, kostenlos und ohne Konto. Pro auf Anfrage 30 Tage testen.