Code
wind250m <- rast("datasets/rauman/wind250m.tif")In der letzten Übung (Übung A) haben wir die potentielle Standorte für Windkraftanalgen hinsichtlich zweier Distanzkriterien bewertet. In dieser Übung (Übung B) schliessen wir die Multikriterien-Evaluation ab, in dem 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 63.1). Lade den Datensatz mit der Funktion rast() in R ein. Explorieren Sie den Datensatz visuell und versuchen Sie ein Verständnis für die Datensätze zu bekommen.
wind250m <- rast("datasets/rauman/wind250m.tif")tm_shape(wind250m) +
tm_raster(style = "cont")
Diese Rasterdaten müssen wir nicht weiter verarbeiten, wir können sie direkt bewerten. Führen Sie diese Bewertung aufgrund nachstehender Tabelle durch. Nutzen Sie dafür die Funktion classify() analog Kapitel 63.3. Sie können die Schwellwerte frei wählen, wir werden diejenigen verwenden, die in Tabelle 64.1 festgehalten sind.
#### 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)Für die Berechnung und anschliessende Bewertung der Hangneigung brauchen wir ein Höhenmodell. Lade das Höhenmodell dhm250m.tif herunter (siehe Tabelle 63.1) und in R ein. Berechne anschliessend die Hangneigung mit der Funktion terrain() analog Kapitel 58.2 (beachten Sie die Einheit des Output!).
Bewerten Sie die Hangneigung danach gemäss Tabelle Tabelle 64.1.
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)
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 Kapitel 63.4 können wir an dieser Stelle eine vorläufige Beurteilung der Gebiete durchführen. Du kannst die Gewichte wieder so anpassen wie du willst.
overlay_prelim_3 <- (strassen_classify + schutzgebiete_classify + wind_classify + neigung_classify) / 4
tm_shape(overlay_prelim_3) +
tm_raster(palette = "-Spectral", breaks = seq(0, 1, 0.2), style = "cont", title = "Eignung") +
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.)
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 von unserem Resultat auzuschliessen, können wir wieder die Funktion mask() verwenden (siehe Kapitel 63.5). 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_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(palette = "-Spectral", breaks = seq(0, 1, 0.2), style = "cont", alpha = 0.6) +
tm_basemap("Esri.WorldImagery")