From 1bed2abfa9553f21eb770a43f11a4f7ecd7b74de Mon Sep 17 00:00:00 2001 From: Johannes Baumeister Date: Wed, 15 Apr 2026 22:27:01 +0200 Subject: [PATCH] Improved loadFromDatabase: added UTM transformation check and auto-zoom to data --- index.html | 72 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 52 insertions(+), 20 deletions(-) diff --git a/index.html b/index.html index 1723608..feec7d1 100644 --- a/index.html +++ b/index.html @@ -2750,34 +2750,66 @@ if (isLoading) return; isLoading = true; try { - console.log("Loading data from PostGIS..."); + console.log("Starte Daten-Abruf vom Server..."); + + // 1. Eigentümer / Flurstücke const ownersRes = await fetch(`${API_BASE}/owners`); - state.owners = await ownersRes.json(); - - const usageRes = await fetch(`${API_BASE}/usage`); - state.usage = await usageRes.json(); - - const variantsRes = await fetch(`${API_BASE}/variants`); - const variants = await variantsRes.json(); - if (variants && variants.length > 0) { - state.variants = variants; + if (ownersRes.ok) { + let geojson = await ownersRes.json(); + // Transformation falls die DB UTM-Koordinaten liefert (z.B. > 1000) + if (geojson.features && geojson.features.length > 0) { + const firstCoord = geojson.features[0].geometry?.coordinates?.[0]?.[0]?.[0] || 0; + if (Math.abs(firstCoord) > 1000) { + console.log("Erkannte UTM-Koordinaten in DB, transformiere..."); + geojson = transformGeoJSON(geojson, "EPSG:25832", "EPSG:4326"); + } + } + state.owners = geojson; + updateOwnerLayer(); + + // Auto-Zoom auf die Daten beim ersten Laden + if (layers.owners.getBounds().isValid()) { + map.fitBounds(layers.owners.getBounds()); + } } + // 2. Varianten + const variantsRes = await fetch(`${API_BASE}/variants`); + if (variantsRes.ok) { + const variants = await variantsRes.json(); + if (variants && variants.length > 0) { + // Merging logic to preserve existing objects but update routes + variants.forEach(sv => { + const local = state.variants.find(lv => lv.id === sv.id); + if (local) { + local.routes = sv.routes || []; + local.name = sv.name || local.name; + } + }); + updateRouteLayers(); + } + } + + // 3. Nutzungen + const usageRes = await fetch(`${API_BASE}/usage`); + if (usageRes.ok) { + state.usage = await usageRes.json(); + updateUsageLayer(); + } + + // 4. WEA const weaRes = await fetch(`${API_BASE}/wea`); - state.wea = await weaRes.json(); - updateWEALayer(); + if (weaRes.ok) { + state.wea = await weaRes.json(); + updateWEALayer(); + } - const infraRes = await fetch(`${API_BASE}/infrastructure`); - state.infrastructure = await infraRes.json(); - updateInfrastructureLayer(); - - initApp(); - console.log("Data successfully loaded from PostGIS."); + console.log("Daten erfolgreich vom Server geladen."); } catch (err) { - console.error("PostGIS Load failed:", err); - initApp(); // Fallback + console.error("Fehler beim Laden der Server-Daten:", err); } finally { isLoading = false; + renderVariants(); } } let isSaving = false;