Opis skryptu wyliczającego potencjał zagrożeniowy metodą redukcyjną Wernera Muntera

Opracowanie: Przemysław Borys, Politechnika Śląska, Wydział Chemiczny, Gliwice. Pracę wykonaną podczas tworzenia skryptu i studiowania związanych z nim zagadnień teoretycznych dedykuję mojej żonie, Agacie.

  1. Wyniki działania skryptu - warstwa GRM
  2. Graficzna Metoda Redukcyjna: na czym polega?
  3. Wyniki działania skryptu - warstwa PRM
  4. Profesjonalna Metoda Redukcyjna: na czym polega?
  5. Porównanie metod GRM i PRM
  6. Jak blisko możemy zbliżać się do obszarów zagrożonych?
  7. Jak głęboko może zejść lawina?
  8. Co to jest "zbocze" przy 3 stopniu zagrożenia lawinowego?
  9. Sygnały ostrzegawcze w terenie
  10. Drzewa
  11. Kursy turystyki zimowej i lawinowe
  12. Podstawowe procesy przemian śniegu
  13. Treść skryptu obliczającego potencjał GRM
  14. Treść skryptu obliczającego potencjał PRM
  15. Treść skryptu wyznaczającego maksymalne nachylenie zbocza
  16. Literatura

Wyniki działania skryptu - warstwa GRM

Warstwa GRM dokonuje redukcji zagrożenia lawinowego w oparciu o nachylenia zboczy oraz ich wystawy. O założeniach metody można przeczytać w kolejnym rozdziale. Wynikiem działania skryptu jest zabarwienie zboczy zagrożonych lawinowo na dwa kolory: żółty (warunkowo dopuszczalny, gdzie wymagana jest uwaga i umiejętność analizowania terenu) oraz czerwony (niebezpieczny). Zbocza niezagrożone są pozostawione bez żadnego zabarwienia dla zachowania przejrzystości mapy.

Graficzna Metoda Redukcyjna: na czym polega?

Graficzna Metoda Redukcyjna (GRM - Graphical Reduction Method) jest uproszczonym wariantem pełnej Profesjonalnej Metody Redukcyjnej (PRM - Professional Reduction Method - opisywanej dalej). Z uwagi na znaczne skomplikowanie PRM, Munter uprościł ją początkowo do postaci tzw. Elementarnej Metody Redukcyjnej (ERM), w której jedynymi czynnikami branymi pod uwagę w dokonywaniu redukcji potencjału lawinowego były nachylenia stoków. Z czasem Munter wprowadził do ERM zasadę "przesuwania limitów o jeden stopień zagrożenia lawinowego w dół" w sytuacji unikania niekorzystnych wystaw, wspomnianych w komunikacie lawinowym.

To podejście otwarło drogę do narodzin Graficznej Metody Redukcyjnej, gdzie skala zagrożenia względem nachyleń stoków została zobrazowana graficznie w kwadracie, na którego osi poziomej znajduje się poziom zagrożenia lawinowego, a na osi pionowej - zakres dopuszczalnych nachyleń zboczy (wg oficjalnej ulotki - w promieniu 20 metrów od drogi turysty, w praktyce, w niniejszym skrypcie dla 3 stopnia zagrożenia lawinowego przyjmujemy, że stok jest zagrożony jeśli gdziekolwiek na zboczu wystąpi krytyczne nachylenie z uwagi na uwzględnianą w PRM możliwość uruchamiania lawin na odległość).

Na przecięciu segmentów pionowych i poziomych wprowadzono oznaczenie zagrożenia: kolor zielony - bezpiecznie, kolor żółty - podwyższona uwaga, wymaga wiedzy i umiejętności do oceny zagrożenia, kolor czerwony - niebezpiecznie. W Polsce grafika ta została przetłumaczona w Fundacji im. Anny Pasek.

Nachylenie zbocza Stopień zagrożenia lawinowego
1 2 3 4
40-90°
35-40°
30-35°
0-30°

W metodzie tej przy założeniu unikania wystaw i wysokości wskazanych w komunikacie lawinowym, można skorzystać ze wskazań dla stopnia zagrożenia o 1 niższego niż ogłoszony.

Metoda GRM była rekomendowaną metodą oceny ryzyka dla niezaawansowanych podczas komunikacji z komórką Służby Śniegowo-Lawinowej GOPR, natomiast naczelnik TOPR rekomendował jej jeszcze prostszy wariant, ERM (ang. Elementary Reduction Method, nie biorący poprawki na nachylenia zboczy; do dokonania redukcji tą metodą można w Mapie Turystycznej wykorzystać warstwę nachylenia zboczy w połączeniu z powyższą grafiką).

Wyniki działania skryptu - warstwa PRM

Wynik przedstawiony jest w postaci mapy zredukowanego potencjału zagrożenia lawinowego. Wartości niezagrożone lawinowo mają potencjał niższy niż "1". W tej sytuacji przyjmuje się, że ryzyko wypadku jest porównywalne do ryzyka dla wycieczki w warunkach letnich. Należy wziąć poprawkę na niepewność wyniku i unikać wartości bliskich 1. Wynika to ze skokowej skali potencjału zagrożenia lawinowego, zależnego wykładniczo od ogłoszonego poziomu zagrożenia.

potencjał zagrożenia = 2stopień zagrożenia lawinowego

Taka relacja oznacza, w uproszczeniu, że każde podniesienie stopnia zagrożenia lawinowego o "1" zwiększa ryzyko wypadku lawinowego dwukrotnie.

Dla kolejnych stopni potencjał wyniesie:

Stopień zagrożenia lawinowego Wartość potencjału Faktyczny przedział możliwych wartości potencjału
0 1 0…1.5
1 2 1.5…3
2 4 3…6
3 8 6…12
4 16 12…24
5 32 24…∞

W związku z powyższym, skrypt oznacza kolorem również wartości zredukowanego potencjału powyżej 0.71 - co odpowiada granicy bezpieczeństwa dla stopnia zagrożenia lawinowego o połowę wyższego niż ogłoszony (0.71 x 20.5=1)

