2013-03-07 1 views
3

A un 4 bandes avec couche raster:R - obtenir une bande spécifique d'une couche raster

>rx<-raster("/media/karimdion/Passport/Essais/po_3804017_bgrn_0000000 tif") 
    > str(rx) 
     Formal class 'RasterLayer' [package "raster"] with 12 slots 
    @ file :Formal class '.RasterFile' [package "raster"] with 12 slots 
     @ nbands  : int 4 
     @ bandorder : chr "BIL" 
@ data :Formal class '.SingleLayerData' [package "raster"] with 13 slots 
     @ min  : num 0 
     @ max  : num 65535 
     @ band  : int 1 
@ history : list() 
@ title : chr(0) 
@ extent :Formal class 'Extent' [package "raster"] with 4 slots 
     @ xmin: num 655781 
     @ xmax: num 666701 
     @ ymin: num 4071522 
     @ ymax: num 4084598 
@ rotated : logi FALSE 
@ rotation:Formal class '.Rotation' [package "raster"] with 2 slots 
     @ geotrans: num(0) 
     @ transfun:function() 
@ ncols : int 5460 
@ nrows : int 6538 
@ crs  :Formal class 'CRS' [package "sp"] with 1 slots 
     @ projargs: chr "+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0" 
@ z  : list() 

Je veux obtenir chaque bande dans une seule variable en tant que couche raster. Donc, en conséquence, je aurais 4 RasterLayers ayant 1 bande. Comment puis-je faire cela avec R?

Répondre

-1

Vous devriez être en mesure de le faire:

f <- "/media/karimdion/Passport/Essais/po_3804017_bgrn_0000000 tif" 
rx<-raster(f) 
for(i in 1:[email protected]@nbands){ 
    assign(paste("rx" , i , sep = "." , raster(f, band=i) 
} 

Cela devrait vous donner quatre fichiers, rx.1, rx.2, rx.3, rx.4, un pour chaque bande du fichier raster. Je suis sûr qu'il y a une meilleure façon de faire cela, mais je ne m'en souviens pas tout de suite.

+0

merci! Si vous vous souvenez de votre tour, faites-le moi savoir! –

+0

@KarimGhariani Je vais essayer! Avez-vous également vu ma réponse à votre autre question sur la pixellisation des bords des polygones? –

+0

Oui, et j'aime ça! –

6

Avec le nom de fichier f (ici en utilisant un fichier exemple pour la reproductibilité)

f <- system.file("external/rlogo.grd", package="raster") 

Pour une bande particulière, vous pouvez faire

r <- raster(f, band=2) 

Ou pour toutes les bandes

b <- brick(f) 

Ou (moins efficace):

s <- stack(f) 
Questions connexes