Autorska aplikacja internetowa opracowana w ramach pracy magisterskiej
O projekcie • Funkcjonalności • Technologie • Instalacja • Dane • Licencja
SystemMeteo to autorski system oparty na Laravel 12 przeznaczony do gromadzenia, archiwizacji, przetwarzania, analizy oraz wizualizacji danych meteorologicznych.
Projekt został opracowany jako część pracy magisterskiej:
„System archiwizacji i wizualizacji danych meteorologicznych oparty na technologii Laravel”
Głównym założeniem systemu jest umożliwienie analizy danych meteorologicznych pochodzących z oficjalnych stacji IMGW-PIB oraz danych udostępnianych przez użytkowników posiadających własne stacje pogodowe.
Aplikacja umożliwia zarówno dostęp do bieżących pomiarów, jak i analizę danych historycznych.
Dane prezentowane są między innymi w postaci:
- interaktywnych map,
- wykresów,
- zestawień tabelarycznych,
SystemMeteo to także rozwiązanie wieloużytkownikowe, umożliwiające również rejestrowanie własnych stacji pogodowych i przesyłanie przez nie pomiarów do serwera.
System współpracuje z publicznymi zasobami Instytutu Meteorologii i Gospodarki Wodnej – Państwowego Instytutu Badawczego.
Dane IMGW-PIB zostały przetworzone na potrzeby niektórych funkcjonalności systemu.
Wykorzystywane są między innymi:
- bieżące dane meteorologiczne pobierane przez publiczne API IMGW,
- archiwalne dane meteorologiczne z publicznego repozytorium danych pomiarowo-obserwacyjnych IMGW
(dane: "terminowe/klimat/", "dobowe/klimat/", "miesieczne/klimat/"), - wykaz stacji meteorologicznych IMGW,
Dane archiwalne IMGW są wykorzystywane w formacie CSV, natomiast bieżące dane API są przetwarzane w formacie JSON.
System automatycznie pobiera aktualne dane od API IMGW i zapisuje je lokalnie w postaci przetworzonych plików JSON.
Proces archiwizacji został oparty na zadaniu Laravel Artisan uruchamianym cyklicznie przez mechanizm Cron.
W opracowanym wdrożeniu dane są pobierane co 30 minut.
Dane są następnie przetwarzane do kilku poziomów agregacji:
- 30-minutowej,
- terminowej,
- dobowej,
- miesięcznej.
Mapa aktualnych danych meteorologicznych IMGW IMGW
Wariant mapy aktualnych danych meteorologicznych IMGW
Zestawienie tabelaryczne odebranych danych IMGW
System umożliwia prezentowanie aktualnych danych meteorologicznych wszystkich dostępnych stacji IMGW na interaktywnej mapie OpenStreetMap.
Użytkownik może między innymi:
- wybierać prezentowany parametr meteorologiczny,
- wyszukiwać stacje,
- wyświetlać szczegółowe pomiary,
- przeglądać lokalizacje stacji,
- korzystać z trybu pełnoekranowego mapy,
- przechodzić bezpośrednio do archiwów wybranych stacji.
Mapa wykorzystuje bibliotekę Leaflet.js, a dane są przekazywane do warstwy wizualnej za pośrednictwem komponentów Livewire.
Lokalne archiwum danych meteorologicznych IMGW
Oficjalne archiwum danych meteorologicznych IMGW
System pozwala na analizowanie lokalnie i oficjalnie archiwizowanych danych meteorologicznych.
Dostępne są między innymi:
- wybór stacji meteorologicznej,
- wybór zakresu czasowego,
- wybór poziomu agregacji,
- prezentacja danych w zestawieniach tabelarycznych,
- wizualizacja danych na wykresach,
- obliczanie statystyk opisowych.
System umożliwia użytkownikom tworzenie własnych stacji pogodowych.
Dla stacji można określić między innymi:
- obsługiwane parametry pomiarowe,
- status aktywności,
- status publiczności.
Archiwizowane dane stacji użytkowników są przechowywane w bazie danych systemu.
Dane stacji użytkowników mogą być prezentowane na mapie, przy czym system rozróżnia stacje publiczne i prywatne.
Stacje publiczne mogą być przeglądane przez innych użytkowników, natomiast dane stacji prywatnych pozostają dostępne wyłącznie dla ich właściciela.
Lista stacji pogodowych użytkownika - centrum konfiguracji
Przykładowa stacja pogodowa dodana przez użytkownika
System udostępnia dedykowany interfejs umożliwiający przesyłanie danych pomiarowych z własnych stacji pogodowych:
POST /api/data
Żądanie wymaga autoryzacji za pomocą tokenu API tworzonego w zakładce Moje tokeny API przesyłanego w nagłówku:
Authorization: Bearer <API_TOKEN>Przykładowe dane:
{
"station_id": 1,
"temp_air": 21.4,
"humidity": 64.2,
"wind_speed": 3.5,
"wind_direction": 245,
"rain_10min": 0.4
}Obsługiwane są między innymi:
| Parametr | Jednostka |
|---|---|
| Temperatura powietrza | °C |
| Wilgotność względna | % |
| Prędkość wiatru | m/s |
| Kierunek wiatru | ° |
| Opad z ostatnich 10 minut | mm |
Interfejs wykonuje walidację przesłanych danych, uwierzytelnienie tokenem, weryfikację właściciela stacji oraz sprawdzenie jej aktywności przed zapisaniem pomiaru.
System posiada mechanizm rejestracji i uwierzytelniania użytkowników.
Zalogowani użytkownicy mogą między innymi:
- zarządzać własnym kontem,
- tworzyć stacje pogodowe,
- generować tokeny API,
- zarządzać stacjami,
- przeglądać własne dane,
- decydować o publiczności stacji.
Mechanizmy uwierzytelniania i zarządzania kontami zostały zrealizowane z wykorzystaniem Laravel Jetstream.
System umożliwia wykonywanie podstawowych analiz statystycznych zgromadzonych danych meteorologicznych.
W zależności od rodzaju danych obliczane są między innymi:
- minimum,
- maksimum,
- średnia,
- mediana,
- wariancja,
- odchylenie standardowe,
- suma,
- liczebność próby.
Interfejs systemu został przygotowany z uwzględnieniem różnych rozdzielczości ekranów.
| Technologia | Wersja |
|---|---|
| PHP | 8.2 |
| Laravel | 12.0 |
| Laravel Jetstream | 5.3 |
| Laravel Sanctum | 4.0 |
| Laravel Livewire | 3.0 |
| Filament Tables | 3.3 |
| Filament Map Picker | 1.8 |
| Tailwind CSS | 3.4.17 |
| Vite | 6.2.4 |
| Alpine.js | 3.14.9 |
| Leaflet.js | 1.9.4 |
| Leaflet.fullscreen | 3.14.9 |
| Chart.js | 4.5.0 |
W testowej wersji wykorzystano SQLite. Silnik bazy można zmienić w pliku konfiguracyjnym .env.
Do uruchomienia projektu wymagane są co najmniej:
- PHP 8.2,
- Composer,
- Node.js,
- npm,
- SQLite lub inny kompatybilny silnik bazy danych,
- *serwer WWW obsługujący PHP.
- minimum 2 GB przestrzeni dyskowej oraz 300 MB pamięci RAM dla przykładowego wdrożenia.
git clone https://github.com/DominikBut/SystemMeteo.git
cd SystemMeteocomposer installnpm installUtwórz plik .env na podstawie:
cp .env.example .envNastępnie wygeneruj klucz aplikacji:
php artisan key:generateDla SQLite:
touch database/database.sqliteNastępnie wykonaj migracje:
php artisan migrateW osobnym terminalu:
npm run devphp artisan serveAplikacja będzie dostępna lokalnie pod adresem:
http://127.0.0.1:8000
System posiada mechanizm automatycznego pobierania i archiwizacji aktualnych danych meteorologicznych udostępnianych przez API IMGW.
Logika odpowiedzialna za pobieranie i przetwarzanie danych została zaimplementowana po stronie aplikacji za wykonanie właściwych operacji odpowiada Laravel Scheduler.
W środowisku produkcyjnym na hostingu współdzielonym wykorzystywany jest skrypt .sh, uruchamiany cyklicznie co 30 minut przez harmonogram zadań Cron.
Przykładowy skrypt:
#!/bin/bash
cd SystemMeteo && php83 artisan schedule:runSkrypt uruchamia mechanizm Laravel Scheduler przy użyciu PHP 8.3.
Mechanizm archiwizacji:
Hosting
│
│ co 30 minut
▼
.sh script
│
▼
php artisan schedule:run
│
▼
Laravel Scheduler
│
▼
Żądanie HTTP
│
▼
IMGW API
│
▼
JSON
│
▼
Walidacja i przetwarzanie
│
├──► agregacja 30-minutowa
│
├──► agregacja terminowa
│
├──► agregacja dobowa
│
└──► agregacja miesięczna
│
▼
lokalne archiwum
Proces został zaprojektowany tak, aby ograniczać liczbę niepotrzebnych zapisów oraz automatycznie zarządzać przestrzenią dyskową. Najstarsze dane 30-minutowe są usuwane po 7 dniach, podczas gdy dane bardziej zagregowane pozostają dostępne do dalszej analizy.
Podstawowym źródłem oficjalnych danych meteorologicznych wykorzystywanych przez system jest:
Instytut Meteorologii i Gospodarki Wodnej – Państwowy Instytut Badawczy (IMGW-PIB).
System współpracuje z publicznymi zasobami Instytutu Meteorologii i Gospodarki Wodnej – Państwowego Instytutu Badawczego.
Dane IMGW-PIB zostały przetworzone na potrzeby niektórych funkcjonalności systemu.
Wykorzystywane są między innymi:
- bieżące dane meteorologiczne pobierane przez publiczne API IMGW,
- archiwalne dane meteorologiczne z publicznego repozytorium danych pomiarowo-obserwacyjnych IMGW
(dane: "terminowe/klimat/", "dobowe/klimat/", "miesieczne/klimat/"), - wykaz stacji meteorologicznych IMGW,
Dane archiwalne IMGW są wykorzystywane w formacie CSV, natomiast bieżące dane API są przetwarzane w formacie JSON.
Dane IMGW są udostępniane w ramach zasobów publicznych zgodnie z warunkami określonymi przez ich dostawcę.
Przy dalszym wykorzystaniu danych należy zachować wymagane oznaczenia źródła.
System jest zależny od dostępności zewnętrznych źródeł danych IMGW. Zmiana struktury API, niedostępność serwera lub ograniczenie dostępu do danych może wpłynąć na działanie funkcji odpowiedzialnych za pobieranie, archiwizację i wizualizację danych.
Kod źródłowy projektu jest udostępniany na licencji MIT.
Wymagane jest zachowanie informacji o prawach autorskich oraz treści licencji.
Copyright © 2026 Dominik But
Należy pamiętać, że licencja projektu nie obejmuje automatycznie zewnętrznych bibliotek, frameworków, danych IMGW, map OpenStreetMap ani innych materiałów należących do osób trzecich. Ich wykorzystanie podlega odpowiednim, odrębnym warunkom licencyjnym.
Projekt został zrealizowany z wykorzystaniem otwartego ekosystemu PHP i Laravel oraz bibliotek i narzędzi Open Source.
Szczególne znaczenie dla projektu miały:
- Laravel,
- Livewire,
- Filament,
- Jetstream,
- Leaflet.js,
- Chart.js,
- Alpine.js,
- Tailwind CSS,
- OpenStreetMap.
SystemMeteo
System archiwizacji i wizualizacji danych meteorologicznych









