Swisstopo Importer: STAC-API + Terrain-Mesh + Ortho-Drape (Iteration 1)
Frontend: - src/SwisstopoApp.jsx NEU: Satelliten-Fenster mit Adresse-Suche, Radius- Wahl, Daten-Checkboxen (Gebäude/Terrain/Luftbild), Origin-Handling, Live- Log - ElementeApp Swisstopo-Gruppe: Importer-Button + Karte-Button Backend: - rhino/swisstopo.py NEU: STAC-API-Client, Geocoding via swisstopo Search, LV95↔WGS84-Konvertierung, GeoTIFF/XYZ-Cache, mesh_from_grid + Ortho-Material - swissBUILDINGS3D 2.0 (DXF/DWG) via STAC; Per-Tile-Filter (_NNNN-NN_) schuetzt vor versehentlichem Download der 3.5 GB National-Geodatabase - swissALTI3D als XYZ-ZIP mit zipfile-Extraction, raeumliches Sub-Sampling statt Zeilen-Step (keine Streifen mehr im Terrain-Mesh) - SWISSIMAGE 10cm GeoTIFF als RenderMaterial-DiffuseBitmap mit planarem UV-Mapping auf den Terrain-Mesh-bbox Robustheit: - Auto-Skala-Erkennung: Rhinos DXF-Parser scaliert je nach \$INSUNITS auf unerwartete Doc-Units; wir messen aus ersten 50 Objekten + snappen auf Zehnerpotenz (1, 0.001, 1000) - bbox + origin_shift in doc-units (m_to_unit aus UnitScale + Auto-Detect) - Tags via UserString dossier_swisstopo_kind=buildings/terrain fuer Replace-Detection bei erneutem Import desselben Gebiets - BBox-Clip jetzt OPTIONAL (Default OFF, Checkbox) — bei InstanceReferences GetBoundingBox + Delete teuer - Batch-Transform via System.Collections.Generic.List[Guid] statt Python-Loop (Python.NET-Overload-Match) - Listener-Suppression in elemente.py + gestaltung.py + dimensionen.py via sticky dossier_swisstopo_busy — kein Per-Object-Spam mehr bei Selection/Add/Delete waehrend 5000+ Imports - Auto-Zoom via view.ZoomBoundingBox(combined) statt Select-Loop - Year-Dedupe auf Tile-Coord (Pattern YYYY oder YYYY-MM unterstuetzt) fuer alle Collections — aeltere Versionen werden ausgefiltert - Download-Safety: > 200 MB wird abgebrochen + Live-Progress alle 2 MB mit UI-Yield via Rhino.RhinoApp.Wait() Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -258,6 +258,9 @@ export function createStuetze(p) { send('CREATE_STUETZE', p || {}) }
|
||||
export function createTraeger(p) { send('CREATE_TRAEGER', p || {}) }
|
||||
export function createRaum(p) { send('CREATE_RAUM', p || {}) }
|
||||
export function exportRaeume() { send('EXPORT_RAEUME', {}) }
|
||||
export function openSwisstopo(mode) { send('OPEN_SWISSTOPO', { mode: mode || 'both' }) }
|
||||
export function importSwisstopo(kind) { send('IMPORT_SWISSTOPO', { kind: kind || 'buildings' }) }
|
||||
export function openSwisstopoDialog() { send('OPEN_SWISSTOPO_DIALOG', {}) }
|
||||
export function updateElement(id, patch) { send('UPDATE_ELEMENT', { id, ...(patch || {}) }) }
|
||||
export function deleteElement(id) { send('DELETE_ELEMENT', { id }) }
|
||||
// Backwards-Compat-Aliases
|
||||
|
||||
Reference in New Issue
Block a user