diff --git a/app.js b/app.js
index 4ca2f6b..df3121b 100644
--- a/app.js
+++ b/app.js
@@ -1202,7 +1202,112 @@ document.addEventListener('DOMContentLoaded', async () => {
console.warn("Restriktionsabstände-Layer konnte nicht geladen werden.");
}
- statusEl.innerText = "Layer geladen (ALKIS DB & Artennachweise integriert).";
+ // Leitungsverläufe aus DB laden
+ console.log("Lade Leitungsverläufe aus Datenbank...");
+ const ltgResp = await fetch('/api/layers/leitungsverlaeufe').catch(err => {
+ console.error("Netzwerkfehler beim Laden der Leitungsverläufe:", err);
+ return null;
+ });
+
+ if (ltgResp?.ok) {
+ const data = await ltgResp.json();
+ console.log(`Leitungsverläufe API: ${data.features ? data.features.length : 0} Features erhalten.`);
+
+ // Alte lokale Layer aufräumen
+ const localLtgKeys = Object.keys(overlays).filter(k =>
+ (k.toLowerCase().includes('freileitung') || k.toLowerCase().includes('wasserstoff') || k.toLowerCase().includes('leitung')) && !k.includes('(db)')
+ );
+ localLtgKeys.forEach(key => {
+ console.log(`Entferne lokalen Leitungs-Layer "${key}" (wird durch DB ersetzt).`);
+ if (state.map.hasLayer(overlays[key])) {
+ state.map.removeLayer(overlays[key]);
+ }
+ layerControl.removeLayer(overlays[key]);
+ delete overlays[key];
+ if (state.bakedData[key]) delete state.bakedData[key];
+ });
+
+ // In zwei Gruppen splitten
+ const freileitungen = { type: 'FeatureCollection', features: [] };
+ const wasserstoff = { type: 'FeatureCollection', features: [] };
+
+ if (data.features) {
+ data.features.forEach(f => {
+ const art = (f.properties.art || '').toLowerCase();
+ if (art.includes('freileitung')) {
+ freileitungen.features.push(f);
+ } else if (art.includes('wasserstoff')) {
+ wasserstoff.features.push(f);
+ }
+ });
+ }
+
+ const createDbLayer = (geojsonData, name, styleFunc, isFreileitung) => {
+ if (geojsonData.features.length === 0) return;
+
+ const layer = L.geoJSON(geojsonData, {
+ style: styleFunc,
+ onEachFeature: (feature, l) => {
+ if (feature.properties) {
+ let popup = `${name}