将数据读取到R

时间:2018-02-07 14:53:23

标签: r import raster

我正在处理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)

1 个答案:

答案 0 :(得分:0)

INT2SInt16(2字节有符号整数)相同,但我不知道其中任何一个与您关于NDVI的问题直接相关。你能否展示xshow(x)

看起来这些值乘以10000(在原始文件中,可能是为了减小文件大小)。在这种情况下,您可以使用

缩放到[-1,1]
x <- x / 10000