Warto zauważyć, że najnowsze badania (Schmudlach, 2024) wskazują na jeszcze silniejszy wzrost potencjału zagrożenia lawinowego. Jednakże środki zaradcze skierowane na minimalizowanie ryzyka w metodzie redukcyjnej Muntera okazują się także niedoszacowane co powoduje, że cały system (zbyt małe ryzyko minimalizowane odpowiednio zbyt małymi środkami zaradczymi) wciąż działa poprawnie.

Skrypt nie uwzględnia czynników stopnia 2 (często jeżdżone zbocza) oraz stopnia 3 (mała grupa, odstępy odciążające) zależnych od człowieka. Uwzględnienie tych dodatkowych redukcji pozostawia się profesjonalistom. Dla tych osób mapa potencjału oprócz koloru zielonego (poniżej "1") prezentuje kolory pośrednich potencjałów, które profesjonaliści mogą potencjalnie jeszcze zredukować do bezpiecznej wartości.

Jeśli w komunikacie lawinowym występuje informacja o "mokrym śniegu", wszystkie wystawy są zagrożone (zagrożone wystawy obejmują: "N, NE, E, SE, S, SW, W, NE").

Profesjonalna Metoda Redukcyjna: na czym polega?

Jest to wykorzystanie statystyki do wyboru najbezpieczniejszej trasy w warunkach zimowych. Idea, jaka przyświecała Munterowi sprowadzała się do tego, aby wyeliminować konieczność posiadania zaawansowanej wiedzy o przemianach śniegu i konstrukcji jego kolejnych warstw na rzecz kilku prostych reguł, które stosowane konsekwentnie mogłyby w znaczący sposób ograniczyć liczbę wypadków w górach.

Ze statystyk lawin wynika, że większość lawin schodzi w sektorze północnym N. Np. na rys. 46 ze strony 71 książki Muntera widzimy statystyczny rozkład dla poszczególnych wystaw (lata 1991-1996):

Jest to wynik kwestionowany w najnowszych pracach (szacowane jest, że północne zbocza mają lepszy śnieg i są po prostu częściej wybierane przez narciarzy - Schmudlach, 2024), lecz istnieją podstawy fizyczne, które mogą wpływać na takie zachowanie - w szczególności różnice nasłonecznienia stoku i wynikającego z tego związania z nim głębokich warstw śniegu. Występuje tu zróżnicowanie warstw głębokich i powierzchniowych. Powierzchniowe warstwy śniegu, np. po świeżym opadzie - na stokach nasłonecznionych łatwiej odpadają niż w zacienionych. Jednak po dłuższym okresie rozmarzania zamarzania warstwa, która nie odpadła - stabilizuje się. Wpływ ma na to m.in. zmniejszenie gradientu temperatury od ciepłego podłoża do powierzchni śniegu, co zmniejsza wędrówkę pary i tworzenie szronu wgłębnego (por. Avalanche handbook, s. 231, T. Kurzeder, s. 64, również książka M. Lizucha s.30, s. 34) na rzecz stabilizacji pokrywy przez wolniejszą sublimację pary z małych drobinek śniegu na większe, tworząc powiązane na dużej powierzchni granulki. Niebagatelny wpływ na tę statystykę wydają się też mieć typowe w naszych warunkach geograficznych kierunki wiatru, odpowiedzialnego za tworzenie groźnych depozytów nawianego i słabo związanego z podłożem śniegu.

Zachowanie świeżych warstw śniegu z reguły dobrze wpisuje się w ogłoszony komunikat lawinowy, natomiast trudniej jest kontrolować to, co dzieje się głęboko pod jego powierzchnią. Tu właśnie kluczowe jest skorzystanie ze statystyki.

Ostatecznie przyjmuje się, że ryzyko lawiny w sektorach W-S-E jest znacząco niższe niż w sektorach północnych i np. jeśli zwiększenie stopnia zagrożenia lawinowego o 1 odpowiada ogólnemu zwiększeniu ryzka wypadku o 21 (2x), to wybór zboczy południowych może zniwelować ten efekt do poziomu zagrożenia o 1 niższego. Krótko mówiąc: potencjał lawinowy mówi, że ryzyko wypadku jest 2x wyższe - my szukamy zatem miejsc, które są statystycznie 2x bezpieczniejsze niż zazwyczaj.

UWAGA: W przypadku gdy śnieg jest mokry (nogi się zapadają, pada deszcz), żadna wystawa nie gwarantuje bezpieczeństwa (por. biuletyn). W tej sytuacji osłabiona jest struktura wewnątrz śniegu i występuje zwiększone obciążenie, ułatwiające wyzwolenie lawiny.

Kolejnym (właściwie pierwszorzędnym) czynnikiem wpływającym w znaczny sposób na prawdopodobieństwo wyzwolenia lawiny jest nachylenie zbocza: przy małym nachyleniu zbocza zsuw lawiny nie jest możliwy. Przy ekstremalnie dużym zboczu z kolei nie tworzą się depozyty śniegu (wszystko od razu spada). Zatem istnieją pewne nachylenia, które są szczególnie groźne i unikanie ich poprawia nasze bezpieczeństwo.

UWAGA: Przy poziomie zagrożenia "3", dzień po świeżych opadach śniegu, zbocze 35-40 nie redukuje ryzyka! Trzeba korzystać ze zboczy poniżej 35° (zaimplementowane w skrypcie jako poziom 3.5) (por. Munter, książka, s. 207). Świeży opad wywiera dodatkowy nacisk na zbocza, który może wyzwolić lawinę (lub związać się ze starym śniegiem po pewnym czasie - dlatego w kolejnych dniach ta okoliczność przestaje być niebezpieczna).

Dodatkowo Munter wprowadza też czynniki redukcyjne 3-ciego stopnia.

Te warunki zasadniczo dotyczą narciarzy których nacisk na stok jest znikomy (ew. piechura na rakietach). Należy zachować wielką ostrożność w stosowaniu tych reguł dla zwykłych turystów, ponieważ w terminologii komunikatu lawinowego pojedynczy turysta jest już "dużym obciążeniem dodatkowym" - podobnie jak mała grupa narciarzy, niezachowujących odstępów.

