diff --git a/app.js b/app.js index a1993c3..1213461 100644 --- a/app.js +++ b/app.js @@ -1324,7 +1324,40 @@ document.addEventListener('DOMContentLoaded', async () => { console.warn("Leitungsverläufe-Layer konnte nicht geladen werden."); } - statusEl.innerText = "Layer geladen (ALKIS DB, Artennachweise & Leitungen integriert)."; + // Gebäude laden + console.log("Lade Gebäude aus Datenbank..."); + const gebaudeResp = await fetch('/api/layers/gebaude').catch(err => { + console.error("Netzwerkfehler beim Laden der Gebäude:", err); + return null; + }); + + if (gebaudeResp?.ok) { + const data = await gebaudeResp.json(); + console.log(`Gebäude API: ${data.features ? data.features.length : 0} Features erhalten.`); + if (data.features && data.features.length > 0) { + const layerName = "Gebäude (DB)"; + const gebaudeLayer = L.geoJSON(data, { + style: { + color: "gray", + weight: 1, + fillColor: "gray", + fillOpacity: 0.5 + } + }); + + if (overlays[layerName]) { + state.map.removeLayer(overlays[layerName]); + layerControl.removeLayer(overlays[layerName]); + } + overlays[layerName] = gebaudeLayer; + state.map.addLayer(gebaudeLayer); + layerControl.addOverlay(gebaudeLayer, layerName); + } + } else { + console.warn("Gebäude-Layer konnte nicht geladen werden."); + } + + statusEl.innerText = "Layer geladen (ALKIS DB, Artennachweise, Leitungen & Gebäude integriert)."; } catch (e) { if (!isLocalFile) console.error("Layer-Init fehlgeschlagen:", e); } diff --git a/server.js b/server.js index ad3a449..2ad50bb 100644 --- a/server.js +++ b/server.js @@ -336,6 +336,31 @@ app.get('/api/layers/leitungsverlaeufe', async (req, res) => { } }); +// NEU: API zum Laden der Gebäude +app.get('/api/layers/gebaude', async (req, res) => { + log("Lade Gebäude 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.gebaude + ) features` + ); + res.json(result.rows[0].jsonb_build_object); + } catch (err) { + log(`FEHLER beim Laden der Gebäude: ${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;