Я хочу создать новый растр из 2 тайлов. На дату "247" все работает нормально. Но для следующей даты «248» растр, который я получаю взамен, — это только первая плитка h12v12, не объединяющая последовательную (h13v12).
Это всего лишь пример. Я работал с большим количеством файлов, и у меня была такая же проблема с некоторыми случайными файлами. Тем не менее, для некоторых из них я получил желаемые результаты.
Файлы: https://drive.google.com/drive/folders/1FSUAg-H8ePP9jeZjCTatlGFsDsKCq3cN?usp=sharing
#Open files for a day
files <- c("AOD2022248.h12v12.tif", "AOD2022248.h13v12.tif")
files_2 <- c("AOD2022247.h12v12.tif", "AOD2022247.h13v12.tif")
#create stack for each one
test_1 <- stack(files[1])
test_2 <- stack(files[2])
test_3 <- stack(files_2[1])
test_4 <- stack(files_2[2])
Первая попытка была с raster::mosaic. Для файла 248 у меня есть ошибка. Для файла 247 это сработало.
joint <- mosaic(test_1, test_2, fun=mean, filename = "joint.tif", overwrite=TRUE)
Error in v[cells, i] <- as.vector(getValues(x[[i]])) :
number of items to replace is not a multiple of replacement length
joint2 <- mosaic(test_3, test_4, fun=mean, filename = "joint2.tif", overwrite=TRUE)
Я не понимаю этой ошибки, растры не одинакового размера, потому что они должны быть рядом, а не друг над другом.
Итак... вторая попытка была с gdalUtils::mosaic_rasters. Хотя я не получил здесь никаких ошибок, когда я открываю новый tif в QGIS, у 248 есть только первая плитка, а у 247 - две из них.
mosaic_rasters(files, dst_dataset= "files.tif")
[1] "AOD2022248.h12v12.tif" "AOD2022248.h13v12.tif"
NULL
mosaic_rasters(files_2, dst_dataset= "files2.tif")
[1] "AOD2022247.h12v12.tif" "AOD2022247.h13v12.tif"
NULL
Когда я использую verbose = TRUE в мозаике_растров...
у меня за 247
Размер входного файла 2400, 12000...10...20...30...40...50...60...70...80...90...100 - готово.
и для 248
Размер входного файла 1200, 12000...10...20...30...40...50...60...70...80...90...100 - готово.
Я также сравнил растры, чтобы увидеть, есть ли разница в h12v12 или h13v12 между днями, но они одинаковы.
> compareRaster(test_1, test_3)
[1] TRUE
> compareRaster(test_2, test_4)
[1] TRUE
Если файлы одинаковые, то почему мозаика/слияние работает корректно только с некоторыми из них?
В стопках растров должно быть одинаковое количество слоев.
nlayers(test_1)
# [1] 4
nlayers(test_2)
# [1] 3
Если мы добавим еще один фиктивный слой, заполненный NA, то мозаика сработает. Я предположил, что недостающий слой — это четвертый, но вам может понадобиться выяснить, какой из них отсутствует в вашем конкретном случае.
test_2a = stack(test_2, init(test_2[[1]], fun=function(x) rep(NA,x)))
joint <- mosaic(test_1, test_2a, fun=mean, filename = "joint.tif", overwrite=TRUE)
Или мы можем использовать пакет terra
вместо raster
library(terra)
test_1 <- rast(files[1])
test_2 <- rast(files[2])
joint <- mosaic(test_1, test_2)
Спасибо! В этом была проблема. Я так понимаю, мозаика делается слой за слоем? Странно то, что я проверил все другие файлы, с которыми я работаю, и если: ` nlayers(test_1) # [1] 3 nlayers(test_2) # [1] 4` Как и наоборот, мозаичные работы. Может быть, он отбрасывает дополнительный слой test_2?