Dodatkowo możliwa jest też redukcja klasy drugiej /2 za poruszanie się "często jeżdżonymi (na nartach) stokami". Chociaż kryterium to ponownie stosuje się w wersji podstawowej do narciarzy, Avalanche Handbook na str. 385 (Slope use) podaje, że stoki "przechodzone" skutkują stworzeniem jeszcze stabilniejszej struktury niż przejeżdżone na nartach, gdyż stopy penetrują głębiej pokrywę śniegu i zgniatają luźne warstwy.

UWAGA: Obliczenia w skrypcie są ograniczone rozdzielczością mapy (40m x 40m). W terenie należy zwrócić uwagę na obecność małych formacji skalnych pokrytych śniegiem o dużym nachyleniu. Mogą wyzwolić lawinę - mały depozyt śniegu może poruszyć kolejne.

W konwekwencji wygenerowany skryptem potencjał może pełnić rolę doradczą, stanowić niejako pierwszy etap metody planowania 3x3 ale ostateczna decyzja o wejściu w teren górski musi być podjęta na miejscu w oparciu o lokalny stan śniegu w górach. Należy zwrócić uwagę na różne sygnały ostrzegawcze, w czym pomóc może np. aplikacja Nivocheck, umożliwiająca weryfikację stopnia zagrożenia lawinowego, a także garść wskazówek odnośnie tego, na co zwracać uwagę w terenie, które prezentujemy niżej.

Autorzy dołożyli wszelkich starań, aby skrypt dostarczał danych jak najbardziej wiarygodnych, ale posługiwanie się nim wymaga pewnej wiedzy i zrozumienia zjawisk lawinowych, a wejście w teren lawinowy zawsze obarczone jest ryzykiem. Ostateczną odpowiedzialność za swoje życie i zdrowie ponosi turysta.

Porównanie metod GRM i PRM

W związku z obawami służb ratowniczych dotyczącymi udostępniania analizy w modelu PRM użytkownikom niedostatecznie przygotowanym teoretycznie, przedstawiamy porównanie zredukowanych potencjałów lawniowych dla sytuacji, w których GRM dopuszcza lub zabrania wycieczki.

Szlak na niekorzystnej wystawie (w ramce wartość zredukowanego potencjału - skrypt podświetla na żółto wartości większe niż "1", a ostrzega o możliwym niedoszacowaniu - kolorem zielonym - dla wartości w przedziale od "0.71" do "1"):

Nachylenie zbocza Stopień zagrożenia lawinowego
1 2 3 4
40-90° 2 4 8 16
35-40° 1 2 4 8
30-35° 0.66 1.33 2.66 5.33
0-30° OK OK OK OK

Korzystna wystawa:

Nachylenie zbocza Stopień zagrożenia lawinowego
2 3
40-90° 1 2
35-40° 0.5 1
30-35° 0.25 0.66
0-30° OK OK

Wynika stąd, że metoda graficzna (przy nieuwzględnianiu dodatkowych czynników ludzkich) może być mniej restrykcyjna niż metoda profesjonalna (która zabroni wyjścia w większy zbiór szlaków nawet jeśli próg ustawimy na "1", a nie na rekomendowane "0.71"). Natomiast PRM umożliwia większą kontrolę nad ryzykiem przy uwzględnieniu czynników dodatkowych, w szczególności w przypadku uprawiania narciarstwa.

Jak blisko możemy zbliżać się do obszarów zagrożonych?

Munter w swojej książce na str. 113 podaje, że przy stopniu zagrożenia "2" musimy brać pod uwagę zagrożenie z obszarów w odległości +/-20 metrów od szlaku. Przy stopniu zagrożenia "3" musimy brać pod uwagę całe zbocze. Takie też ograniczenie przyjęliśmy w skrypcie dla metody GRM.

Jak głęboko może zejść lawina?

Przy stopniu zagrożenia "2" ryzyko zejścia dużych i bardzo dużych lawin jest "mało prawdopodobne". Mniejsze lawiny zatrzymują się maksymalnie na końcu stoku (tam gdzie nachylenie schodzi poniżej 30°). W przypadku stopnia zagrożenia "3", "w pewnych warunkach" mogą zejść duże i bardzo duże lawiny. Duże lawiny mogą wejść w płaski teren na głębokość do 50 metrów, natomiast bardzo duże lawiny mogą nawet dojść do dna doliny!

Co to jest "zbocze" przy 3 stopniu zagrożenia lawinowego?

Pojęcie "zbocza", używane przy analizie terenu przy ogłoszonym 3-cim stopniu zagrożenia lawinowego jest słabym punktem metodologii Muntera, gdyż nie zostało przez niego zdefiniowane. Niedawne badania Schmudlacha (2024) umożliwiły jednak sprecyzowanie tego pojęcia. Po analizie statystycznej lawin historycznych z wykorzystaniem konsultacji z ekspertami okazało się, że oddziaływania przenoszą się na obszarze o powierzchni koła o promieniu 40 metrów, lecz znacznie zdeformowanym wzdłuż zbocza. Zakres przenoszenia oddziaływań odgraniczają lasy i wypukłości terenu, a oddziaływanie z terenem na dół od badanego punktu stanowi do 30% oddziaływania w górę od badanego punktu (obrazowo mówiąc: przyjęto większe ryzyko, że lawina spadnie po naruszeniu jej podparcia, niż że osunie się przy nacisku z góry).

W oparciu o te obserwacje, w niniejszym skrypcie nachylenie zbocza maksymalnego było ustalane następująco:

Sygnały ostrzegawcze w terenie

Wychodząc w teren musimy mieć świadomość, że komunikat lawinowy stanowi jedynie prognozę zagrożenia z dnia poprzedniego. Ta prognoza nie zawsze będzie miała pokrycie w warunkach rzeczywiście zastanych na miejscu. Aby ustrzec się od podejmowania niepotrzebnego ryzyka, konieczna jest umiejętność rozpoznawania zagrożeń w terenie. Do takich można zaliczyć między innymi (por. T. Kurzeder, s. 81)

