Stan wody rosnący o 20 cm w ciągu godziny to liczba. Ten sam odczyt obok pasa intensywnych opadów nad górną częścią zlewni to już decyzja. Telemetria ze stacji mówi, co dzieje się przy wodowskazie - ale nie mówi, co nadciąga, ani jak wygląda teren wokół czujnika.
Użytkownicy platform monitoringowych dobrze to wiedzą i dlatego w drugiej karcie trzymają otwarty serwis pogodowy. Oczywiste rozwiązanie - komercyjne API pogodowe albo satelitarne - oznacza abonament i opłaty za zapytania, które platforma płaci tak długo, jak istnieje. To dokładnie ten rodzaj zależności, przed którym ostrzegam w tekście o uzależnieniu od dostawcy.
W Wodowskazie poszedłem inną drogą: podkład z ortofotomapy i bieżący radar opadów, oba oparte na oficjalnych danych publicznych, które wolno wykorzystywać komercyjnie. Same dane są świetne - praca polega na takiej integracji, żeby działały jak naturalna część platformy.
Źródła, na których wolno zbudować biznes
„Darmowe” w internecie zwykle znaczy jedno z trzech: darmowe, dopóki nie pojawi się ruch, darmowe do użytku niekomercyjnego albo naprawdę otwarte. Tylko na tym trzecim można bezpiecznie oprzeć projekt dla klienta, więc licencja była pierwszym kryterium wyboru, a nie ostatnim.
- Zdjęcia lotnicze: ortofotomapa GUGiK. Główny Urząd Geodezji i Kartografii udostępnia ortofotomapę Polski przez Geoportal. Można jej używać w dowolnym celu, także komercyjnym, pod warunkiem podania źródła.
- Radar opadów: EUMETNET OPERA. Europejska kompozycja radarów państwowych służb meteorologicznych, w tym IMGW. Dane są na licencji CC BY 4.0, więc użycie komercyjne jest dozwolone, o ile źródło jest podpisane na mapie.
Obie licencje mają jeden twardy wymóg: widoczny podpis źródła. To nie przypis dla działu prawnego, tylko element interfejsu, który trzeba zaprojektować od początku - obok przycisków przybliżania, na każdym widoku, na którym warstwa jest włączona.
Ortofotomapa: prosta, ale z dwoma szczegółami
Geoportal udostępnia ortofotomapę przez WMTS w tej samej siatce kafli Web Mercator, której używa OpenStreetMap. Sama warstwa jest więc niemal rozczarowująco prosta - to zwykła warstwa kafli z innym adresem i przełącznik „Mapa / Ortofotomapa”, który zapamiętuje wybór każdego użytkownika.
ortho: {
url:
'https://mapy.geoportal.gov.pl/wss/service/PZGIK/ORTO/WMTS/StandardResolution' +
'?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=ORTOFOTOMAPA&STYLE=default' +
'&FORMAT=image/jpeg&TILEMATRIXSET=EPSG:3857&TILEMATRIX=EPSG:3857:{z}&TILEROW={y}&TILECOL={x}',
attribution: 'Ortofotomapa © GUGiK',
// Ortofotomapa obejmuje Polskę - nie pytam o kafle poza nią
bounds: [[48.9, 13.9], [55.0, 24.3]],
}Pierwszy szczegół widać w ostatniej linijce. Ortofotomapa obejmuje Polskę, więc mapa ogranicza zapytania o kafle do obszaru kraju, zamiast prosić o zdjęcia tam, gdzie z założenia ich nie ma. Drugi to właściwe oczekiwania użytkowników: zdjęcia są odświeżane region po regionie w cyklu kilkuletnim. Pokazują brzeg rzeki, most i przepust obok wodowskazu - czyli teren wokół stacji, a nie dzisiejszy stan rzeki.
Radar: tu zaczyna się prawdziwa praca
OPERA służy meteorologom i systemom GIS w całej Europie, a nie jednej konkretnej mapie internetowej. Publikuje kompozycje dla całej Europy jako Cloud-Optimized GeoTIFF w odwzorowaniu azymutalnym równopolowym Lamberta, przechowywane w publicznym buforze z ostatnich 24 godzin. Moja mapa działa w Web Mercatorze i interesuje ją tylko Polska oraz dorzecza, które wychodzą poza jej granice. Wszystko pomiędzy to proces po stronie serwera, uruchamiany co 5 minut:
- Pobieraj tylko to, czego potrzebujesz. Plik COG można czytać zapytaniami zakresowymi HTTP, więc serwer pobiera tylko wewnętrzne kafle nad interesującym obszarem - około 200 KB zamiast 3 MB na klatkę.
- Przelicz odwzorowanie raz i używaj zawsze. Przypisanie każdego piksela wyniku do siatki OPERA jest kosztowne, ale zależy wyłącznie od geometrii. Tę tablicę przejścia liczę raz i używam dla każdej klatki, więc renderowanie nowej klatki to proste przejście po tablicy.
- Koloruj tak, jak robią to meteorolodzy. Wartości trafiają na znaną skalę odbiciowości: niebieski, zielony, żółty, czerwony, fiolet. Echa poniżej około 7 dBZ (ok. 0,1 mm/h) odrzucam jako szum, zamiast malować je jako mżawkę.
- Wysyłaj zwykłe obrazki. Każda klatka staje się przezroczystym plikiem PNG na serwerze. Przeglądarka nie wykonuje żadnych obliczeń przestrzennych i nigdy nie łączy się z dostawcą radaru - po prostu odtwarza obrazy z ostatnich dwóch godzin, a drugi produkt pokazuje sumę opadu z godziny.
Jeden szczegół ma większe znaczenie, niż się wydaje: „brak opadu” i „brak danych” to dwie różne rzeczy. Obszary poza zasięgiem radarów zaznaczam delikatną szarą mgiełką, a nie zostawiam przezroczystych. Przezroczysta plama nad regionem bez radaru mówiłaby użytkownikowi, że tam jest sucho - a mapa nigdy nie powinna po cichu kłamać.
Odporność to zadanie integracji
Publiczne usługi danych są budowane z myślą o szerokim, otwartym dostępie, a nie o gwarancjach dostępności dla jednej platformy. To uczciwa wymiana za dane tej jakości - i oznacza, że o odporność musi zadbać integracja. Sieć czasem się przytnie, klatki bywają publikowane ponownie, a formaty z latami się zmieniają. Dlatego proces traktuje przerwy jako normalną sytuację, a nie wyjątek:
- Każda godzina archiwum jest pobierana niezależnie, więc problem ze starszą godziną nigdy nie blokuje najnowszej klatki.
- Najnowsze klatki są przetwarzane jako pierwsze. Jeśli przebieg przekroczy limit czasu, mapa i tak jest aktualna - na kolejny przebieg czekają tylko najstarsze klatki animacji.
- Klatka, której nie udało się przetworzyć, jest ponawiana po 10 i 30 minutach, a potem pomijana - zamiast być pobierana co 5 minut w nieskończoność.
- Jeśli OPERA opublikuje klatkę ponownie - na przykład po spóźnionych danych z części radarów - zmiana wersji pliku wymusza ponowne przetworzenie.
- Przed renderowaniem serwer sprawdza metadane odwzorowania w każdym pliku. Gdyby niespodziewanie się zmieniły, lepiej nie pokazać nic niż opad przesunięty o 30 km w bok.
W efekcie warstwa psuje się łagodnie. Gdy nowe klatki są chwilowo niedostępne, nakładka po prostu przestaje się aktualizować, a mapa stacji, wykresy i alerty działają bez zmian, bo nigdy od niego nie zależały.
Uczciwie o tym, co radar mówi, a czego nie
Radar nie mierzy deszczu. Mierzy, ile wiązki odbiło się z powrotem, a intensywność opadu jest z tego szacowana wzorem empirycznym (używam wzoru Marshalla-Palmera). Taki szacunek dobrze pokazuje, gdzie pada i jak mocno, ale nie zastąpi deszczomierza. Legenda to uwzględnia: podpisy są zaokrąglone do 0,4, 2, 7, 32 i 130 mm/h, zamiast udawać dokładność, której metoda nie daje.
Dwa kolejne ograniczenia warto od razu przedstawić użytkownikom: radar ma około 5-10 minut opóźnienia względem czasu rzeczywistego i pokazuje opad, który już wystąpił, a nie prognozę. Punktem odniesienia pozostają stacje na tej samej mapie - i dlatego weryfikacja odczytów w terenie ma sens nawet wtedy, gdy radar pokazuje opady w całym kraju.
Publiczne dane przestrzenne to jeden z najsłabiej wykorzystanych zasobów w monitoringu środowiska. Ortofotomapa Polski i europejska kompozycja radarowa są już opłacone z podatków i wolno ich używać komercyjnie - inwestycja leży w inżynierii, która dobrze je integruje, a nie w miesięcznej fakturze. Wystarczy zbudować to raz, a platforma zyskuje kontekst, którego użytkownicy inaczej szukaliby w innej karcie - bez abonamentu do odnowienia i bez dostawcy, od którego trzeba być zależnym. Warstwy w działaniu zobaczysz w realizacji Wodowskaz, a więcej o moim podejściu przeczytasz w opisie usługi platformy i dashboardy monitoringu.


