我正在处理MODIS数据(https://drive.google.com/open?id=1elQjbQSMzG3xH9oQBzBvWGb8OKZTjMiI)并使用R将NDVI层提取为tiff文件。
library(gdalUtils); library(rgdal); library(raster)
setwd("D:/workspace")
files <- dir(pattern = ".hdf")
filename <- substr(files, 1, 4)
filename <- paste0("MODIS", filename, "ndvi.tif")
for (i in 1:length(files)){
sds <- get_subdatasets(files[i])
gdal_translate(sds[1], ot = "Int16", of="GTiff", dst_dataset = filename[i])
}
根据ArcGIS,输出文件的数据类型为int16。 数据值的范围是9991到-1988。这符合MODIS文件(参见第9页,表1,https://vip.arizona.edu/documents/MODIS/MODIS_VI_UsersGuide_June_2015_C6.pdf)。但是,当我在R中读回数据时,数据类型发生了变化。
x <- raster("D:/workspace/MODIS2000ndvi.tif")
x
dataType(x) # the data type changed to INT2S -32,767, 32,767
如何获取原始值以将NDVI索引缩放为-1和1?任何提示都表示赞赏!
UPDATE x的输出如下所示
> show(x)
class : RasterLayer
dimensions : 4800, 4800, 23040000 (nrow, ncol, ncell)
resolution : 231.6564, 231.6564 (x, y)
extent : 0, 1111951, 5559753, 6671703 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs
data source : D:\workspace\MODIS2000ndvi.tif
names : MODIS2000ndvi
values : -32768, 32767 (min, max)
答案 0 :(得分:0)
INT2S
与Int16
(2字节有符号整数)相同,但我不知道其中任何一个与您关于NDVI的问题直接相关。你能否展示x
(show(x)
)
看起来这些值乘以10000(在原始文件中,可能是为了减小文件大小)。在这种情况下,您可以使用
缩放到[-1,1]x <- x / 10000