Drzewa

Por. Munter, s. 20, Kurzeder s. 24, 169, Avalanche Handbook, s. 233. Gęsto (!) rosnące drzewa (500-1000 na hektar tak, że blokują większość widoku nieba) przebijające strukturę śniegu podpierają ten śnieg, zmieniają jego warunki osiadania przez odmienne wystawienie na wiatr i słońce oraz utrudniony bezpośredni opad śniegu na podłoże, i ostatecznie sprawiają, że większe lawiny w górach typu Beskidy występują rzadko. W Tatrach jednak sama obecność gęstego lasu nie gwarantuje bezpieczeństwa. Lawina może zostać uruchomiona w wyższych (bezleśnych) partiach zbocza i uderzyć w las. Często ślady dawnych lawin widoczne są właśnie w drzewostanie, charakterystycznie wyciętym w okolicach żlebów.

Kursy turystyki zimowej i lawinowe

Umiejętność szacowania ryzyka lawinowego "w domu" na podstawie mapy to tylko część ogólnych umiejętności, potrzebnych do bezpiecznego poruszania się w warunkach zimowych. Oprócz tego potrzebne są dalsze umiejętności, które można opanować w ramach kursów turystyki zimowej. Należą do nich między innymi:

Do kolejnych umiejętności, jakie warto posiąść, należy zaliczyć świadomość zmian pogody, które wiążą się ze zwiększeniem ryzyka lawinowego oraz rozpoznawanie sygnałów zagrożenia lawinowego w terenie (nie zawsze kumunikat lawinowy będzie adekwatny!) co najlepiej obejrzeć na przykładach wskazanych przez doświadczonego instruktora. Tu jednak kurs turystyki zimowej może być niewystarczający i warto zainteresować się także dedykowanymi kursami lawinowymi.

Podstawowe procesy przemian śniegu

Podstawowe procesy odpowiedzialne za przemiany śniegu często zależą od różnicy temperatur, która oddziałuje na śnieg. Można o nich poczytać np. w książce M. Lizucha lub T. Kurzedera. Na przykład przy dużym mrozie, gdy śnieg opada na podłoże o temperaturze bliskiej 0°, w głębi śniegu będzie zachodziła sublimacja (przemiana lodu w parę). Taka para unosi się w górę, gdzie zaczyna spadać temepratura i woda wytrąca się z powietrza, tworząc szron wgłębny - silną warstwę poślizgową, odpowiedzialną za wiele lawin. Ten efekt nosi nazwę przemiany budującej

Przy mniejszych różnicach temperatur między powierzchnią i podłożem, proces przebiega bardziej powolnie i zachodzi głównie rozpad małych ziaren śniegu na rzecz budowy ziaren większych (sublimacja małego ziarna może doprowadzić do jego zniknięcia, a resublimacja w ziarnie dużym powoduje zmianę jego kształtu ze śnieżynki w granulkę). Takie przemiany noszą nazwy przemiany redukcyjnej i stabilizują pokrywę śnieżną ponieważ granulki - w odróżnieniu od początkowych śnieżynek - zaczynają silnie przylegać do siebie. Jest to główny proces odpowiedzialny za stabilizację pokrywy śniegowej w miarę upływu czasu. Następuje on szybko przy niskich mrozach, wolniej przy dużych, kiedy sublimacja jest słabsza

Kolejnym procesem - szczególnie oddziałującym przy powierzchni - jest topnienie i ponowne zamarzanie pokrywy śnieżnej. Topnienie powoduje pojawienie się wody, która niszczy strukturę śniegu, natomiast zamarzanie powoduje powstawanie silnych mostków lodowych pomiędzy istniejącymi ziarnami śniegu. Proces ten zmierza do firnizacji śniegu. W okresach, gdy zachodzą podobne zjawiska (wiosna) dobrym pomysłem jest planowanie wędrówek w okresie zamrożenia struktury śniegu i unikania ich w okresach topnienia.

Bardzo ważnym zjawiskiem, wpływającym na powstawanie lawin, jest działalność wiatru. Wiatr porywa śnieg ze strony nawietrznej zbocza i odkłada duże depozyty po stronie zawietrznej. Nie tylko nawisy, ale również bardziej równomierne depozyty na większej długości zbocza. Następuje to w dość krótkim okresie czasu i takie nawiane warstwy są słabo związane z warstwami starego związanego śniegu poniżej (lub co gorsza, spadają na jakąś warstwę poślizgową, jak szron powierzchniowy czy krupy). Te masy śniegu mogą łatwo zsunąć się w dół i stanowią bezpośrednie zagrożenie lawinowe.

Jak widać, procesy omówione wyżej są skomplikowane i poprawna interpretacja omówionych przemian wymaga wiele wiedzy i doświadczenia.

Treść skryptu obliczającego potencjał - GRM

gdal_calc.py \
-A $TMP_DIR/SRTM1_Poland_slope.tiff Raster A: nachylenie zbocza w stopniach\
-B $TMP_DIR/plLEVEL.tiff Raster B: Poziom zagrożenia lawinowego w badanym punkcie\
-C $TMP_DIR/slope3.tiff Raster C: nachylenie maksymalne na danym zboczu\
-D $TMP_DIR/plASPECT.tiff Raster D: suma niekorzystnych wystaw\
 N=1, NE=2, E=4, SE=8, S=16, SW=32, W=64, NW=128 
-E $TMP_DIR/SRTM1_Poland_aspectsectors.tiff Raster E: Wystawa w adanym punkcie\
--outfile=$TMP_DIR/SRTM1_Poland_GRM.tiff \
--type=Float32 \
--NoDataValue=0 \
--calc='\
1.0*(B>=1)*(B<2)*(A>40)\
\
+1.0*(B>=2)*(B<3)*(A>40)*(numpy.bitwise_and(D,E)==0)\
\
+1.0*(B>=2)*(B<3)*(A>35)*(A<=40)*(numpy.bitwise_and(D,E)!=0)\
+2.0*(B>=2)*(B<3)*(A>40)*(numpy.bitwise_and(D,E)!=0)\
+1.0*(B>=3)*(B<4)*(C>35)*(C<=40)*(numpy.bitwise_and(D,E)==0)\
+2.0*(B>=3)*(B<4)*(C>40)*(numpy.bitwise_and(D,E)==0)\
\
+1.0*(B>=3)*(B<4)*(C>30)*(C<=35)*(numpy.bitwise_and(D,E)!=0)\
+2.0*(B>=3)*(B<4)*(C>35)*(numpy.bitwise_and(D,E)!=0)\
\
+2.0*(B>=4)*(B<5)*(A>30)\
+1.0*(B>=4)*(B<5)*(A<=30)\
\
+2.0*(B>=5)'

