Ich stoße auf ein ungewöhnliches Problem mit der Cover-Funktion in R. Wir versuchen, trübe Pixel mit Werten aus einer anderen Ebene zu füllen. Ich kann es nur gut mit Stapeln funktioniert wie folgt -r Raster-Cover-Funktion - Fehler mit Landsat-Stapeln
library(raster)
r1 <- raster(ncols=36, nrows=18)
r1[] <- 1:ncell(r1)
r1b <- r1a <- r1
r1_stack <- stack(r1, r1a, r1b)
r2 <- setValues(r1, runif(ncell(r1)))
r2b <- r2a <- r2
r_stack <- stack(r2, r2a, r2b)
r_stack[r_stack < 0.5] <- NA
r3 <- cover(r_stack, r1_stack)
Aber ich versuche dann mit einem Raster-Stack, das Gleiche zu tun, und ich bekomme die Fehlermeldung:
Error in as.character(x) :
cannot coerce type 'closure' to vector of type 'character'
Der Code:
# get all tifs
LS5_032_032_2008_09_21 <- list.files("LT050340302008090301T1-SC20170526100900/",
pattern = glob2rx("*band*.tif$"), full.names = T)
# stack bands
cloudy_scene <- stack(LS5_032_032_2008_09_21)
# import cloud mask
cloud_mask <- raster('LT050340302008090301T1-SC20170526100900/LT05_L1TP_034030_20080903_20160905_01_T1_sr_cloud_qa.tif')
# mask data
masked_data <- mask(cloudy_scene, mask = cloud_mask, maskvalue=0, inverse=TRUE)
####### get cloud free data
# get files
LS5_2008_09_19 <- list.files("LT050340302008091901T1-SC20170526101124/",
pattern = glob2rx("*band*.tif$"), full.names = T)
# subset and stack cloud free bands
cloud_free_data <- stack(LS5_2008_09_19)
# use cover function to assign NA pixels to corresponding pixels in other scene
cover <- cover(masked_data, cloud_free_data)
TRACEBACK() Ausgang:
9: toupper(format)
8: .defaultExtension(format)
7: .getExtension(filename, filetype)
6: .local(x, filename, ...)
5: writeStart(outRaster, filename = filename, format = format, datatype = datatype,
overwrite = overwrite)
4: writeStart(outRaster, filename = filename, format = format, datatype = datatype,
overwrite = overwrite)
3: .local(x, y, ...)
2: cover(masked_data, cloud_free_data)
1: cover(masked_data, cloud_free_data)
UPDATE: Ich habe versucht, die Daten sampeln - noch nicht
cloud_free_resam <- resample(cloud_free_data, masked_data)
cover <- cover(masked_data, cloud_free_resam)
ERROR funktioniert:
Error in as.character(x) :
cannot coerce type 'closure' to vector of type 'character'
Ich habe auch versucht, beide Schichten zu beschneiden - gleiche Fehler
# find intersection boundary
crop_extent <- intersect(extent(cloud_free_data), extent(masked_data))
cloud_free_data <- crop(cloud_free_data, crop_extent)
masked_data <- crop(masked_data, crop_extent)
# use cover function to assign NA pixels to corresponding pixels in other scene
cover <- cover(masked_data, cloud_free_data)
ERHALTEN SIE DIE DATEN: (WARNUNG: 317mb download - packt zu ~ 1GB) https://ndownloader.figshare.com/files/8561230
Irgendwelche Ideen, was diesen Fehler mit diesem bestimmten Datensatz verursachen könnte? Ich bin sicher, wir vermissen etwas ganz einfaches, aber ... was? Vielen Dank im Voraus.
Leah
Works für mich, wenn ich alles zu einem geringen Teil durch 'e = Umfang definiert beschneiden (450000,470000,4750000,4780000) ', also zB:' cloud_free_data <- crop (stack (LS5_2008_09_19 [5:10]), e) ', Mein PC schleift schlecht auf die ganzen Daten, ich habe es nicht laufen lassen Abschluss/Fehler – Spacedman
Was sagt 'traceback()' nach Ihrem Fehler? Kannst du das in die Frage einarbeiten? – Spacedman
@Spacedman Ich habe das Gefühl, dass es etwas mit überlappenden Pixeln in Bereichen zu tun hat, in denen keine Daten vorhanden sind, aber ich bin mir nicht sicher. Ich werde versuchen, die Ernte und die Traceback –