Suite

Reclassification de la pile raster en fonction de la condition et d'autres couches à l'aide de R?


Je veux reclasser le rasterr1sous la forme suivante :

  • toutes les valeurs supérieures àr2être1
  • toutes les valeurs inférieures àr3être0
  • toutes les autres valeurs doivent être égales àr4

J'utilise la superposition pour définir les valeurs des deux premières conditions, mais je ne peux pas le faire pour la troisième. Je suis également intéressé de savoir comment mettre tout cela dans une seule fonction.

library(raster) r1 <- raster(nrow=5, ncol=5) r1 <- setValues(r1, runif(ncell(r1))) r2 <- setValues(r1, runif(25 ,0.6,0.9)) r3 < - setValues(r1, runif(25 ,0.2,0.4)) r4 <- setValues(r1, runif(25 ,1,2)) x <- overlay(r1, r2, fun=function(x,y){ x[ x>y] <- 1; x}) x2 <- overlay(x, r3, fun=function(x,y){ x[x

Pour mettre cela dans une fonction vectorisée, vous pouvez utiliser ifelse. Si vous empilez vos rasters, vous n'avez pas besoin de fragmenter la reclassification et pouvez appliquer une fonction à la pile.

Préparer les données

library(raster) r1 <- raster(nrow=5, ncol=5) r <- stack(setValues(r1, runif(ncell(r1))), setValues(r1, runif(25 ,0.6,0.9)), setValues (r1, runif(25 ,0.2,0.4)), setValues(r1, runif(25 ,1,2)))

Écrire la fonction de reclassement

rc <- function(x1,x2,x3,x4) { ifelse( x1 > x2, 1, ifelse( x1 < x3, 0, x4) ) }

Appliquer la fonction à la pile raster

r.class <- overlay(r, fun=rc)

Les opérateurs d'extraction de crochet fonctionnent sur les rasters dans R. Vous n'avez donc pas besoin d'utiliser setValues ​​ou overlay. je ferais ça :

r1[r1 > r2] <- 1 r1[r1 < r3] <- 0 r1[!(r1 > r2 | r1 < r3)] <- r4[!(r1 > r2 | r1 < r3)]

Cela devrait fonctionner si tous vos rasters ont la même étendue et la même résolution.


Voir la vidéo: QGIS Raster Calculator for No Data Values and Thresholds Version (Octobre 2021).