Treść skryptu obliczającego potencjał - PRM

gdal_calc.py \
-A $TMP_DIR/SRTM1_Poland_slope.tiff \ raster A zawiera nachylenie zbocza w stopniach
-B $TMP_DIR/SRTM1_Poland_aspectsectors.tiff \ raster B to sektory geograficzne świata:
                                                        1=N, 2=NE, 4=E, 8=SE, 16=S, 32=SW, 64=W, 128=NW
-C $TMP_DIR/plLEVEL.tiff \  raster C zawiera poziom zagrożenia lawinowego
-D $TMP_DIR/plASPECT.tiff \ raster D zawiera sumę sektorów zagrożonych wystaw
-E $TMP_DIR/slope3.tiff \   raster E duplikuje maksymalne nachylenie w obrębie całego zbocza
--outfile=$TMP_DIR/SRTM1_Poland_potencjal.tiff \
--type=Float32 \
--NoDataValue=0 \
--calc='\
1.0*(C>0)*(C<3)*(\ Metoda Muntera działa dla poziomu zagrożenia lawinowego <=3
(A<=30)*0.5\          Teren płaski, niezagrożony
Poniżej obliczenia dla nachylenia 30..34°. Dalsze bloki dla stromych zboczy analogiczne
+1.0*(A>30)*(A<34)*(D>0)*(numpy.bitwise_and(B,D)==0)*(2.00**C)/4/4\
Jeśli zbocze 30<A<34, to redukcja za zbocze /4 oraz jeśli TOPR podał wystawę (D>0), i jej unikamy (B&D=0),
to redukcja /4 za wystawę
+1.0*(A>30)*(A<34)*(D>0)*(numpy.bitwise_and(B,D)!=0)*(2.00**C)/4\
Jeśli zbocze 30<A<34, to redukcja za zbocze /4 oraz jeśli TOPR podał wystawę (D>0), i jej nie unikamy
(B&D>0), to bez redukcji za wystawę
+1.0*(A>30)*(A<34)*(D==0)*((B==4)+(B==64))*(2.00**C)/4/2\
Jeśli zbocze 30<A<34, to redukcja za zbocze /4 oraz jeśli jesteśmy na wystawie E lub W, redukcja /2 za
wystawę
+1.0*(A>30)*(A<34)*(D==0)*(B>4)*(B<64)*(2.00**C)/4/3\
Jeśli zbocze 30<A<34, to redukcja za zbocze /4 oraz jeśli jesteśmy na wystawie SE, S lub SW, redukcja /3
za wystawę
+1.0*(A>30)*(A<34)*(D==0)*((B<4)+(B>64))*(2.00**C)/4\
Jeśli zbocze 30<A<34, to redukcja za zbocze /4 oraz jeśli jesteśmy na NW, N lub NE to brak redukcji za
wystawę
\
+1.0*(A>34)*(A<=35)*(D>0)*(numpy.bitwise_and(B,D)==0)*(2.00**C)/3/4\
+1.0*(A>34)*(A<=35)*(D>0)*(numpy.bitwise_and(B,D)!=0)*(2.00**C)/3\
+1.0*(A>34)*(A<=35)*(D==0)*((B==4)+(B==64))*(2.00**C)/3/2\
+1.0*(A>34)*(A<=35)*(D==0)*(B>4)*(B<64)*(2.00**C)/3/3\
+1.0*(A>34)*(A<=35)*(D==0)*((B<4)+(B>64))*(2.00**C)/3\
\
+1.0*(A>35)*(A<=40)*(C<=3)*(D>0)*(numpy.bitwise_and(B,D)==0)*(2.00**C)/2/4\
+1.0*(A>35)*(A<=40)*(C<=3)*(D>0)*(numpy.bitwise_and(B,D)!=0)*(2.00**C)/2\
+1.0*(A>35)*(A<=40)*(C<=3)*(D==0)*((B==4)+(B==64))*(2.00**C)/2/2\
+1.0*(A>35)*(A<=40)*(C<=3)*(D==0)*(B>4)*(B<64)*(2.00**C)/2/3\
+1.0*(A>35)*(A<=40)*(C<=3)*(D==0)*((B<4)+(B>64))*(2.00**C)/2\
+1.0*(A>35)*(A<=40)*(C>3)*(2.00**C)\
\
+1.0*(A>40)*(C<3)*(D>0)*(numpy.bitwise_and(B,D)==0)*(2.00**C)/4\
+1.0*(A>40)*(C<3)*(D>0)*(numpy.bitwise_and(B,D)!=0)*(2.00**C)\
+1.0*(A>40)*(C<3)*(D==0)*((B==4)+(B==64))*(2.00**C)/2\
+1.0*(A>40)*(C<3)*(D==0)*(B>4)*(B<64)*(2.00**C)/3\
+1.0*(A>40)*(C<3)*(D==0)*((B<4)+(B>64))*(2.00**C)\
+1.0*(A>40)*(C>=3)*(2.00**C)\
)+\
1.0*(C>=3)*(C<=3.5)*(\ Od poziomu 3 zagrożenia zamiast rastra A - raster E
(E<=30)*0.5\
+1.0*(E>30)*(E<34)*(D>0)*(numpy.bitwise_and(B,D)==0)*(2.00**C)/4/4\
+1.0*(E>30)*(E<34)*(D>0)*(numpy.bitwise_and(B,D)!=0)*(2.00**C)/4\
+1.0*(E>30)*(E<34)*(D==0)*((B==4)+(B==64))*(2.00**C)/4/2\
+1.0*(E>30)*(E<34)*(D==0)*(B>4)*(B<64)*(2.00**C)/4/3\
+1.0*(E>30)*(E<34)*(D==0)*((B<4)+(B>64))*(2.00**C)/4\
\
+1.0*(E>34)*(E<=35)*(D>0)*(numpy.bitwise_and(B,D)==0)*(2.00**C)/3/4\
+1.0*(E>34)*(E<=35)*(D>0)*(numpy.bitwise_and(B,D)!=0)*(2.00**C)/3\
+1.0*(E>34)*(E<=35)*(D==0)*((B==4)+(B==64))*(2.00**C)/3/2\
+1.0*(E>34)*(E<=35)*(D==0)*(B>4)*(B<64)*(2.00**C)/3/3\
+1.0*(E>34)*(E<=35)*(D==0)*((B<4)+(B>64))*(2.00**C)/3\
\
+1.0*(E>35)*(E<=40)*(C<=3)*(D>0)*(numpy.bitwise_and(B,D)==0)*(2.00**C)/2/4\
+1.0*(E>35)*(E<=40)*(C<=3)*(D>0)*(numpy.bitwise_and(B,D)!=0)*(2.00**C)/2\
+1.0*(E>35)*(E<=40)*(C<=3)*(D==0)*((B==4)+(B==64))*(2.00**C)/2/2\
+1.0*(E>35)*(E<=40)*(C<=3)*(D==0)*(B>4)*(B<64)*(2.00**C)/2/3\
+1.0*(E>35)*(E<=40)*(C<=3)*(D==0)*((B<4)+(B>64))*(2.00**C)/2\
+1.0*(E>35)*(E<=40)*(C>3)*(2.00**C)\
\
+1.0*(E>40)*(C<3)*(D>0)*(numpy.bitwise_and(B,D)==0)*(2.00**C)/4\
+1.0*(E>40)*(C<3)*(D>0)*(numpy.bitwise_and(B,D)!=0)*(2.00**C)\
+1.0*(E>40)*(C<3)*(D==0)*((B==4)+(B==64))*(2.00**C)/2\
+1.0*(E>40)*(C<3)*(D==0)*(B>4)*(B<64)*(2.00**C)/3\
+1.0*(E>40)*(C<3)*(D==0)*((B<4)+(B>64))*(2.00**C)\
+1.0*(E>40)*(C>=3)*(2.00**C)\
)+\
1.0*(C==4)*(\
(A>30)*(2.00**C)\
+(A<=30)*(2**3)\
)\
+1.0*(C>4)*(2.00**C)'

