Musterlösung
<- rast("datasets/rauman/wind250m.tif") wind250m
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:
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.
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.
<- rast("datasets/rauman/wind250m.tif") wind250m
tm_shape(wind250m) +
tm_raster(col.scale = tm_scale_continuous())
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.
#### reclassify wind
<- tribble(
wind_klassen ~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
)
<- as.matrix(wind_klassen)
wind_klassen
<- classify(wind250m, wind_klassen) wind_classify
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.
<- rast("datasets/rauman/dhm250m.tif")
dhm250m
<- terrain(dhm250m, v = "slope", unit = "degrees")
neigung
#### reclassify slope
<- tribble(
neigung_klassen ~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
)
<- as.matrix(neigung_klassen)
neigung_klassen
<- classify(neigung, neigung_klassen) neigung_classify
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 |
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.
<- (strassen_classify + schutzgebiete_classify + wind_classify + neigung_classify) / 4
overlay_prelim_3
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)
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.)
<- read_sf(gpkg_path, "Nationale_Schutzgebiete") |> st_transform(2056)
schutzgebiete <- read_sf(gpkg_path, "Bewohnte_Flaeche") |> st_transform(2056)
siedlungsgebiet <- read_sf(gpkg_path, "Waldgebiete") |> st_transform(2056)
wald <- read_sf(gpkg_path, "Seeflaechen") |> st_transform(2056)
seen <- read_sf(gpkg_path, "Untersuchungsgebiet_Schwyz") |> st_transform(2056) kt_schwyz
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.
<- overlay_prelim_3 |>
overlay_prelim_4 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")