2013-05-29 11 views
9

Ich lese eine .tif-Datei in R und bekomme 4 Warnungen unten aufgelistet. Wenn ich der Anweisung in der 4. Meldung folge, bleiben die ersten 3 Warnungen erhalten, aber die aus der Datei gelesenen Werte ändern sich drastisch bei jedem Pixel. Bitte helfen Sie mir, die Daten korrekt aus den .tif-Dateien zu lesen. Beispieldatei finden Sie auf den Link zu finden: ftp://ftp.ntsg.umt.edu/pub/MODIS/NTSG_Products/MOD16/MOD16A2_MONTHLY.MERRA_GMAO_1kmALB/GEOTIFF_0.05degree/Lesen einer .tif-Datei in R

mein Code:

remove(list=ls()) 

library(tiff) 

library(raster) 

str_name<-'MOD16A2_ET_0.05deg_GEO_2008M01.tif' 

read_file<-readTIFF(str_name) 

Warnmeldungen:

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) 

Bitte helfen Sie mir mit diesem Thema richtig tif-Dateien zu lesen. Danke im Voraus.

Antwort

8

Haben Sie einfach die Raster-Paket-Rasterfunktion versucht (oder stapeln Sie wenn mehrere Ebenen tif)? Das Raster Paket wurde hergestellt mit georeferenzierten Raster-Dataset zu behandeln:

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

Der einfache Code über Werke und ergibt ein Rasterobjekt mit den folgenden Eigenschaften:

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

Hallo, ich habe die Befehle verwendet, bekomme aber folgende Fehlermeldung: Fehler in .rasterObjectFromFile (x, band = band, objekttyp = "RasterLayer",: Kann kein RasterLayer-Objekt aus dieser Datei erzeugen, vielleicht musst du zuerst rgdal installieren – Munish

+0

meine R-Version ist: 2.15.2, wenn das bei der Lösung des Problems hilft.Wenn ich Raster-Paket lade, gibt es mir die Warnmeldung: Loading benötigtes Paket: sp Warnmeldungen: 1: Paket 'Raster' wurde unter R gebaut Version 2.15.3 2: Paket 'sp' wurde unter R-Version 2.15.3 gebaut – Munish

+0

vielleicht müssen Sie rgdal zuerst installieren – mdsumner

4

einfach den Pixel als unsigned lesen und wandeln sie in unterzeichnet:

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

im Bild suchen, können Sie wollen auch -32.768-NA konvertieren, wie, dass die Verwendung in der Datei zu sein scheint:

t[t == -32768L] = NA 

Wenn Sie jetzt die ganzen Zahlen auf [-1,1] reellen Zahlen konvertieren wollen, tun nur

t = t/32768 

Die ersten drei Warnungen nur Sie sagen, dass es zusätzliche benutzerdefinierte Tags in der Datei .

+0

Hallo Simon, Ihre Methode scheint Werte korrekt durch die ersten beiden Zeilen zu lesen; Einziges Problem ist, dass die Werte 1 mehr sind als andere Ansätze, die Rasterfunktion zu verwenden, um TIF-Dateien zu lesen und in Matrix zu konvertieren. für z.B. Wenn die andere Methode den Wert 199 bei [650,100] anzeigt, gibt Ihre Methode 200 an; ansonsten scheint es korrekt zu sein. Vielen Dank. – Munish