Treść skryptu wyznaczającego maksymalne nachylenie zbocza


#!/usr/bin/python3
from osgeo import gdal
import numpy as np
import math
import random
print("Opening slope")
slope=gdal.Open("munter-tmp/SRTM1_Poland_slope.tiff")
gt=slope.GetGeoTransform()
proj=slope.GetProjection()
rows=slope.RasterYSize
cols=slope.RasterXSize
delta_aspect = 30
delta_aspect_cache = 10
print("Opening elevation")
height=gdal.Open("munter-tmp/SRTM1_Poland_3857.tiff")
print("Opening aspect")
aspect=gdal.Open("munter-tmp/SRTM1_Poland_aspect.tiff")
print("Opening forests")
forest=gdal.Open("munter-tmp/SRTM1_Poland_forests.tiff")
print("Obtaining slope array")
slopeband=slope.GetRasterBand(1)
slopearray=slopeband.ReadAsArray()
print("Obtaining elevation array")
heightband=height.GetRasterBand(1)
heightarray=heightband.ReadAsArray()
print("Obtaining aspect array")
aspectband=aspect.GetRasterBand(1)
aspectarray=aspectband.ReadAsArray()
print("Obtaining forest array")
forestband=forest.GetRasterBand(1)
forestarray=forestband.ReadAsArray()

outslope=np.zeros(shape=(rows,cols))
outval = 0

