In der letzten Übung (Übung A) haben wir die potentielle Standorte für Windkraftanlagen hinsichtlich zweier Distanzkriterien bewertet. In dieser Übung (Übung B) schliessen wir die Multikriterien-Evaluation ab, indem wir:

  1. folgende Kriterien mitberücksichtigen: Windgeschwindigkeit und Hangneigung
  2. die Ausschlusskriterien vom Resultat ausschliessen

Für Punkt 1 müssen wir zusätzliche Daten einlesen, die im Rasterformat daherkommen. Punkt 2 beruht im Wesentlichen auf Daten, die wir bereits verwendet haben.

Aufgabe 1: Rasterdaten einlesen

Zur Bewertung der Standorte hinsichtlich Windgeschwindigkeit steht uns der Datensatz wind250m.tif zur Verfügung (siehe Tabelle 41.1). Lade den Datensatz mit der Funktion rast() in R ein. Exploriere den Datensatz visuell und versuche ein Verständnis für die Datensätze zu bekommen.

Musterlösung
wind250m <- rast("datasets/rauman/wind250m.tif")
Musterlösung
tm_shape(wind250m) +
  tm_raster(col.scale = tm_scale_continuous())

Datensatz ‘wind250m’ zur Windgeschwindigkeit in m pro Sekunde

Aufgabe 2: Wind bewerten

Diese Rasterdaten müssen wir nicht weiter verarbeiten, wir können sie direkt bewerten. Führe diese Bewertung aufgrund nachstehender Tabelle durch. Nutze dafür die Funktion classify() analog Aufgabe 3: Distanzkriterien bewerten. Ihr könnt die Schwellenwerte frei wählen, wir werden diejenigen verwenden, die in Tabelle 42.1 festgehalten sind.

Musterlösung
#### reclassify wind
wind_klassen <- tribble(
  ~von, ~bis, ~zu,
  0, 20, 0.0,
  20, 30, 0.2,
  30, 40, 0.4,
  40, 50, 0.6,
  50, 60, 0.8,
  60, Inf, 1.0
)

wind_klassen <- as.matrix(wind_klassen)

wind_classify <- classify(wind250m, wind_klassen)

Aufgabe 3: Slope berechnen und bewerten

Für die Berechnung und anschliessende Bewertung der Hangneigung brauchen wir ein Höhenmodell. Lade das Höhenmodell dhm250m.tif herunter (siehe Tabelle 41.1) und in R ein. Berechne anschliessend die Hangneigung mit der Funktion terrain() analog Aufgabe 2 (beachte die Einheit des Output!).

Bewerte die Hangneigung danach gemäss Tabelle Tabelle 42.1.

Musterlösung
dhm250m <- rast("datasets/rauman/dhm250m.tif")

neigung <- terrain(dhm250m, v = "slope", unit = "degrees")

#### reclassify slope
neigung_klassen <- tribble(
  ~von, ~bis, ~zu,
  0, 4, 1.0,
  4, 8, 0.8,
  8, 12, 0.6,
  12, 16, 0.4,
  16, 20, 0.2,
  20, 90, 0.0
)

neigung_klassen <- as.matrix(neigung_klassen)

neigung_classify <- classify(neigung, neigung_klassen)
Tabelle 42.1: Bewertungstabelle die Windgeschwindigkeit (m/s) und Hangneigung (Grad)
Windgeschwindigkeit
Hangneigung
von bis zu von bis zu
0 20 0.0 0 4 1.0
20 30 0.2 4 8 0.8
30 40 0.4 8 12 0.6
40 50 0.6 12 16 0.4
50 60 0.8 16 20 0.2
60 Inf 1.0 20 90 0.0

Aufgabe 4: Raster Overlay

Analog Aufgabe 4: Raster Overlay können wir an dieser Stelle eine vorläufige Beurteilung der Gebiete durchführen. Berechne dafür ein (gewichtetes) Mittel der Kriterien strassen_classify, schutzgebiete_classify, wind_classify und neigung_classify. Du kannst die Gewichte wieder so anpassen, wie du für sinnvoll hälst.

Musterlösung
overlay_prelim_3 <- (strassen_classify + schutzgebiete_classify + wind_classify + neigung_classify) / 4

tm_shape(overlay_prelim_3) +
  tm_raster(col.scale = tm_scale_continuous(ticks = seq(0, 1, 0.2), values = "brewer.spectral")) +
  tm_layout(frame = FALSE)
Abbildung 42.1: Ungewichtetes Überlagern aller Kriterien mit Ausnahme der Ausschlussgebiete

Aufgabe 5: Ausschlusskriterien

Als Auschlussgebiete gelten Flächen, wo keine Windkraftanlagen gebaut werden können. Dazu gehören bewohnte Flächen, nationale Schutzgebiete, Waldgebiete und Seen. (Zwar werden Schutzgebiete in unserer Analyse bereits berücksichtigt, aber nicht kategorisch vom Resultat ausgeschlossen.)

Musterlösung
schutzgebiete <- read_sf(gpkg_path, "Nationale_Schutzgebiete") |> st_transform(2056)
siedlungsgebiet <- read_sf(gpkg_path, "Bewohnte_Flaeche") |> st_transform(2056)
wald <- read_sf(gpkg_path, "Waldgebiete") |> st_transform(2056)
seen <- read_sf(gpkg_path, "Seeflaechen") |> st_transform(2056)
kt_schwyz <- read_sf(gpkg_path, "Untersuchungsgebiet_Schwyz") |> st_transform(2056)

Um diese Flächen aus unserem Resultat auzuschliessen, können wir wieder die Funktion mask() verwenden (siehe Aufgabe 5: Mask Raster). Doch diesmal möchten wir nicht die Flächen ausserhalb der Polygone mit NA ersetzen, sondern die Flächen innerhalb der Polygone. Deshalb verwenden wir mask() mit dem Argument inverse = TRUE.

Versuche mit mask(), den oben erwähnten Vektordatensätze sowie der Option inverse = TRUE die Ausschlussgebiete vom Raster-Overlay zu entfernen und visualisiere das Resultat.

Musterlösung
overlay_prelim_4 <- overlay_prelim_3 |>
  mask(schutzgebiete, inverse = TRUE) |>
  mask(siedlungsgebiet, inverse = TRUE) |>
  mask(wald, inverse = TRUE) |>
  mask(seen, inverse = TRUE) |>
  mask(kt_schwyz)

tmap_mode("view")

tm_shape(overlay_prelim_4) +
  tm_raster(col.scale = tm_scale_continuous(ticks = seq(0, 1, 0.2), values = "brewer.spectral")) +
  tm_basemap("Esri.WorldImagery")