9

我正在阅读 R 中的 .tif 文件并收到下面列出的 4 条警告消息。当我按照第 4 条消息的说明进行操作时,前 3 个警告仍然存在,但从文件中读取的值在每个像素处都会发生巨大变化。请帮助我从 .tif 文件中正确读取数据。示例文件可在以下链接中找到:ftp: //ftp.ntsg.umt.edu/pub/MODIS/NTSG_Products/MOD16/MOD16A2_MONTHLY.MERRA_GMAO_1kmALB/GEOTIFF_0.05degree/

我的代码:

remove(list=ls()) 

library(tiff)

library(raster)

str_name<-'MOD16A2_ET_0.05deg_GEO_2008M01.tif' 

read_file<-readTIFF(str_name) 

警告信息:

1: In readTIFF(str_name) :
  TIFFReadDirectory: Unknown field with tag 33550 (0x830e) encountered
2: In readTIFF(str_name) :
  TIFFReadDirectory: Unknown field with tag 33922 (0x8482) encountered
3: In readTIFF(str_name) :
  TIFFReadDirectory: Unknown field with tag 34735 (0x87af) encountered
4: In readTIFF(str_name) :
  tiff package currently only supports unsigned integer or float sample formats in direct mode, but the image contains signed integer format - it will be treated as unsigned (use native=TRUE or convert=TRUE to avoid this issue)

请帮助我解决正确读取 tif 文件的问题。提前致谢。

4

2 回答 2

19

您是否尝试过简单的 raster 包 raster 函数(如果是多层 tif,则为堆栈)?栅格包用于处理地理参考栅格数据集:

library(raster)
str_name<-'MOD16A2_ET_0.05deg_GEO_2008M01.tif' 
imported_raster=raster(str_name)

上面的简单代码可以工作并产生一个具有以下属性的光栅对象:

class       : RasterLayer 
dimensions  : 2800, 7200, 20160000  (nrow, ncol, ncell)
resolution  : 0.05, 0.05  (x, y)
extent      : -180, 180, -60, 80  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
data source : C:\Users\lfortini\Downloads\MOD16A2_ET_0.05deg_GEO_2000M01.tif 
names       : MOD16A2_ET_0.05deg_GEO_2000M01 
values      : -32768, 32767  (min, max)
于 2013-05-29T01:49:21.407 回答
7

只需将像素读取为无符号并将它们转换为有符号:

 t = readTIFF("MOD16A2_ET_0.05deg_GEO_2008M01.tif", as.is=TRUE)
 t[t >= 32738L] = -65536L + t[t >= 32738L]

查看图像,您可能还想将 -32768 转换为NA,因为这似乎是文件中的用途:

 t[t == -32768L] = NA

如果您现在想将整数转换为 [-1,1] 实数,只需执行

 t = t / 32768

前三个警告只是告诉您文件中还有其他自定义标签。

于 2013-05-29T15:26:38.020 回答