R:Landsat8 DN到反射率转换

时间:2016-04-20 12:08:34

标签: r raster landsat

对于使用卫星图像NDVI的灌溉清单,我需要将DN的Landsat 8图像转换为反射率。 在R中,有2个包(Landsat和Landsat8)具有转换功能,但是,这些功能的输出是一个大的数字'类。

输入不同:SpatialGridDataframe(参见函数说明)。 我尝试了这两种方法,但将它们转换为栅格或SpatialGridDataframe并不起作用。数字' 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..

1 个答案:

答案 0 :(得分:1)

立即处理整个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图层会给出一个向量。