J'ai une pile raster, stk
, composée de trois images raster en R. Voici un exemple simple.
# 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"
J'attribue des noms aux couches raster:
# set layer names to "one", "two" and "three"
> names(stk) <- c('one','two','three')
> names(stk)
[1] "one" "two" "three"
Lorsque j'écris le RasterStack sur un GeoTiff (multicouches) en utilisant:
writeRaster(stk,"myStack.tif", format="GTiff")
Les couches sont renommées en fonction du nom de fichier (voir > names(stk)
ci-dessous).
Quand je lis dans la pile raster:
> 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"
Connaissez-vous un moyen de conserver les noms de couche lors de l’écriture de RasterStacks dans R? J'ai essayé d'écrire la pile aux formats GeoTIFF et NetCDF.
Merci Kevin
Vous pouvez utiliser le format de raster natif:
myRaster <- writeRaster(stk,"myStack.grd", format="raster")
Le format de grille raster comprend le fichier binaire .gri et le fichier d'en-tête .grd. Cela préservera vos noms de prénom. Notez cependant que les fichiers binaires .gri ne sont pas compressés.
Si vous devez ouvrir des fichiers raster grd dans d'autres programmes, vous aurez probablement besoin d'écrire un fichier d'en-tête supplémentaire. J'utilise habituellement le format d'en-tête ENVI pour le faire.
hdr(myRaster, format = "ENVI")
Pour ouvrir le fichier à partir de qgis, par exemple, vous devez sélectionner le fichier .gri (le binaire) et cela devrait fonctionner.
Un peu en retard mais pourrait aider quelqu'un d'autre à la recherche d'une solution possible:
writeRaster(stk, filename=names(stk), bylayer=TRUE,format="GTiff")
J'ai écrit mes fichiers sous forme de fichiers ENVI et modifié les noms de groupes dans le fichier d'en-tête ENVI. Les fichiers peuvent maintenant être ouverts dans ENVI et ArcGis et les noms de couche sont préservés.
#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
Je viens de remarquer que, lorsque le fichier .envi est réimporté dans R, les noms de calques sont de nouveau supprimés. Même problème dans SAGA.
image <- stack("myStack.envi")
names(image)
#[1] "myStack.1" "myStack.2" "myStack.3"
image = readGDAL("myStack.envi")
names(image)
#[1] "band1" "band2" "band3"