2016-04-20 7 views
0

Für ein Bewässerungsinventar, das den NDVI von Satellitenbildern verwendet, muss ich Landsat 8 Bilder von DN auf Reflexionsgrade umwandeln. In R gibt es zwei Pakete (Landsat und Landsat8), die Funktionen zum Konvertieren haben, jedoch ist die Ausgabe dieser Funktionen in einer großen 'numerischen' Klasse.R: Landsat8 DN zur Reflektanzumwandlung

Die Eingabe ist anders: SpatialGridDataframe (siehe Funktionsbeschreibung). Ich habe beide Methoden ausprobiert, aber es funktioniert nicht, um sie in ein Raster oder SpatialGridDataframe zu konvertieren. Die ‚numerische‘ Klasse ist für weitere Berechnungen (NDVI, Bildkorrekturen oder Plotten nicht geeignet. Es gibt eine Möglichkeit, dies zu konvertieren? Könnten Sie mir?

helfen

Dank!

#BAND 4 
R4 <- list() 
R4 <- lapply(j, FUN = function(x) {raster(paste0('LC81700merged2014',x,'LGN00_B4.tif'))}) 
names(R4) <- paste0("R4",j) 
Jab=readShapeSpatial('E:/Maps/GIS Data/Jabi IrrigationSchemes/Jabi_Irrigation_Schemes_UTM.shp') 
CR <- lapply(R4, FUN=function(x) {crop(x, extent(Jab), snap="out")}) 
y <- stack(CR) # stack as RasterStack 
ty <- as(y, "SpatialGridDataFrame") 

#landsat8- package: 
ytest <- reflconv(ty$R4016,2.0E-5,-0.1) 
class(ytest) #numeric class 
ytest[ytest==-0.1] <- NA 
tsa <- as.raster(ytest, max=1) 
class(tsa) #raster Object 
y.tsa <- rasterize(tsa,background=NA,mask=FALSE, update=FALSE) #not working 

#alternative landsat-package 
jan16 <-radiocorr(ty$R4016,Grescale=L.var[4,4],Brescale=L.var[4,5],sunelev=SunEvel[1,2],edist=ESdist('2014-01-16'), 
       Esun=L.var[4,6],method= "apparentreflectance") 
class(jan16) #numeric class again.. 

Antwort

1

Entweder Prozess die ganze RasterStack auf einmal oder wenn Sie wollen eine Schicht verarbeiten, um den „SpatialGridDataFrame“ Zwang an einen anderen Ort bewegen.

... 
y <- stack(CR) # stack as RasterStack 
ty <- as(y, "SpatialGridDataFrame") 

#landsat8- package: 
ytest <- reflconv(ty, 2.0E-5, -0.1) 
class(ytest) # "SpatialGridDataFrame" 

oder

... 
y <- stack(CR) # stack as RasterStack 

#landsat8- package: 
ty <- as(y$R4016, "SpatialGridDataFrame") 
ytest <- reflconv(ty, 2.0E-5, -0.1) 
class(ytest) # "SpatialGridDataFrame" 

reflconv benötigt ein SpatialGridDataFrame, während das Abrufen einer Ebene von SpatialGridDataFrame einen Vektor ergibt.

+0

Jep, Sie haben den Fehler gefunden .. Die eine Schicht war in der Tat der Punkt. Danke vielmals! – Doris