feat: Gebäude aus Datenbank als transparente graue Fläche eingebunden
Deploy Bürgerwind / deploy (push) Successful in 16s Details

This commit is contained in:
Johannes Baumeister 2026-05-29 13:36:02 +02:00
parent bec244ba26
commit 46bbe0f1ac
2 changed files with 59 additions and 1 deletions

35
app.js
View File

@ -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);
}

View File

@ -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;