2013-05-29 22 views
9

Sto leggendo un file .tif in R e ricevo 4 messaggi di avviso elencati di seguito. Quando seguo le istruzioni sul 4 ° messaggio, i primi 3 avvertimenti rimangono ma i valori letti dal file cambiano drasticamente ad ogni pixel. Aiutatemi a leggere correttamente i dati dai file .tif. File di esempio si possono trovare sul link: ftp://ftp.ntsg.umt.edu/pub/MODIS/NTSG_Products/MOD16/MOD16A2_MONTHLY.MERRA_GMAO_1kmALB/GEOTIFF_0.05degree/lettura di un file .tif in R

mio codice: messaggi

remove(list=ls()) 

library(tiff) 

library(raster) 

str_name<-'MOD16A2_ET_0.05deg_GEO_2008M01.tif' 

read_file<-readTIFF(str_name) 

Attenzione:

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) 

Please help me con questo numero di lettura dei file tif correttamente. Grazie in anticipo.

risposta

8

Hai provato semplicemente la funzione raster del pacchetto raster (o impila se più livelli di tif)? Il pacchetto raster è stato fatto per affrontare dataset raster georeferenziati:

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

il semplice codice sopra funziona e produce un oggetto raster con le seguenti proprietà:

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

Ciao, ho usato i comandi ma sto seguendo il seguente messaggio di errore: Errore in .rasterObjectFromFile (x, banda = banda, objecttype = "RasterLayer",: Impossibile creare l'oggetto RasterLayer da questo file, forse è necessario installare rgdal prima – Munish

+0

la mia versione R è: 2.15.2, se questo aiuta a risolvere il problema Quando carico pacchetto raster mi dà il messaggio di avviso: Caricamento pacchetto richiesto: sp Messaggi di avviso: 1: pacchetto 'raster' è stato creato sotto R versione 2.15.3 2: il pacchetto 'sp' è stato creato sotto R versione 2.15.3 – Munish

+0

forse è necessario installare rgdal prima – mdsumner

4

semplicemente leggere i pixel senza segno e convertirli in firmato:

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

Guardando l'immagine, si potrebbe anche voler convertire -32.768-NA come che sembra essere l'uso del file:

t[t == -32768L] = NA 

Se si desidera convertire i numeri interi a [-1,1] reali ora, basta fare

t = t/32768 

I primi tre avvisi sono solo dicendo che non ci sono ulteriori tag personalizzati nel file .

+0

Ciao Simon, il tuo metodo sembra leggere i valori correttamente attraverso le prime due righe; l'unico problema è che i valori sono 1 in più rispetto ad altri metodi di utilizzo della funzione raster per leggere i file tif e convertirli in matrice. per es. se l'altro metodo mostra il valore 199 a [650,1200], il tuo metodo restituisce 200; altrimenti sembra corretto. Grazie. – Munish