我正在读取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文件的问题。提前谢谢。
答案 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
前三个警告只是告诉您文件中还有其他自定义标记。