在R中读取.tif文件

时间:2013-05-29 00:11:38

标签: r

我正在读取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文件的问题。提前谢谢。

2 个答案:

答案 0 :(得分:14)

您是否只是尝试过光栅包光栅功能(如果是多层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)

答案 1 :(得分:6)

只需将像素读取为无符号并将其转换为带符号:

 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

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