#... obliczenia
for y in range(200,rows-200):
  print(y,"/",rows-200)
  for x in range(200,cols-200):
    if slopearray[y,x] > 30 and forestarray[y,x] !=0:	#nachylenie w tym puncie ma znaczenie lawinowe i nie jest jeszcze oznaczone w outslope (wartość dodatnia)
      if slopearray[y,x]<=34:    #będę wpisywać dla zbocza maksymalne wartości nachylenia wybranej klasy (0,34,35,40,90)
        outval=34                #to przyspieszy obliczenia eliminując wielokrotne nadpisywanie po analizie sąsiednich pikseli
      elif slopearray[y,x]<=35:  #które np. mogłyby mieć nieco wyższe nachylenie, ale wciąż w tej samej klasie, a to podział na
        outval=35                #klasy tu ma znaczenie.
      elif slopearray[y,x]<40:
        outval=40                #!w razie potrzeby można to wyeliminować, dając outval=slopearray[y,x]!
      else:
        outval=90
        ################################### poszukiwanie makroskopowej wystawy - najkrótszej drogi do grani/szczytu, a stąd
        ################################### odległość maxrup do szczytu i kierunek maxalfa
      maxgrad=0				#tu będzie maksymalny gradient, jaki z tego punktu wiedzie do grani/szczytu
      maxalfa=0				#tu będzie kąt pod jakim idzie ten gradient
      rbottom=0
      tolerancja=10
      # chce dostac rbottom, maxalfa pokazujace na szczyt. W tym celu zjezdzam z badanego punktu wzdluz gradientu do doliny/granicy lasu aby
      # poznac "makroskopowy" kierunke wystawy (nawet zjazd z turniczki polnocnym zboczem do poludniowej doliny bedzie mial makro wystawe poludniowa
      # liczac w ten sposob!)
      handicap=tolerancja		#tyle pikseli moge przebiec "sila rozpedu" - przez las lub po plaskim
      timesliding = 0			#czas slizgania sie po gradiencie. Jesli zbyt duzy, to gdzies utknal i trzeba zaburzyc trajektorie, np. losowo
      xp=1.0*x
      yp=1.0*y
      while handicap > 0:
        dx=xp-int(xp)
        dy=yp-int(yp)
        avgaspect=((1.0 - dx)*(1.0 - dy)*aspectarray[int(yp),int(xp)]	# aktualne położenie może być ułamkowe: wystawę liczę interpolując
                  +dx*(1.0-dy)*aspectarray[int(yp),int(xp)+1]		# po sąsiednich pikselach
                  +dx*dy*aspectarray[int(yp)+1,int(xp)+1]
                  +(1.0-dx)*dy*aspectarray[int(yp)+1,int(xp)])
        yp = yp - 0.25*math.cos(math.pi*avgaspect/180)			#liczę przemieszczenie o "1" w kierunku wystawy (alfa mierzona od N, kąt 0 wskazuje
        xp = xp + 0.25*math.sin(math.pi*avgaspect/180)			#na oś -y (nie +y)!
        timesliding = timesliding + 1
        if timesliding % 1000 == 0:	#slizgamy sie juz 1000 iteracji (odleglosc 1000*0.25*40=10000m) - chyba utknelismy
          print("stucked: imposing random perturbation")
          rnd=random.random()		#dodajemy male zaburzenie do pozycji y (amplituda +/-1)
          if rnd < 1.0/3:
            yp=yp-1
          elif rnd > 2.0/3:
            yp=yp+1
          rnd=random.random()		#oraz male zaburzenie do pozycji x (amplituda +/-1)
          if rnd < 1.0/3:
            xp=xp-1
          elif rnd > 2.0/3:
            xp=xp+1
            #krok 0.25 aby uniknąć oscylacji między zboczami przy gwałtownym zbieganiu gradientem!
        if (abs(slopearray[int(yp),int(xp)]) > 30
            and forestarray[int(yp),int(xp)] != 0):
          handicap = tolerancja					#odnawiam kredyt zaufania
          dx=x-xp						#dx w kierunku "pod gorke"
          dy=y-yp						#dy w kierunku "pod gorke"
          dy=-dy						#aspect liczony jest wzgledem -y!
          rbottom = math.sqrt(dx*dx+dy*dy)
          if abs(dy) > 0:
            maxalfa = math.atan(abs(dx/dy))*180/math.pi
          else:
            maxalfa = 90
          if dx > 0 and dy < 0: 		# 2 cwiartka (zgod. wsk zeg), +90o
            maxalfa = maxalfa + 90
          elif dx < 0 and dy < 0:		# 3 cwiartka +180o
            maxalfa = maxalfa + 180
          elif dx < 0 and dy > 0:		# 4 cwiartka +270o
            maxalfa = maxalfa + 270
        else:
          handicap = handicap - 1
      aspectalfa=maxalfa-180
      if aspectalfa < 0:
        aspectalfa = aspectalfa + 360
     ########################################### Ograniczenie oddziaływania "gorącego punktu" w górę. W SLABS przy wyliczaniu punktu zagrożenia
      ########################################### W PUNKCIE bierze się pod uwagę obszar rozszerzony mocno do góry (r1) i nieznacznie w dół (r2). Co
      ########################################### oznacza, że naprężenia  na odległość łatwiej spowodują lawinę ponad nami, niż obsuw poniżej.
      ########################################### W niniejszym skrypcie PATRZYMY ODWROTNIE: nie analizujemy zagrożenia z pozycji turysty, ale
      ########################################### z perspektywy groźnych form terenowych patrzymy na jaką odległość mogą sprawiać zagrożenie. A więc
      ########################################### tu odwrotnie: w dół większy zasięg niż w górę - łatwiej uruchomić lawinę zabierając masom śniegu
      ########################################### punkt podparcia niż obciążając od góry.

      maxrup=rbottom*0.3			# r2=0.1*r1 dla wąskich zboczy i r2=0.3*r1 dla szerokich
      tolerancja=0.1*(maxrup+rbottom)
     ########################################### jeśli w zakresie maxrup pod koniec są obszary o złej wystawie/nachyleniu (np. wypłaszczony grzbiet), to
      ########################################### odcinamy je z pola zainteresowania
      for r in range(int(maxrup)+1):			# skanujemy do gory z tolerancją czy jest dobre nachylenie zbocza
        handicap=tolerancja
        xp=x+r*math.sin(math.pi*maxalfa/180)
        yp=y-r*math.cos(math.pi*maxalfa/180)
        if ((abs(aspectarray[int(yp),int(xp)]-aspectalfa) < delta_aspect 
             or abs(aspectarray[int(yp),int(xp)]-aspectalfa-360) < delta_aspect) 
            and abs(slopearray[int(yp),int(xp)]) >= 20 
            and forestarray[int(yp),int(xp)] != 0):
          handicap=tolerancja
        else:
          handicap=handicap-1
        if handicap == 0:
          break
      maxrup=maxrup - (tolerancja - handicap)   # zmniejszam maksymalny promien o obszar, ktorego nie pokryla tolerancja
      ########################################### przebiegamy po wszystkich r i skanujemy na boki jak daleko siega dobra wystawa
      for r in range(-int(rbottom),int(maxrup)+1,1):	#będziemy teraz kolorować każdą "poziomicę" prostopadłą do tej linii
        handicap=tolerancja			#skanuje w prawo
        xp=x
        yp=y 
        w=0
        while handicap > 0:
          xp=x+r*math.sin(math.pi*maxalfa/180)+w*math.sin(math.pi*(maxalfa+90)/180)	#prostopadle jade wg wg kata+90 stopni, moze
          yp=y-r*math.cos(math.pi*maxalfa/180)-w*math.cos(math.pi*(maxalfa+90)/180)	#byc ponad 360, dla sin/cos bez znaczenia
          if ((w==0 and slopearray[int(yp),int(xp)] > 0 and slopearray[int(yp),int(xp)] <= outval) 
              or (abs(aspectarray[int(yp),int(xp)]-aspectalfa) < delta_aspect_cache) 
              or (abs(aspectarray[int(yp),int(xp)]-aspectalfa-360) < delta_aspect_cache)):			#przyspieszenie obliczen: pixele wzdluz gradientu beda
            slopearray[int(yp),int(xp)] = -slopearray[int(yp),int(xp)]	# znak "-" oznacza, że punkty nalezaly do tej samej wystawy i nie trzeba ich z osobna liczyc
          if ((abs(aspectarray[int(yp),int(xp)]-aspectalfa) < delta_aspect 
               or abs(aspectarray[int(yp),int(xp)]-aspectalfa-360) < delta_aspect) 
              and abs(slopearray[int(yp),int(xp)]) >= 20 
              and forestarray[int(yp),int(xp)] != 0):
            handicap = tolerancja
          else:
            handicap = handicap - 1
          w=w+1
        w = w - (tolerancja - handicap)			# odcinam z kolorowanego regionu końcowy ogon o zlej wystawie
        while w >= 0:					# kolorujemy wykryty obszar
          xp=x+r*math.sin(math.pi*maxalfa/180)+w*math.sin(math.pi*(maxalfa+90)/180)	#prostopadle jade wg wg kata+90 stopni, moze
          yp=y-r*math.cos(math.pi*maxalfa/180)-w*math.cos(math.pi*(maxalfa+90)/180)	#byc ponad 360, dla sin/cos bez znaczenia
          if outslope[int(yp),int(xp)] < outval:	# jesli nadpisujemy, to tylko mniejszy kat
            outslope[int(yp),int(xp)] = outval
          w=w-1
          ################################################# to samo dla obszaru na lewo od promienia
        handicap=tolerancja
        xp=x
        yp=y 
        w=0
        while handicap > 0:
          xp=x+r*math.sin(math.pi*maxalfa/180)-w*math.sin(math.pi*(maxalfa+90)/180)	#prostopadle jade wg wg kata+90 stopni, moze
          yp=y-r*math.cos(math.pi*maxalfa/180)+w*math.cos(math.pi*(maxalfa+90)/180)	#byc ponad 360, dla sin/cos bez znaczenia
          if ((w==0 and slopearray[int(yp),int(xp)] > 0 and slopearray[int(yp),int(xp)] <= outval) 
              or (abs(aspectarray[int(yp),int(xp)]-aspectalfa) < delta_aspect_cache) 
              or (abs(aspectarray[int(yp),int(xp)]-aspectalfa-360) < delta_aspect_cache)):		#przyspieszenie obliczen: pixele wzdluz gradientu beda
            slopearray[int(yp),int(xp)] = -slopearray[int(yp),int(xp)]	# znak "-" oznacza, że punkty nalezaly do tej samej wystawy i nie trzeba ich z osobna liczyc
          if ((abs(aspectarray[int(yp),int(xp)]-aspectalfa) < delta_aspect 
               or abs(aspectarray[int(yp),int(xp)]-aspectalfa-360) < delta_aspect) 
              and abs(slopearray[int(yp),int(xp)]) >= 20 
              and forestarray[int(yp),int(xp)] != 0):
            handicap=tolerancja
          else:
            handicap=handicap-1
          w=w+1
        w = w - (tolerancja-handicap)			# odcinam z kolorowanego regionu końcowy ogon o złej wystawie
        while w >= 0:					# kolorujemy wykryty obszar
          xp=x+r*math.sin(math.pi*maxalfa/180)-w*math.sin(math.pi*(maxalfa+90)/180)	#prostopadle jade wg wg kata+90 stopni, moze
          yp=y-r*math.cos(math.pi*maxalfa/180)+w*math.cos(math.pi*(maxalfa+90)/180)	#byc ponad 360, dla sin/cos bez znaczenia
          if outslope[int(yp),int(xp)] < outval:	# jesli nadpisujemy, to tylko mniejszy kat
            outslope[int(yp),int(xp)] = outval
          w=w-1
    elif slopearray[y,x] > 30:	#ale jest las
      outslope[y,x] = slopearray[y,x]
      slopearray[y,x] = -slopearray[y,x]
