From a51a6addf9dec40df981b19d38127abd44239012 Mon Sep 17 00:00:00 2001 From: Johannes Baumeister Date: Fri, 29 May 2026 09:20:27 +0200 Subject: [PATCH] feat: Artennachweise Restriktionen Abstand Layer integriert --- app.js | 29 ++++++++++++++++++++++++++++- server.js | 25 +++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 13a52df..f8c7e9c 100644 --- a/app.js +++ b/app.js @@ -1153,7 +1153,34 @@ document.addEventListener('DOMContentLoaded', async () => { console.warn("Artennachweis-Layer konnte nicht geladen werden."); } - statusEl.innerText = "Layer geladen (ALKIS DB & Artennachweis integriert)."; + // Artennachweis Restriktionsabstände laden + console.log("Lade Artennachweise-Restriktionen aus Datenbank..."); + const restriktionResp = await fetch('/api/layers/artennachweise_restriktionen').catch(err => { + console.error("Netzwerkfehler beim Laden der Restriktionsabstände:", err); + return null; + }); + + if (restriktionResp?.ok) { + const data = await restriktionResp.json(); + console.log(`Restriktionsabstände API: ${data.features ? data.features.length : 0} Features erhalten.`); + if (data.features && data.features.length > 0) { + const restriktionLayer = L.geoJSON(data, { + style: { + color: "#000000", + weight: 1, + fillOpacity: 0, + fillColor: "transparent" + } + }); + overlays["Artennachweis Restriktionen"] = restriktionLayer; + state.map.addLayer(restriktionLayer); + layerControl.addOverlay(restriktionLayer, "Artennachweis Restriktionen"); + } + } else { + console.warn("Restriktionsabstände-Layer konnte nicht geladen werden."); + } + + statusEl.innerText = "Layer geladen (ALKIS DB & Artennachweise integriert)."; } catch (e) { if (!isLocalFile) console.error("Layer-Init fehlgeschlagen:", e); } diff --git a/server.js b/server.js index ff3fe62..399078b 100644 --- a/server.js +++ b/server.js @@ -275,6 +275,31 @@ app.get('/api/layers/artennachweis', async (req, res) => { } }); +// NEU: API zum Laden der Artennachweis Restriktionsabstände +app.get('/api/layers/artennachweise_restriktionen', async (req, res) => { + log("Lade Artennachweise-Restriktionen aus Datenbank..."); + try { + const result = await pool.query( + `SELECT jsonb_build_object( + 'type', 'FeatureCollection', + 'features', COALESCE(jsonb_agg(features.feature), '[]'::jsonb) + ) + FROM ( + SELECT jsonb_build_object( + 'type', 'Feature', + 'geometry', ST_AsGeoJSON(ST_Transform(geom, 4326))::jsonb, + 'properties', jsonb_build_object() + ) AS feature + FROM geodaten.artennachweise_restriktion_abstand + ) features` + ); + res.json(result.rows[0].jsonb_build_object); + } catch (err) { + log(`FEHLER beim Laden der Restriktionen: ${err.message}`); + res.status(500).json({ error: err.message }); + } +}); + // API für Projekt-Statistiken (Fortschrittsanzeige) app.get('/api/stats/:projekt_id', async (req, res) => { const { projekt_id } = req.params;