Próbowałem znaleźć efektywny czasowo sposób scalania wielu obrazów rastrowych w R. Są to sąsiadujące sceny ASTER z południowego regionu Kilimandżaro, a moim celem jest złożyć je razem, aby uzyskać jeden duży obraz.Łączenie wielu rastrów w R
To, co mam tak daleko (object 'ast14dmo reprezentujące listę obiektów RasterLayer):
# Loop through single ASTER scenes
for (i in seq(ast14dmo.sd)) {
if (i == 1) {
# Merge current with subsequent scene
ast14dmo.sd.mrg <- merge(ast14dmo.sd[[i]], ast14dmo.sd[[i+1]], tolerance = 1)
} else if (i > 1 && i < length(ast14dmo.sd)) {
tmp.mrg <- merge(ast14dmo.sd[[i]], ast14dmo.sd[[i+1]], tolerance = 1)
ast14dmo.sd.mrg <- merge(ast14dmo.sd.mrg, tmp.mrg, tolerance = 1)
} else {
# Save merged image
writeRaster(ast14dmo.sd.mrg, paste(path.mrg, "/AST14DMO_sd_", z, "m_mrg", sep = ""), format = "GTiff", overwrite = TRUE)
}
}
Jak zapewne domyślić, kod działa. Łączenie trwa jednak dość długo, biorąc pod uwagę, że każdy pojedynczy obiekt rastrowy ma około 70 mb. Próbowałem też Reduce i do.call, ale to się nie udało, ponieważ nie mogłem podać argumentu "tolerancja", który omija różne pochodzenie plików rastrowych.
Ktoś ma pomysł, jak przyspieszyć działanie?
Świetne rozwiązanie również, dziękuję! Po prostu rzuciłem okiem na czas obliczeń i okazało się, że twoje podejście za pomocą 'do.call' działa prawie dwa razy szybciej niż' Reduce'. – fdetsch