在 R 中重新分类栅格

Reclassify Raster in R

我有一张栅格图像,其中包含从 -0.2 到 0.6 的 NDVI 值

NDVI  
#class      : RasterLayer 
#dimensions : 706, 953, 672818  (nrow, ncol, ncell)
#resolution : 30, 30  (x, y)
#extent     : 368085, 396675, 2038125, 2059305  (xmin, xmax, ymin, ymax)
#crs        : +proj=utm +zone=43 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
#source     : memory
#names      : layer 
#values     : -0.08728454, 0.5357124  (min, max)

我需要重新分类此栅格,例如

其中 lsat8_pv 是另一个按以下格式计算的栅格

 lsat8_pv <- ((ndvi - maxValue(ndvi)) / (maxValue(ndvi) - minValue(ndvi)))^2

 lsat8_pv
 #class      : RasterLayer 
 #dimensions : 706, 953, 672818  (nrow, ncol, ncell)
 #resolution : 30, 30  (x, y)
 #extent     : 368085, 396675, 2038125, 2059305  (xmin, xmax, ymin, ymax)
 #crs        : +proj=utm +zone=43 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
  #source     : memory
  #names      : layer 
  #values     : 0, 1  (min, max)

我已经解决了一些类似的问题,但无法发现其中公式是根据重新分类规则指定的任何问题。

下面是我试过的

lsat_e[ndvi < 0] = 0.991
lsat_e[ndvi > 0 & ndvi < 0.2] = 0.966

e <-  ({0.004 * lsat8_PV} + 0.986)

m = cbind(from = c(-1, 0.2, 0.5), to = c(0.2, 0.5, 1), becomes = c(0.984, e , 0.99))
m
#     from to  becomes
#[1,] -1   0.2 0.984  
#[2,] 0.2  0.5 ?      
#[3,] 0.5  1   0.99 

这是一个独立的最小可重现示例

library(raster)
ndvi <- raster(nrow=7, ncol=9, ext=extent(368085, 398085, 2038305, 2059305), crs="+proj=utm +zone=43 +datum=WGS84")
values(ndvi) <- seq(-1, 1, 2/ncell(ndvi))[-1]

maxVal <- cellStats(ndvi, max)
minVal <- cellStats(ndvi, min)
lsat8_pv <- ((ndvi - maxVal) / (maxVal - minVal))^2

而且你也应该更清楚自己需要什么。例如,高于 0.5 的值怎么办?为什么您尝试使用的值与问题描述中的值不同?

无论如何,你可以做这样的事情。使用 reclassify,但将需要由另一个栅格的值替换的像元设置为 NA。然后使用 cover 进行替换。

lst <- 0.004 * lsat8_pv + 0.986
m <- cbind(from = c(-Inf, 0, 0.2, 0.5), to = c(0, 0.2, 0.5, Inf), becomes = c(0.99, 0.96, NA , 1))
x <- reclassify(ndvi, m)
y <- cover(x, lsat8_pv)