R:Landsat8 DN 到反射率的转换
R: Landsat8 DN to reflectance conversion
对于使用卫星图像 NDVI 的灌溉清单,我需要将 Landsat 8 图像从 DN 转换为反射率。
在 R 中,有 2 个包(Landsat 和 Landsat8)具有要转换的函数,但是,这些函数的输出很大 'numeric' class。
输入不同:SpatialGridDataframe(见函数说明)。
我已经尝试了这两种方法,但无法将它们转换为栅格或 SpatialGridDataframe。 'numeric' class 不适合进一步计算(NDVI、图像校正或绘图。有办法转换吗?
你能帮帮我吗?
谢谢!
#BAND 4
R4 <- list()
R4 <- lapply(j, FUN = function(x) {raster(paste0('LC81700merged2014',x,'LGN00_B4.tif'))})
names(R4) <- paste0("R4",j)
Jab=readShapeSpatial('E:/Maps/GIS Data/Jabi IrrigationSchemes/Jabi_Irrigation_Schemes_UTM.shp')
CR <- lapply(R4, FUN=function(x) {crop(x, extent(Jab), snap="out")})
y <- stack( CR) # stack as RasterStack
ty <- as(y, "SpatialGridDataFrame")
#landsat8- package:
ytest <- reflconv(ty$R4016,2.0E-5,-0.1)
class(ytest) #numeric class
ytest[ytest==-0.1] <- NA
tsa <- as.raster(ytest, max=1)
class(tsa) #raster Object
y.tsa <- rasterize(tsa,background=NA,mask=FALSE, update=FALSE) #not working
#alternative landsat-package
jan16 <-radiocorr(ty$R4016,Grescale=L.var[4,4],Brescale=L.var[4,5],sunelev=SunEvel[1,2],edist=ESdist('2014-01-16'),
Esun=L.var[4,6],method= "apparentreflectance")
class(jan16) #numeric class again..
要么一次处理整个 RasterStack,要么如果你想处理一层,将 "SpatialGridDataFrame" 强制转换到不同的地方。
...
y <- stack( CR) # stack as RasterStack
ty <- as(y, "SpatialGridDataFrame")
#landsat8- package:
ytest <- reflconv(ty, 2.0E-5, -0.1)
class(ytest) # "SpatialGridDataFrame"
或
...
y <- stack( CR) # stack as RasterStack
#landsat8- package:
ty <- as(y$R4016, "SpatialGridDataFrame")
ytest <- reflconv(ty, 2.0E-5, -0.1)
class(ytest) # "SpatialGridDataFrame"
reflconv 需要一个 SpatialGridDataFrame,而获取 SpatialGridDataFrame 的一层给出一个向量。
对于使用卫星图像 NDVI 的灌溉清单,我需要将 Landsat 8 图像从 DN 转换为反射率。 在 R 中,有 2 个包(Landsat 和 Landsat8)具有要转换的函数,但是,这些函数的输出很大 'numeric' class。
输入不同:SpatialGridDataframe(见函数说明)。 我已经尝试了这两种方法,但无法将它们转换为栅格或 SpatialGridDataframe。 'numeric' class 不适合进一步计算(NDVI、图像校正或绘图。有办法转换吗? 你能帮帮我吗?
谢谢!
#BAND 4
R4 <- list()
R4 <- lapply(j, FUN = function(x) {raster(paste0('LC81700merged2014',x,'LGN00_B4.tif'))})
names(R4) <- paste0("R4",j)
Jab=readShapeSpatial('E:/Maps/GIS Data/Jabi IrrigationSchemes/Jabi_Irrigation_Schemes_UTM.shp')
CR <- lapply(R4, FUN=function(x) {crop(x, extent(Jab), snap="out")})
y <- stack( CR) # stack as RasterStack
ty <- as(y, "SpatialGridDataFrame")
#landsat8- package:
ytest <- reflconv(ty$R4016,2.0E-5,-0.1)
class(ytest) #numeric class
ytest[ytest==-0.1] <- NA
tsa <- as.raster(ytest, max=1)
class(tsa) #raster Object
y.tsa <- rasterize(tsa,background=NA,mask=FALSE, update=FALSE) #not working
#alternative landsat-package
jan16 <-radiocorr(ty$R4016,Grescale=L.var[4,4],Brescale=L.var[4,5],sunelev=SunEvel[1,2],edist=ESdist('2014-01-16'),
Esun=L.var[4,6],method= "apparentreflectance")
class(jan16) #numeric class again..
要么一次处理整个 RasterStack,要么如果你想处理一层,将 "SpatialGridDataFrame" 强制转换到不同的地方。
...
y <- stack( CR) # stack as RasterStack
ty <- as(y, "SpatialGridDataFrame")
#landsat8- package:
ytest <- reflconv(ty, 2.0E-5, -0.1)
class(ytest) # "SpatialGridDataFrame"
或
...
y <- stack( CR) # stack as RasterStack
#landsat8- package:
ty <- as(y$R4016, "SpatialGridDataFrame")
ytest <- reflconv(ty, 2.0E-5, -0.1)
class(ytest) # "SpatialGridDataFrame"
reflconv 需要一个 SpatialGridDataFrame,而获取 SpatialGridDataFrame 的一层给出一个向量。