【发布时间】:2016-02-06 16:55:22
【问题描述】:
我尝试创建一个函数,将卫星图像的数字数字转换为辐射,但我不知道为什么我的最终对象是数字而不是 SpatialGridDataFrame 对象,如果我在函数类中指定(结果)==“空间网格数据帧”。 我的代码是:
包
require(raster)
require(sp)
RasterLayer 模拟
r <- raster(nrows=10, ncols=10)
r <- setValues(r, 1:ncell(r))
plot(r)
band2<- as(r, 'SpatialGridDataFrame') ### convert in SpatialGridDataFrame
DN 发光功能
radconvL<-function(x, band = 2)
{
Lmax <- switch(as.character(band),
"2" = 120.64,
"3" = 151.31,
"4" = 157.57,
"5" = 69.03,
NA)
if (is.na(Lmax)) stop("invalid band")
Lmin = 0
Qmax = 127
x <- as.vector(as.matrix(x))
results <- x
x <- Lmin + ((Lmax-Lmin)*x)/Qmax
if (class(results) == "SpatialGridDataFrame")
results@data[, 1] <- x
else if (is.data.frame(x))
results <- data.frame(matrix(x, nrow = nrow(results),
ncol = ncol(results)))
else results <- x
print(paste(band, Lmax))
print(results)
results
}
--
试试这个功能
teste2<-radconvL(band2, band = 2)
str(test2)## Numeric!!!! Why???
有人可以帮我吗?
谢谢,
亚历山大
【问题讨论】:
标签: r function spatial r-raster