From 2422cdce452278d8db7a4bd0f1f54de21beff2b0 Mon Sep 17 00:00:00 2001 From: Claude Dev Date: Tue, 24 Mar 2026 13:20:45 +0100 Subject: [PATCH] Fix: disasters.js neu geschrieben (Syntax-Fehler durch Patch) Sauberer Neuschrieb: NASA EONET + USGS Erdbeben kombiniert. Syntax verifiziert. --- static/js/layers/disasters.js | 120 ++++++++++++++++------------------ 1 file changed, 55 insertions(+), 65 deletions(-) diff --git a/static/js/layers/disasters.js b/static/js/layers/disasters.js index 01f7e9c..11e5944 100644 --- a/static/js/layers/disasters.js +++ b/static/js/layers/disasters.js @@ -1,5 +1,5 @@ /** - * Naturkatastrophen-Layer: NASA EONET (Waldbrände, Vulkane, Stürme, Eis). + * Katastrophen-Layer: NASA EONET + USGS Erdbeben kombiniert. */ const DisastersLayer = { _viewer: null, @@ -28,82 +28,72 @@ const DisastersLayer = { var loadEl = document.getElementById('loading-disasters'); var statusEl = document.getElementById('status-disasters'); if (loadEl) loadEl.classList.add('active'); - if (statusEl) { statusEl.textContent = 'Lade Ereignisse + Erdbeben...'; statusEl.classList.add('active'); } - // Lade beides parallel: NASA EONET + USGS Erdbeben + if (statusEl) { statusEl.textContent = 'Lade Katastrophen + Erdbeben...'; statusEl.classList.add('active'); } + Promise.all([ - fetch('/api/disasters').then(function(r) { return r.json(); }).catch(function() { return {events:[]}; }), - fetch('/api/quakes').then(function(r) { return r.json(); }).catch(function() { return {features:[]}; }), + fetch('/api/disasters').then(function(r) { return r.json(); }).catch(function() { return { events: [] }; }), + fetch('/api/quakes').then(function(r) { return r.json(); }).catch(function() { return { features: [] }; }) ]) .then(function(results) { - var eonetData = results[0]; - var quakeData = results[1]; - self._renderAll(eonetData, quakeData); - var total = (eonetData.events || []).length + (quakeData.features || []).length; - self._count = total; - if (statusEl) statusEl.textContent = total + ' Ereignisse'; + if (!self._dataSource) return; + self._dataSource.entities.removeAll(); + var events = results[0].events || []; + var quakes = results[1].features || []; + self._renderEonet(events); + self._renderQuakes(quakes); + self._count = events.length + quakes.length; + if (statusEl) statusEl.textContent = self._count + ' Ereignisse'; }) .catch(function(e) { console.warn('Disasters error:', e); if (statusEl) statusEl.textContent = 'Fehler'; }) .finally(function() { if (loadEl) loadEl.classList.remove('active'); setTimeout(function() { if (statusEl) statusEl.classList.remove('active'); }, 5000); }); }, - _renderAll(eonetData, quakeData) { - if (!this._dataSource) return; - this._dataSource.entities.removeAll(); - - // NASA EONET Events - var events = eonetData.events || []; - this._renderEonet(events); - - // USGS Erdbeben - var quakes = quakeData.features || []; - this._renderQuakes(quakes); - }, - _renderEonet(events) { var self = this; - .then(function(r) { return r.json(); }) var icons = { - 'wildfires': { color: '#ff4400', symbol: '🔥', label: 'Waldbrand' }, - 'volcanoes': { color: '#ff0000', symbol: '🌋', label: 'Vulkan' }, - 'severeStorms': { color: '#aa44ff', symbol: '🌀', label: 'Sturm' }, - 'floods': { color: '#4488ff', symbol: '🌊', label: 'Flut' }, - 'earthquakes': { color: '#ffaa00', symbol: '⚡', label: 'Erdbeben' }, - 'seaLakeIce': { color: '#88ddff', symbol: '❄️', label: 'Eis' }, - 'landslides': { color: '#886644', symbol: '⛰️', label: 'Erdrutsch' }, - }; - events.forEach(function(evt) { - var cats = evt.categories || []; - var catId = cats.length ? cats[0].id : 'unknown'; - var icon = icons[catId] || { color: '#ffffff', symbol: '⚠️', label: catId }; - var geom = evt.geometry || []; - if (!geom.length) return; - var latest = geom[geom.length - 1]; - var coords = latest.coordinates; - if (!coords || coords.length < 2) return; - var lon = coords[0], lat = coords[1]; - - self._dataSource.entities.add({ - position: Cesium.Cartesian3.fromDegrees(lon, lat, 0), - point: { - pixelSize: 8, - color: Cesium.Color.fromCssColorString(icon.color), - outlineColor: Cesium.Color.fromCssColorString(icon.color).withAlpha(0.4), - outlineWidth: 3, - heightReference: Cesium.HeightReference.NONE, - }, - label: { - text: icon.symbol, - font: '14px sans-serif', - pixelOffset: new Cesium.Cartesian2(0, -14), - distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 5000000), - }, - description: '
' + - '' + icon.label.toUpperCase() + '
' + - '' + (evt.title || '?') + '
' + - 'Quellen: ' + (evt.sources || []).map(function(s) { return s.id; }).join(', ') + '' + - '
', - }); + 'wildfires': { color: '#ff4400', label: 'Waldbrand' }, + 'volcanoes': { color: '#ff0000', label: 'Vulkan' }, + 'severeStorms': { color: '#aa44ff', label: 'Sturm' }, + 'floods': { color: '#4488ff', label: 'Flut' }, + 'earthquakes': { color: '#ffaa00', label: 'Erdbeben' }, + 'seaLakeIce': { color: '#88ddff', label: 'Eis' }, + 'landslides': { color: '#886644', label: 'Erdrutsch' }, + }; + events.forEach(function(evt) { + var cats = evt.categories || []; + var catId = cats.length ? cats[0].id : 'unknown'; + var icon = icons[catId] || { color: '#ffffff', label: catId }; + var geom = evt.geometry || []; + if (!geom.length) return; + var latest = geom[geom.length - 1]; + var coords = latest.coordinates; + if (!coords || coords.length < 2) return; + self._dataSource.entities.add({ + position: Cesium.Cartesian3.fromDegrees(coords[0], coords[1], 0), + point: { + pixelSize: 8, + color: Cesium.Color.fromCssColorString(icon.color), + outlineColor: Cesium.Color.fromCssColorString(icon.color).withAlpha(0.4), + outlineWidth: 3, + heightReference: Cesium.HeightReference.NONE, + }, + label: { + text: icon.label, + font: '10px monospace', + fillColor: Cesium.Color.fromCssColorString(icon.color), + outlineColor: Cesium.Color.BLACK, + outlineWidth: 2, + style: Cesium.LabelStyle.FILL_AND_OUTLINE, + pixelOffset: new Cesium.Cartesian2(0, -14), + scale: 0.7, + distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 5000000), + }, + description: '
' + + '' + icon.label.toUpperCase() + '
' + + '' + (evt.title || '?') + '
' + + 'Quellen: ' + (evt.sources || []).map(function(s) { return s.id; }).join(', ') + '
', }); + }); }, _renderQuakes(features) {