System służący do archiwizacji i wizualizacji danych meteorologicznych oparty o technologię Laravel 12

Informacje o systemie

System Meteo to kompleksowe narzędzie pozwalające na odczyt wybranych przez użytkownika oficjalnych danych meteorologicznych pozyskiwanych od Instytutu Meteorologii i Gospodarki Wodnej (IMGW) – Państwowego Instytutu Badawczego przez API oraz archiwum plików, a także danych społecznościowych i niezweryfikowanych bieżących danych klimatycznych archiwizowanych bezpośrednio na serwerze. Dane m.in. temperatury powietrza i gruntu, wilgotności względnej, prędkości i kierunku wiatru, a także opadu z ostatnich 10 min są prezentowane w postaci tabelarycznej oraz graficznej zarówno na mapie, jak i na wykresach.

Funkcjonalności systemu:
- Odczyt najnowszych danych meteorologicznych wybranej stacji dostępnej przez API IMGW wraz z prezentacją,
- Odczyt najnowszych danych meteorologicznych wszystkich stacji dostępnych przez API IMGW wraz z prezentacją na interkatywnej mapie,
- Codzienny odczyt i archiwizacja 30-minutowa bieżących danych meteorologicznych wszystkich stacji dostępnych przez API IMGW w postaci dziennych plików w formacie JSON oraz przygotowywanie terminowych, dobowych, miesięcznych plików sumarycznych zawierających odpowiednie średnie sumy, maksyma, minima parametrów wszystkich stacji, również w formatach JSON,
- Odczyt oficjalnych zweryfikowanych danych meteorologicznych-klimatycznych dla wybranej stacji z archiwum plików IMGW wraz z prezentacją,
- Interfejs POST API odbioru, autoryzacji i archiwizacji bieżących danych stacji pogodowych użytkowników społeczności,
- Odczyt danych meteorologicznych dla wybranej stacji społeczności z bazy danych systemu wraz z prezentacją,

Źródła danych wykorzystywanych przez system:
- Oficjalne dane publiczne IMGW: https://danepubliczne.imgw.pl/pl/introduction,
- IMGW API: https://danepubliczne.imgw.pl/api/data/meteo/,
- Oficjalne dane archiwalne IMGW plikowe (CSV) pomiarowo-obserwacyjne - dane meteorologiczne: https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/
(system wykorzystuje tylko dane z katalogów: "terminowe/klimat/", "dobowe/klimat/", "miesieczne/klimat/"),
- Dla wyboru danych bieżących lista stacji pozyskiwana jest okresowo z API, natomiast dla danych archiwalnych jest połączona ze stacjami z pliku CSV dostępnego w archiwum IMGW: wykaz_stacji.csv,

Technologie wykorzystane przy tworzeniu systemu:
- Laravel v12,
- Laravel Jetstream v5,
- Livewire v3,
- Alpine.js v3,
- Chart.js v4.5.0.
- Filament v3,
- TailwindCSS v4.1,
- Leaflet v1.9.4,
- Plugin Leaflet.fullscreen,
- Plugin Filament v3 Map Picker v1.8.8.

Co oznaczają rodzaje agregacji:
- 30-minutowa - dane surowe pozyskiwane bezpośrednio z API co 30 minut dla całego dnia, dostępne tylko przez 8 dni (z dniem aktualnie zapisywanym),
- terminowa - dane dobowe surowe lub zweryfikowane zawierające po 4 pomiary agregujące lub 3 pomiary dla jednego dnia w przypadku zweryfikowanych, do godz. 6, do godz. 12, do godz. 18, plus do godz. 24 w przypadku danych surowych,
- dobowa - dane miesięczne surowe lub zweryfikowane zawierające pomiary agregujące, sumaryczne, minimalne, maksymalne, średnie dla każdego dnia wybranego miesiąca,
- miesięczna - dane roczne surowe lub zweryfikowane zawierające pomiary agregujące, sumaryczne, minimalne, maksymalne, średnie dla każdego miesiąca wybranego roku.

Zasada archiwizacji danych z IMGW API:
Dane archiwizowane są dla wszystkich dostępnych stacji pogodowych przez 24 h/7 dni w tygodniu co 30 minut, tzn. CronJob serwera systemu uruchamia polecenie Artisan Laravel wysyłające zapytanie do API IMGW. Dane następnie są dopisywane do pliku JSON z datą bieżącego dnia.
(nowy plik tworzony jest z wykryciem nowego dnia w chociaż jednej z dat pomiarów uzyskiwanych z API, było to koniecznością, gdyż API IMGW udostępnia dane z opóźnieniem 20 minutowym np. o 11:30 dostajemy dane z 11:10 - pomiary IMGW wykonywane są co 10 minut)
Następnie, jeżeli faktycznie wykryto nowy dzień, dane z pliku z dnia poprzedniego są konwertowane do 4 agregujących pomiarów na dzień tzn. od 00:00 do 5:59, 6:00 - 11:59, 12:00 - 17:59, 18:00 - 23:59 i zapisywane do pliku JSON z datą dnia poprzedniego w katalogu "terminowe".
Po zapisaniu pliku z danymi terminowymi wykonywane jest wyliczanie parametrów średnich, maksymalnych, minimalnych, sumarycznych itp. na podstawie pliku terminowego dla również całej doby poprzedniej i dopisanie ich do pliku JSON miesięcznego odpowiadającego miesiącowi dnia poprzedniego znajdującego się w katalogu "dobowe", jeżeli nie istnieje taki plik to jest on tworzony.
Po wyliczeniu wartości dobowych aktualizowane są w pliku JSON rocznym w katalogu "miesieczne", odpowiadającym roku dnia poprzedniego, parametry miesiąca dnia poprzedniego, jeżeli nie istnieje taki plik jest tworzony.
Dopiero na końcu całego procesu usuwane są z bieżącego katalogu pliki JSON starsze od 7 dni z danymi pozyskiwanymi co 30 minut z API IMGW.

UWAGA! Dane są poprawnie archiwizowane od początku września 2025 roku, wcześniej zarchiwizowane dane mogą zawierać błędy lub luki.

Autor aplikacji internetowej systemu meteo:
But Dominik,
Uniwersytet Przyrodniczy w Poznaniu,
WYDZIAŁ INŻYNIERII ŚRODOWISKA I INŻYNIERII MECHANICZNEJ,
Informatyka i Inżyniera Danych, 2 stopień.
Kontakt: butdominik.biz@gmail.com


System wykonany na potrzeby pracy dyplomowej magisterskiej pod kierunkiem dr inż. Sebastiana Kujawy.
Data wydania: wrzesień 2025.