2014-11-05 2 views
10

I ein Rasterstapel haben, stk, bestehend aus drei Rasterbilder in R. Hier ist ein einfaches BeispielR: RasterStack schreiben und Ebenennamen bewahren

# set up a raster stack with three layers 
> library(raster) 
> r <- raster(nrows=10,ncols=10) 
> r[] <- rnorm(100) 
> stk <- stack(r,r,r) 

# layer names are set by default 
> names(stk) 
[1] "layer.1" "layer.2" "layer.3" 

I Namen zu den Rasterebenen zuzuweisen:

# set layer names to "one", "two" and "three" 
> names(stk) <- c('one','two','three') 

> names(stk) 
[1] "one" "two" "three" 

Wenn ich schreibe die RasterStack zu einem GeoTiff (mehrschichtigen) mit:

writeRaster(stk,"myStack.tif", format="GTiff") 

Die Layer werden basierend auf dem Dateinamen umbenannt (siehe unten > names(stk)).

Wenn lese ich in dem Rasterstapel:

> stk <- stack("myStack.tif") 

# the layer names have been set automatically based on the filename 
# they should be "one", "two" and "three" 
> names(stk) 
[1] "myStack.1" "myStack.2" "myStack.3" 

Kennen Sie irgendeine Weise die Layer-Namen zu erhalten, wenn RasterStacks in R zu schreiben? Ich habe versucht, den Stapel zu GeoTIFF und NetCDF-Formaten zu schreiben.

Danke, Kevin

+0

Wo lesen Sie die gestapelte TIF-Datei? –

+0

Paulo, Danke, dass du es dir angeschaut hast. Ich habe gerade das Beispiel aufgeräumt, um es klarer zu machen, und einige Formulierungen korrigiert. Ich lese in der gestapelten TIF-Datei mit 'stk <- stack (" myStack.tif ")' (die erste Zeile des letzten Codeblocks). Danke noch einmal. – kguay

Antwort

5

Sie können die Verwendung des nativen Rasterformat machen:

myRaster <- writeRaster(stk,"myStack.grd", format="raster") 

Das Raster Raster-Format besteht aus dem binären .gri-Datei und der .grd Header-Datei. Dadurch bleiben deine Ebenennamen erhalten. Beachten Sie jedoch, dass .gri-Binärdateien nicht komprimiert sind.

Wenn Sie Raster GRD-Dateien in anderen Programmen öffnen müssen Sie wahrscheinlich eine zusätzliche Header-Datei schreiben. Normalerweise verwende ich dazu das ENVI-Header-Format.

hdr(myRaster, format = "ENVI") 

Um die Datei von qgis zum Beispiel öffnen Sie die .gri Datei (binär) wählen würden und es sollte funktionieren.

+0

Danke für diese Antwort! Beim Lesen des Rasters in R bleiben die Ebenennamen erhalten. QGIS ist jedoch nicht in der Lage, die korrekten Ebenennamen anzuzeigen, obwohl sie sowohl in der .grd-Datei als auch in der .hdr-Datei korrekt gespeichert sind. Gibt es dafür eine Lösung? –

4

Ein bisschen spät, aber vielleicht hilft jemand anderes für eine mögliche Lösung suchen:

writeRaster(stk, filename=names(stk), bylayer=TRUE,format="GTiff") 
+0

Dies wird jede Schicht in eine separate Datei schreiben, nicht alle Schichten und ihre Namen in einem Stapel nach OP Frage. – shekeine

0

ich meine Dateien als ENVI-Dateien geschrieben und geändert, um die Bandnamen in der ENVI-Header-Datei. Die Dateien können jetzt in ENVI und ArcGis geöffnet werden, und die Ebenennamen bleiben erhalten.

#write ENVI file (.envi; .hdr; .envi.aux.xml) with automatic layer names 
writeRaster(stk, "myStack" , format="ENVI") 

#change layer names in ENVI header (.hdr): 
n="myStack.hdr" 
x <- readLines(n) 
x <- gsub("Band 1,", "one,", x) 
x <- gsub("Band 2,", "two," , x) 
x <- gsub("Band 3", "three", x) 
cat(x, file=n, sep="\n") #overwrites the old ENVI header 

bearbeiten/ Ich habe gerade bemerkt, dass, wenn die .envi Datei importiert wird wieder in R die Layer-Namen wieder entfernt werden. Das gleiche Problem in SAGA.

image <- stack("myStack.envi") 
names(image) 
#[1] "myStack.1" "myStack.2" "myStack.3" 

image = readGDAL("myStack.envi") 
names(image) 
#[1] "band1" "band2" "band3" 
Verwandte Themen