print("Writing to disc")
driver=gdal.GetDriverByName("GTiff")
driver.Register()

outds=driver.CreateCopy("slope3.tiff",slope,strict=0)
outband=outds.GetRasterBand(1)
outband.WriteArray(outslope,0,0)
outds=None	#flush out

Literatura

  1. Książka: W. Munter, 3x3 Lawinen: Risikomanagement im Wintersport. Tapperiner Verlag. Wyd. 6, 2017.
  2. Broszura: 3x3 Avalanche Assessment Process & Reduction Method, Werner Münter Institut für Schnee und Lawinenforschung, Davos, Switzerland, 2023.
  3. Broszura: Uwaga lawiny! - polskie tłumaczenie broszuty SLF, fundacja im. Anny Pasek, 2022.
  4. Broszura: Typical avalanche problems. European Avalanche Warning Services, Davos, 2022.
  5. Książka: M. Lizuch, Lawinowe ABS, Fenis 2011.
  6. Książka: T. Kurzeder, H. Feist, Lawiny. Poradnik dla narciarzy i turystów, wyd. TPN, 2013.
  7. Książka: D. McClung, P. Schaerer, Avalanche Handbook, Mountaineers Books, 2022.
  8. Broszura: J. Mierzejewski, Formuła 3x3 i Metoda redukcyjna według Wernera Muntera, Materiały do użytku wewnętrznego PZA, 2005.
  9. Broszura: J. Schweizer, Avalanche Bulletin Interpretation Guide, WSL Institute for snow and avalanche research SLF, Davos 2024.
  10. Artykuł: G. Schmudlach, SLABS: An improved probabilistic method to assess the avalanche risk on backcountry ski tours Cold Regions Science and Technology 221, 2024.
  11. Artykuł: G. Schmudlach et al., How do experts interpret avalanche terrain from map? ISSW Proceedings, 2018.
  12. Artykuł: G. Schmudlach, J. Kohler, Automated avalanche risk rating of backcountry ski routes, ISSW Proceedings, 2016.
  13. Artykuł: G. Schmudlach, J. Kohler, Method for automated avalanche terrain classification, ISSW Proceedings, 2016.