我通过减去 R 中的两个栅格得到整个栅格的常数

I get a constant for the whole raster by subtracting two rasters in R

我有两个砖块格式的光栅,由于之前的操作,它们具有相同的特征。当我尝试在两者之间做一个简单的减法时,它给了我一个在我所有学习领域的常数。当我做乘法、加法或除法等其他操作时,它可以完美地工作,但不能用于减法。有人知道会发生什么吗?

阅读之前的查询,我尝试用不同的栅格格式替换 NA 值,但什么也没有。减法的输入值是通过不同的函数得到的

Rtoa_B1 <- Rtoa_F(d, RadianceB1, Eo,Us)
Rsuperf_B1 <- Rsuperf_F(RadianceB1,Lr1,Tv,Eo,d,Oz,Tz,Edown)
Ratm <- Rtoa_B1 - Rsuperf_B1

获得的类个文件是

> Rtoa_B1
class      : RasterBrick 
dimensions : 118, 111, 13098, 1  (nrow, ncol, ncell, nlayers)
resolution : 0.004500776, 0.004518253  (x, y)
extent     : -75.7172, -75.21762, 5.978564, 6.511717  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +a=6378137 +rf=298.25722293287 +no_defs 
source     : memory
names      : B1_MOD02HKM.A2019001.1605.061.2019002013822 
min values :                                  0.08510739 
max values :                                   0.3040431 

> Rsuperf_B1
class      : RasterBrick 
dimensions : 118, 111, 13098, 1  (nrow, ncol, ncell, nlayers)
resolution : 0.004500776, 0.004518253  (x, y)
extent     : -75.7172, -75.21762, 5.978564, 6.511717  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +a=6378137 +rf=298.25722293287 +no_defs 
source     : memory
names      : B1_MOD02HKM.A2019001.1605.061.2019002013822 
min values :                                   0.0617993 
max values :                                    0.280735 

> Ratm
class      : RasterLayer 
dimensions : 118, 111, 13098  (nrow, ncol, ncell)
resolution : 0.004500776, 0.004518253  (x, y)
extent     : -75.7172, -75.21762, 5.978564, 6.511717  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +a=6378137 +rf=298.25722293287 +no_defs 
source     : memory
names      : layer 
values     : 0.02330808, 0.02330808  (min, max)

函数

Rsuperf_F <- function(radiance,Lr,Tv,Eo,d,Oz,Tz,Edown){
  
  return((pi*(radiance-Lr)*(d**2))/(Tv*((Eo*cos(Oz)*Tz)+Edown)))
}
Rtoa_F <- function(d,radiance,Eo,Us){
  
  return(  (pi*(d**2)*radiance)/(Eo*Us)   )
}

函数值是之前计算的

显而易见的原因是两个栅格之间的差异对于所有像元都是相同的。使用乘法和除法你不会注意到这一点。

library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
x <- b + 10
d <- x - b
d
#class      : RasterBrick 
#dimensions : 77, 101, 7777, 3  (nrow, ncol, ncell, nlayers)
#resolution : 1, 1  (x, y)
#extent     : 0, 101, 0, 77  (xmin, xmax, ymin, ymax)
#crs        : +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs 
#source     : memory
#names      : red, green, blue 
#min values :  10,    10,   10 
#max values :  10,    10,   10 

如果情况并非如此,请编辑您的问题以说明这一点。

根据您的编辑,我发现两个层的最小值和最大值之间的范围相同。

0.08510739  - 0.0617993
#[1] 0.02330809
0.3040431 - 0.280735 
#[1] 0.0233081

我看不出这些值是否适用于相同的单元格,但这就是您提供的所有信息。到目前为止,它表明计算是正确的。

因为你的栅格真的很小,你可以做 values(Rtoa_B1) - values(Rsuperf_B1) 我希望你会看到你只会得到 0.0233081

的值