DWD-Regenvorhersage: Pipeline + /radar-Route + Timeline-Integration + Settings-Toggle
PoC BESTANDEN (tools/dwd-radar/poc): Anker (9E,51N) = Pixel-Mitte (470/600),
Ecken decken sich mit der DWD-DE1200-Spec — Georeferenzierung bewiesen.
- tools/dwd-radar: RV-Komposit (25 Frames, 0-120min) -> kolorierte RGBA-
PMTiles z4-7 je Frame (MapLibre overzoomt darueber) + manifest.json,
atomarer Swap, KEEP_RUNS-Aufraeumen; 25 Frames in ~14s lokal
- docker-compose.dwd.yml (DSM-Cron alle 5 min, NIE --remove-orphans)
- main.py: /radar/manifest.json (no-store) + /radar/{run}/{file} (Range/206,
immutable — Run-Id im Pfad); sw.js: /radar/ pass-through
- map.js: Radar-Frames heterogen ({url,time,dwd}) — DWD ersetzt RainViewer-
Nowcast (0-120min, 5-min-Schritte) wenn Toggle an + GL + Karte in DE +
Manifest frisch (<30min); sonst RainViewer-Fallback; Label '+X Min - DWD'
- settings.js: Toggle 'DWD-Regenvorhersage' (by_dwd_radar, Default AN)
- pytest 39 passed
Bump v1240
This commit is contained in:
parent
6a06c9be7e
commit
5330681059
17 changed files with 4685 additions and 23 deletions
|
|
@ -825,6 +825,30 @@ window.Page_settings = (() => {
|
|||
</div>`;
|
||||
})()}
|
||||
|
||||
<!-- DWD-Regenvorhersage (Deutschland) — speist die Karten-Radar-Timeline -->
|
||||
<div class="settings-toggle-row">
|
||||
<svg class="ph-icon" aria-hidden="true" style="width:1.25rem;height:1.25rem"><use href="/icons/phosphor.svg#cloud-rain"></use></svg>
|
||||
<div class="settings-toggle-label">
|
||||
<div style="font-weight:500">DWD-Regenvorhersage</div>
|
||||
<div style="font-size:var(--text-xs);color:var(--c-text-secondary);margin-top:2px">
|
||||
2-Stunden-Vorhersage vom Deutschen Wetterdienst im Regenradar (nur Deutschland)
|
||||
</div>
|
||||
</div>
|
||||
<label style="position:relative;display:inline-block;width:44px;height:24px;flex-shrink:0">
|
||||
<input type="checkbox" id="toggle-dwd-radar"
|
||||
style="opacity:0;width:0;height:0;position:absolute"
|
||||
${localStorage.getItem('by_dwd_radar') !== '0' ? 'checked' : ''}>
|
||||
<span style="position:absolute;cursor:pointer;inset:0;border-radius:12px;
|
||||
background:${localStorage.getItem('by_dwd_radar') !== '0' ? 'var(--c-primary)' : 'var(--c-border)'};transition:.2s"
|
||||
id="toggle-dwd-radar-track"></span>
|
||||
<span id="toggle-dwd-radar-thumb"
|
||||
style="position:absolute;top:2px;left:${localStorage.getItem('by_dwd_radar') !== '0' ? '22px' : '2px'};
|
||||
width:20px;height:20px;border-radius:50%;
|
||||
background:#fff;transition:.2s;
|
||||
box-shadow:0 1px 3px rgba(0,0,0,.3)"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<!-- Goldene Gassi-Stunde -->
|
||||
<div class="settings-toggle-row" style="border-bottom:none">
|
||||
<svg class="ph-icon" aria-hidden="true" style="width:1.25rem;height:1.25rem"><use href="/icons/phosphor.svg#paw-print"></use></svg>
|
||||
|
|
@ -1583,6 +1607,19 @@ window.Page_settings = (() => {
|
|||
: 'Pocket-Modus deaktiviert.');
|
||||
});
|
||||
|
||||
// DWD-Regenvorhersage (Default AN) — ausgewertet in pages/map.js _dwdEnabled()
|
||||
document.getElementById('toggle-dwd-radar')?.addEventListener('change', e => {
|
||||
const on = e.target.checked;
|
||||
localStorage.setItem('by_dwd_radar', on ? '1' : '0');
|
||||
const track = document.getElementById('toggle-dwd-radar-track');
|
||||
const thumb = document.getElementById('toggle-dwd-radar-thumb');
|
||||
if (track) track.style.background = on ? 'var(--c-primary)' : 'var(--c-border)';
|
||||
if (thumb) thumb.style.left = on ? '22px' : '2px';
|
||||
UI.toast.info(on
|
||||
? 'DWD-Regenvorhersage aktiviert — 2h-Vorhersage im Regenradar (Deutschland).'
|
||||
: 'DWD-Regenvorhersage deaktiviert — Regenradar nutzt RainViewer.');
|
||||
});
|
||||
|
||||
document.getElementById('toggle-notes-ki')?.addEventListener('change', async e => {
|
||||
const enabled = e.target.checked;
|
||||
const track = document.getElementById('toggle-notes-ki-track');
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue