我有一个光栅图像,其中的NDVI值在-0.2到0.6之间
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)