derzeit beschäftige ich mich mit dem Kombinieren von Rasterfiles und der Zuweisung von Werten unter bestimmten Bedingungen. Ich habe ein Rasterfile (pre), welches Niederschlag (in Form von Klassen) enthält und ein Rasterfile (h), welches die Seehöhe enthält. Jetzt möchte ich, dass Abhängig vom Breitengrad jeder Seehöhe eine Niederschlagswahrscheinlichkeit zugeordnet wird - beispielsweise zwischen dem Breitengrad 48.5 und 49.5 liegt bei einer Seehöhe von 1300 m die Niederschlagswahrscheinlichkeit bei 2.
Ohne die Breitengrad-Abhängigkeit zu berücksichtigen habe ich die Zuordnung mit 'overlay' gemacht:
Code: Alles auswählen
# erstelle Zufalls-Raster für Niederschlagsklassen
pre <- raster()
pre[] <- runif(ncell(pre), min = 0, max = 195)
# erstelle Zufalls-Raster für Seehöhen
h <- raster()
h[] <- runif(ncell(h), min = 0, max = 4579)
#definiere die Funktion zum Zuordnen der Wahrscheinlichkeiten, in Abhängigkeit der Niederschlagsklassen und Seehöhe
fun_if <- function(x,y){
ifelse( x == 4 & y >= 300 & y <= 599, 2,
ifelse( x == 4 & y >= 600 & y <= 899, 2,
ifelse( x == 19 & y >= 300 & y <= 599, 3,
ifelse( x == 19 & y >= 600 & y <= 899, 3,
ifelse( x == 10 & y >= 300 & y <= 599, 1,
ifelse( x == 10 & y >= 600 & y <= 899, 2,
ifelse( x == 17 & y >= 300 & y <= 599 | x == 13 & y >= 300 & y <= 599 | x == 60 & y >= 300 & y <= 599, 2,
ifelse( x == 17 & y >= 600 & y <= 899 | x == 13 & y >= 600 & y <= 899 | x == 60 & y >= 600 & y <= 899, 2,
ifelse (x == 111 | x == 180 | x == 178 | x == 192, 0,
ifelse (y > 1500, 0,
NA )) )) )) )))) }
p_prec <- overlay(pre, h, fun = fun_if)
In dem neuen Rasterfile p_prec stehen jetzt die jeweiligen Wahrscheinlichkeiten von Niederschlag.
Allerdings unterscheiden sich diese je nach Lage. Die Funktion fun_if ist in meinem Fall abhängig vom Breitengrad, hauptsächlich wird sich die letzte ifelse-Bedingung (y > 1500,0) ändern. Da es sich eigentlich um flüssigen Niederschlag handelt, nimmt nach Norden hin die Höhe, in der der Niederschlag flüssig auftritt, ab. Dies möchte ich im Rasterfile p_prec (bzw. mit der entsprechenden Graphik) zeigen.
Ich dachte, ich löse das Problem mit einer while oder repeat Schleife, wobei ich hier nicht weiß, wie ich das am besten umsetzten soll.
Das Auslesen der Koordinaten habe ich mit init probiert:
Code: Alles auswählen
lat <- init(h,'y')
v_lat <- values(lat_h)
Code: Alles auswählen
# geänderte Funktion für die Breitengrade ab 60°
fun_if_1 <- function(x,y){
ifelse( x == 4 & y >= 300 & y <= 599, 2,
ifelse( x == 19 & y >= 300 & y <= 599, 3,
ifelse( x == 10 & y >= 300 & y <= 599, 1,
ifelse( x == 17 & y >= 300 & y <= 599 | x == 13 & y >= 300 & y <= 599 | x == 60 & y >= 300 & y <= 599, 2,
ifelse (y >= 600, 0,
NA )) )) )}
repeat {
p_prec <- overlay(pre,h, fun = fun_if_1)
if (v_lat > 60) break
# if (v_lat > 60 & v_lat <= 65)
Warnmeldung:
In if (v_lat > 60) break :
Bedingung hat Länge > 1 und nur das erste Element wird benutzt
}
Da ich den repeat-Befehl auch für mehrere unterschiedliche Bedingungen (je nach Breitengrad) ausführen muss, überschreibe ich mir die bereits erstellte p_prec oder werden die entsprechenden Breitengrade mit den neuen Informationen ergänzt. Wieviele solcher fun_ifs ich am Ende haben werde, kann ich derzeit noch nicht sagen, da ich mir die Information noch aus der Literatur suchen muss. Ich wollte vorab mal Probieren, ob ich diesen Ansatz in R umsetzten kann.
Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt und bin sehr dankbar für eure Hilfe.
Gruß, Jess