1

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

输入不同:SpatialGridDataframe(见函数描述)。我已经尝试了这两种方法,但是将它们转换为栅格或 SpatialGridDataframe 不起作用。“数字”类不适合进一步计算(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..
4

1 回答 1

2

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

于 2016-04-20T14:40:56.183 回答