feat: add global weather support
All checks were successful
CI / Lint, typecheck and build (push) Successful in 9m54s
All checks were successful
CI / Lint, typecheck and build (push) Successful in 9m54s
This commit is contained in:
@@ -2,9 +2,29 @@
|
||||
|
||||
`wtr.` rozdziela bieżące pomiary, lokalną analizę IMGW Hybrid, prognozę modelową i ostrzeżenia. Prognoza nie jest przedstawiana jako pomiar IMGW.
|
||||
|
||||
## Region i Kontrakt Danych
|
||||
|
||||
Aplikacja rozpoznaje dwa regiony pogodowe:
|
||||
|
||||
- `PL` - lokalizacje w Polsce,
|
||||
- `GLOBAL` - wszystkie pozostałe lokalizacje.
|
||||
|
||||
Region jest częścią modelu lokalizacji i odpowiedzi pogodowych. UI powinien bazować na capabilities i metadanych źródła, a nie rozsiewać własne warunki po kraju.
|
||||
|
||||
Każda znormalizowana odpowiedź bieżących warunków zawiera metadane:
|
||||
|
||||
- `source`, np. `IMGW` albo `OPEN_METEO`,
|
||||
- `sourceLabel` dla UI,
|
||||
- `sourceType`, np. `hybrid` albo `model`,
|
||||
- `isOfficial`,
|
||||
- `region`,
|
||||
- `fetchedAt` i `measuredAt`/czas aktualizacji.
|
||||
|
||||
## Bieżące Warunki
|
||||
|
||||
Dashboard hero korzysta z publicznego endpointu IMGW Hybrid oficjalnego portalu `meteo.imgw.pl` przez `/api/imgw-current`.
|
||||
Dashboard hero korzysta z `/api/current-weather`.
|
||||
|
||||
Dla `PL` endpoint używa publicznego endpointu IMGW Hybrid oficjalnego portalu `meteo.imgw.pl`. Dla `GLOBAL` używa modelowych bieżących warunków Open-Meteo i nie opisuje ich jako pomiaru.
|
||||
|
||||
Normalizacja w `lib/imgw-current-api.ts`:
|
||||
|
||||
@@ -19,13 +39,15 @@ Jeśli Hybrid nie dostarcza pełnych danych, UI jawnie korzysta z fallbacku `syn
|
||||
|
||||
## Prognoza Modelowa
|
||||
|
||||
Route handler `/api/forecast` pobiera równolegle:
|
||||
Route handler `/api/forecast` dla `PL` pobiera równolegle:
|
||||
|
||||
- pełne 7 dni Open-Meteo,
|
||||
- godzinowe IMGW ALARO.
|
||||
|
||||
W godzinach pokrytych przez ALARO parametry IMGW mają pierwszeństwo. Open-Meteo dostarcza prawdopodobieństwo opadu i dalszy horyzont do 7 dni. Awaria ALARO pozostawia działający fallback Open-Meteo.
|
||||
|
||||
Dla `GLOBAL` route handler nie odpytuje IMGW ALARO i używa Open-Meteo z `timezone=auto`.
|
||||
|
||||
Dashboard pokazuje:
|
||||
|
||||
- regułowy brief dnia,
|
||||
@@ -38,6 +60,8 @@ Widok szczegółowy dnia korzysta z pełnego zestawu godzin dla wybranej daty.
|
||||
|
||||
Ostrzeżenia meteorologiczne IMGW zawierają kody powiatów TERYT. Ostrzeżenia hydrologiczne zawierają jawne województwa. Normalizacja odbywa się przez `lib/provinces.ts` i `lib/warning-regions.ts`.
|
||||
|
||||
Ostrzeżenia są capability tylko dla `PL`. Dla `GLOBAL` widok `/warnings` pokazuje stan niedostępności oficjalnych ostrzeżeń i nie traktuje prognozy modelowej jako oficjalnego alertu.
|
||||
|
||||
Zasady UI:
|
||||
|
||||
- lokalny obszar jest priorytetyzowany,
|
||||
@@ -55,6 +79,8 @@ Brief dnia analizuje najbliższe 24 godziny prognozy modelowej oraz aktywne i na
|
||||
|
||||
Brief na jutro analizuje pełny jutrzejszy dzień prognozy. Może informować o burzach na podstawie kodów pogodowych modelu nawet wtedy, gdy IMGW nie opublikowało oficjalnego ostrzeżenia.
|
||||
|
||||
Dla `GLOBAL` briefy korzystają z Open-Meteo i pomijają oficjalne ostrzeżenia IMGW.
|
||||
|
||||
## Opad i Pomiary Synoptyczne
|
||||
|
||||
Pole `synop.suma_opadu` jest akumulowaną sumą opadu. Nie oznacza, że pada w tej chwili, i nie steruje animacją deszczu.
|
||||
|
||||
Reference in New Issue
Block a user