GET /v1/buildings/3d.glb

Bbox → einzelnes GLB (z-normalisiert, föderiert)

stable seit v0.1.0 buildings auth: none

GET /v1/buildings/3d.glb — Bbox als einzelnes GLB

Bündelt alle Gebäude einer WGS84-Bbox in eine einzige binäre glTF-Datei (model/gltf-binary). Ready für Three.js, Blender, QGIS-3D-Map-Plugins. Koordinaten sind im lokalen ENU-Frame (East-North-Up, Origin im bbox-Center). Z ist per default per-Building-normalisiert — jedes Gebäude steht „auf Z=0”.

Optional: Draco-Kompression (18-bit Position-Quantization), Material-pro-Surface-Klasse (Wall/Ground/Roof), Merging-Modus.

Wann verwenden

Für streaming/large-area-Rendering ist /v1/tilesets der bessere Pfad. 3d.glb ist für statisch-bbox-Use-Cases.

Examples

curl

curl -s "https://api.lodapi.de/v1/buildings/3d.glb?bbox=8.66,50.108,8.665,50.111&compression=draco&colorize_roofs=true" \
  > frankfurt-block.glb

Three.js — Drop-in-Loader

import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
import { DRACOLoader } from "three/addons/loaders/DRACOLoader.js";

const draco = new DRACOLoader();
draco.setDecoderPath("https://www.gstatic.com/draco/v1/decoders/");
const loader = new GLTFLoader().setDRACOLoader(draco);

const url = "https://api.lodapi.de/v1/buildings/3d.glb?bbox=8.66,50.108,8.665,50.111&compression=draco";
const gltf = await loader.loadAsync(url);
scene.add(gltf.scene);

Python — Offline-Variante

# Pure offline-Skript ohne API-Roundtrip, gleicher Output:
uv run python bin/scenerii_bbox_export.py \
  --bbox 8.66,50.108,8.665,50.111 \
  --out frankfurt-block.glb \
  --draco --draco-position-bits 18 \
  --colorize-roofs

Parameters

ParameterInTypeRequiredDefaultBeschreibung
bboxquerystringyesWGS84 minLon,minLat,maxLon,maxLat
z_basequeryenumnoper_buildingper_building / bbox_min / absolute
compressionqueryenumnononenone / draco
colorize_roofsqueryboolnofalseWall/Ground/Roof als separate Materials
merge_buildingsqueryboolnotrueAlle Gebäude in 1 Mesh + Primitive-pro-Material
target_framequeryenumnoutmutm (UTM-Meter, Blender/DCC) / mercator (MapLibre-Scene-Units am Anchor, scenerii-App-kompatibel)
originqueryenumnocentercenter (bbox-Mitte) / corner (bbox-(minLon,minLat); überstehende Gebäude bleiben relativ korrekt)
rotate_xqueryfloatno0Rotation um X-Achse in Grad, intrinsisch vor Z
rotate_zqueryfloatno0Rotation um Z-Achse in Grad, intrinsisch nach X. Blender-Y-up: rotate_x=-90&rotate_z=-90
include_groundqueryboolnotruefalse = GroundSurface (class 710) weglassen, vermeidet Z-Fighting mit Boden-Layer
weld_tolerance_mqueryfloatno0.0Vertex-Merge-Toleranz (Quantize). 0 = aus; 0.01 schrumpft Stadt-Meshes um ~40 %

Admin-Header

HeaderBeschreibung
X-Lodapi-Admin-TokenWenn gesetzt + Match gegen Server-LODAPI_ADMIN_TOKEN: erlaubt bis 250 km² / 1 000 000 Buildings (statt 1 km² / 20 000). Server-zu-Server only, kein Public-Sharing.

Z-Normalization

Response

200 OK · model/gltf-binary — eine GLB-Datei.

Antwort-Header tragen Metadata:

HeaderBedeutung
ETagfür Conditional-GET
Cache-Controlpublic, max-age=300
X-Lodapi-BuildingsAnzahl Gebäude im GLB
X-Lodapi-Anchor-SridUTM-Anker-EPSG (z.B. 25832)
X-Lodapi-Anchor-LonLatlon,lat des Anchor-Punkts (WGS84) — bei origin=corner = minLon,minLat
X-Lodapi-Origin-ENE,N des Origin-Punkts im Anker-CRS
X-Lodapi-Target-Frameutm oder mercator
X-Lodapi-Z-Basegewähltes Z-Modell
X-Lodapi-Compressiontatsächlich angewandte Compression (none / draco)
X-Lodapi-Compression-Requestedangefragte Compression — Vergleich zu X-Lodapi-Compression signalisiert Fallback
X-Lodapi-Compression-Errornur gesetzt bei Fallback: kurze Fehler-Beschreibung
X-Lodapi-Raw-Sizeunkomprimierte Bytes (zum Vergleich)
X-Lodapi-Max-BuildingsServer-Limit (20000 oder 1000000 bei Admin-Token)
X-Lodapi-Admin-Limits1 wenn Admin-Bypass aktiv, sonst 0

Limits

LimitPublic-DefaultMit X-Lodapi-Admin-Token
bbox-Fläche1 km²250 km²
Gebäude-Count20 0001 000 000

Bei Überschreitung: 413 Payload Too Large. Public-Limit-Fehlermeldung enthält Hint or supply X-Lodapi-Admin-Token.

Stolperdrähte

Verwandte Endpoints

Verwandt

Bereit?

Hol dir deinen API-Key.

1.000 Calls und 1 GB Tile-Daten kostenlos pro Monat — ohne Kreditkarte, ohne Ablaufdatum.