From 5db86d82c3d05f21200efaef6e4988565cc21049 Mon Sep 17 00:00:00 2001 From: Johannes Baumeister Date: Mon, 11 May 2026 12:51:16 +0200 Subject: [PATCH] Exhaustive hardening of DB loading and geometry creation to fix map rendering --- app.js | 83 +++++++++++++++++++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 38 deletions(-) diff --git a/app.js b/app.js index ff9325d..f072455 100644 --- a/app.js +++ b/app.js @@ -232,7 +232,12 @@ document.addEventListener('DOMContentLoaded', async () => { try { const blf = transform(blfCoords); const ksf = transform(ksfCoords); - const mf = turf.featureCollection(mfParts.map(part => transform(part))); + + // Create the feature collection of polygons + const mf = { + type: "FeatureCollection", + features: mfParts.map(part => transform(part)) + }; return { sweptArea, techDist, techDistSmall, loadRadius, foundation, blf, ksf, mf, totalHeight, utmCoords }; } catch (err) { @@ -1924,51 +1929,53 @@ document.addEventListener('DOMContentLoaded', async () => { console.log(`Lade WEAs aus Datenbank für Projekt: ${projekt_id}...`); try { const response = await fetch(`/api/wea/${projekt_id}`); - if (response.ok) { - const dbTurbines = await response.json(); - console.log(`Datenbank-Response: ${dbTurbines.length} WEAs erhalten.`); - if (dbTurbines.length > 0) { - // Clear existing turbines - state.turbines.forEach(t => { + if (!response.ok) { + throw new Error(`HTTP-Fehler! Status: ${response.status}`); + } + const dbTurbines = await response.json(); + console.log(`Datenbank-Response: ${dbTurbines.length} WEAs erhalten.`); + + if (dbTurbines.length > 0) { + // Clear existing turbines safely + state.turbines.forEach(t => { + try { if (t.layers && t.variant && variantLayers[t.variant]) { Object.values(t.layers).forEach(l => variantLayers[t.variant].removeLayer(l)); } - }); - state.turbines = []; + } catch (e) {} + }); + state.turbines = []; - dbTurbines.forEach(t => { - try { - const latlng = L.latLng(t.lat, t.lng); - const variant = t.variant || 'A'; - - // Check if variant layer exists - if (!variantLayers[variant]) { - console.warn(`WEA ${t.nr} hat ungültige Variante: ${variant}. Überspringe.`); - return; - } - - createTurbine(latlng, null, { - nr: t.nr, - hersteller: t.hersteller, - type: t.type, - rd: t.rd, - hh: t.hh, - ksfAngle: t.ksfangle ?? t.ksfAngle ?? 0, - variant: variant - }); - } catch (e) { - console.error(`Fehler beim Laden von WEA ${t.nr}:`, e); + dbTurbines.forEach(t => { + try { + const latlng = L.latLng(t.lat, t.lng); + const variant = t.variant || 'A'; + + if (!variantLayers[variant]) { + console.warn(`Ungültige Variante: ${variant}`); + return; } - }); - statusEl.innerText = `${dbTurbines.length} WEAs aus Datenbank geladen.`; - } else { - console.log("Datenbank ist leer für dieses Projekt."); - } + + createTurbine(latlng, null, { + nr: t.nr, + hersteller: t.hersteller, + type: t.type, + rd: parseFloat(t.rd) || 160, + hh: parseFloat(t.hh) || 165, + ksfAngle: parseFloat(t.ksfangle ?? t.ksfAngle ?? 0), + variant: variant + }); + } catch (e) { + console.error(`Fehler bei WEA ${t.nr}:`, e); + } + }); + statusEl.innerText = `${dbTurbines.length} WEAs aus Datenbank geladen.`; } else { - console.error("Fehler beim API-Aufruf:", response.status); + console.log("Datenbank ist leer."); } } catch (err) { - console.error("Netzwerkfehler beim Laden aus der DB:", err); + console.error("GLOBALER FEHLER beim Laden aus der DB:", err); + if (statusEl) statusEl.innerText = "Fehler beim Laden der Standorte."; } }