From 9164281cfb52bbd1d9e43cbe69cd903c39c65606 Mon Sep 17 00:00:00 2001 From: Johannes Baumeister Date: Tue, 28 Apr 2026 17:01:42 +0200 Subject: [PATCH] feat: implement multi-variant persistence and Hilfsgeometrien toggle --- app.js | 31 +++++++++++++++++++++++++++---- index.html | 5 +++++ server.js | 8 ++++---- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/app.js b/app.js index 11d29ed..518095f 100644 --- a/app.js +++ b/app.js @@ -11,7 +11,8 @@ document.addEventListener('DOMContentLoaded', async () => { activeVariant: 'A', bakedData: {}, // Cache for standalone persistence ownerMapping: null, // { firstName: '', lastName: '' } - ownerStatuses: {} // { "Name Vorname": "status" } + ownerStatuses: {}, // { "Name Vorname": "status" } + showAuxiliary: true }; // Removed fetch for config to prevent CORS errors on file:// protocol @@ -319,7 +320,7 @@ document.addEventListener('DOMContentLoaded', async () => { const turbine = { id: `WEA_${Date.now()}`, nr: weaNr, - variant: state.activeVariant, + variant: overrideData?.variant || state.activeVariant, type, rd, hh, fr, latlng, ksfAngle, ksfMirrored, totalHeight: geoms.totalHeight, @@ -370,7 +371,9 @@ document.addEventListener('DOMContentLoaded', async () => { Object.entries(turbine.layers).forEach(([name, layer]) => { if (name !== 'rotationHandle') { - variantLayers[state.activeVariant].addLayer(layer); + if (name === 'marker' || state.showAuxiliary) { + variantLayers[turbine.variant].addLayer(layer); + } } }); @@ -527,6 +530,25 @@ document.addEventListener('DOMContentLoaded', async () => { }); }); + // Hilfsgeometrien Toggle + const checkShowAux = document.getElementById('checkShowAux'); + if (checkShowAux) { + checkShowAux.onchange = () => { + state.showAuxiliary = checkShowAux.checked; + state.turbines.forEach(t => { + Object.entries(t.layers).forEach(([name, layer]) => { + if (name !== 'marker' && name !== 'rotationHandle') { + if (state.showAuxiliary) { + variantLayers[t.variant].addLayer(layer); + } else { + variantLayers[t.variant].removeLayer(layer); + } + } + }); + }); + }; + } + // Simplified Measurement Tool let measureLayer = null; let measurePoints = []; @@ -1497,7 +1519,8 @@ document.addEventListener('DOMContentLoaded', async () => { type: t.type, rd: t.rd, hh: t.hh, - ksfAngle: t.ksfangle ?? t.ksfAngle ?? 0 + ksfAngle: t.ksfangle ?? t.ksfAngle ?? 0, + variant: t.variant }); }); statusEl.innerText = `${dbTurbines.length} WEAs aus Datenbank geladen.`; diff --git a/index.html b/index.html index 8954b59..2c045fc 100644 --- a/index.html +++ b/index.html @@ -35,6 +35,11 @@
Var B
Var C
+
+ +
diff --git a/server.js b/server.js index e1e6faa..c74ec1c 100644 --- a/server.js +++ b/server.js @@ -75,9 +75,9 @@ app.post('/api/wea', async (req, res) => { log(`Füge WEA ein: Nr=${t.nr}, Typ=${t.type}, Pos=${t.latlng?.lat},${t.latlng?.lng}`); await client.query( `INSERT INTO ${schema}.wea_standorte - (projekt_id, wea_nummer, anlagentyp, nabenhoehe, rotordurchmesser, ksf_drehung, geom) - VALUES ($1, $2, $3, $4, $5, $6, ST_Transform(ST_SetSRID(ST_MakePoint($7, $8), 4326), 25832))`, - [targetProject, t.nr, t.type, t.hh, t.rd, t.ksfAngle, t.latlng.lng, t.latlng.lat] + (projekt_id, wea_nummer, anlagentyp, nabenhoehe, rotordurchmesser, ksf_drehung, variante, geom) + VALUES ($1, $2, $3, $4, $5, $6, $7, ST_Transform(ST_SetSRID(ST_MakePoint($8, $9), 4326), 25832))`, + [targetProject, t.nr, t.type, t.hh, t.rd, t.ksfAngle, t.variant, t.latlng.lng, t.latlng.lat] ); } } @@ -100,7 +100,7 @@ app.get('/api/wea/:projekt_id', async (req, res) => { log(`Lade WEAs für Projekt: ${projekt_id}`); try { const result = await pool.query( - `SELECT wea_nummer as nr, anlagentyp as type, nabenhoehe as hh, rotordurchmesser as rd, ksf_drehung as ksfAngle, + `SELECT wea_nummer as nr, anlagentyp as type, nabenhoehe as hh, rotordurchmesser as rd, ksf_drehung as ksfAngle, variante as variant, ST_X(ST_Transform(geom, 4326)) as lng, ST_Y(ST_Transform(geom, 4326)) as lat FROM geodaten.wea_standorte WHERE projekt_id = $1`, [projekt_id]