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