← zurück zur Übersicht

Schnittstellen & Formate

Wie Modelle, Scans und Höhen in den Baukasten hinein- und herauskommen — mit lauffähigen Beispielen. (Diese technische Doku liegt zurzeit auf Deutsch vor.)

1 · GLB/glTF mit Georeferenz — unsere Konvention

glTF 2.0 (Binärform: GLB) ist der offene Khronos-Standard für 3D-Austausch (ISO/IEC 12113) — Blender, SketchUp (Extension), Unity und alle Web-Viewer lesen und schreiben es. Der Standard selbst kennt keine Weltkoordinaten; darum trägt man sie als Metadaten. Unsere Konvention: das Feld extras.lv95 an der Szene. Trägt ein GLB diese eine Angabe, platziert der Modell-Import in «Umgebung 3D» das Objekt automatisch am richtigen Ort.

JSON · Konvention

Export aus eigenem Code (three.js)

JavaScript · Export

Nachträglich georeferenzieren (Python, ohne Zusatzpakete)

Python · Patch

2 · Scan- und Modell-API (VistaCore)

EndpunktZweck
POST /api/scan3D-Scan hochladen — Body = GLB oder PLY (max. 400 MB); Kopf X-Pose = JSON {"e":…, "n":…, "notiz":"…"} (optional). Splat-PLYs werden automatisch auf eine Farb-Punktwolke verdichtet. Antwort enthält id und eine analyse des Inhalts.
GET /api/scans?alle=1Liste aller Scans (id, notiz, bytes, typ, lage); alternativ Rechteck mit e0&n0&e1&n1.
GET /api/scan/<id>.glb|.plyDatei herunterladen.
POST /api/scan_lagePlatzierung speichern: {"scan_id":"…","lage":{"e":…,"n":…,"z":…,"rot":…,"skal":…,"auf":…}} — oder {"scan_id":"…","loeschen":true}.
POST /api/fassadeFassadenfoto (JPEG) mit X-Pose = {"e","n","az","neig","fov","notiz"}.
GET /api/hoehenprofil?punkte=E,N;E,N…Höhen entlang einer Linie aus swissALTI3D 0.5 m (Terrain, ohne Vegetation), ≤ 600 Stützpunkte.
Shell · Upload

3 · Höhenprofil — lauffähiges Beispiel

Der Editor unten ist echt: Code anpassen (Koordinaten, Auswertung) und «Ausführen» — er läuft in dieser Seite gegen die angemeldete Sitzung. Falten mit dem Pfeil in der Randspalte.

JavaScript · editierbar
Ausgabe erscheint hier …

4 · Cesium & OGC 3D Tiles (swisstopo)

3D Tiles ist der offene OGC-Standard fürs Streamen grosser 3D-Welten in Kacheln — entwickelt vom Cesium-Umfeld; die Kachel-Inhalte sind ihrerseits glTF. Er ist breit abgestützt (CesiumJS, ArcGIS, QGIS, three.js-Bibliotheken), und swisstopo publiziert seine 3D-Daten genau so — die Viewer auf map.geo.admin.ch nutzen Cesium. Zwei geprüfte, frei zugängliche Kachelbäume:

Import in CesiumJS

JavaScript · CesiumJS

Import in three.js (unser Stack)

JavaScript · three.js

Warum three.js — und nicht Cesium (oder ähnliches)?

Die Frage kommt zu Recht, denn swisstopo selbst setzt auf Cesium. Die Antwort ist kein «besser oder schlechter», sondern ein anderes Stockwerk:

Unsere Wahl: Für 500-m-Fenster mit Schnitten, Schatten, Mess- und Foto-Werkzeugen ist three.js die richtige Basis — Cesium würde dort eher behindern. Cesium (oder der 3d-tiles-renderer im eigenen three.js-Stack) glänzt bei einem künftigen Schaufenster: dem Kantons-Rundflug über die oben verlinkten swisstopo-3D-Tiles.

Einordnung für unseren Baukasten: Wir laden Gebäude heute gezielt pro Ausschnitt über die swisstopo-STAC-Rohdaten — für 500-m-Fenster ist das einfacher und schneller als Kachel-Streaming. 3D Tiles wird interessant, sobald wir grosse Gebiete fliegend laden wollen (Kantons-Rundflug); die Bibliothek dafür ist frei und passt in unseren three.js-Stack.