R - передискретизация одного растрового изображения с более высоким разрешением с более точным - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть 2 растровых изображения разного пространственного разрешения и проекции. Я хочу пересчитать несколько более грубых изображений (0,25 градуса) до более высокого разрешения (4 км) на основе одного более тонкого изображения с разрешением 4 км.

Оба находятся в разных папках. Я пытался написать код на R, но получил ошибку.

 >library(raster)
 >setwd("D:/mtech project/data/DEC 16/RH/1-DEC-16/extracted/")
 >inFiles1 <- list.files(pattern="*.tif")
 > nFiles1 <-  length(inFiles1)
 > setwd("D:/mtech project/data/extracted/")
 > inFiles2 <- raster("3DIMG_01DEC2016_0000_L2C_FOG_FOG.tif")
 > for (i in 1:nFiles1) {
 +     r1<-raster(inFiles1[[i]])    
 +     r2<-inFiles2    
 +     rs<-resample(r1,r2,method="bilinear")
 +     write.Raster(rs, paste0('D:/mtech project/data/DEC 16/RH/RESAMPLED/rs_',i,'.img'), overwrite=T)
 +   }

 Error in .local(.Object, ...) : 

 Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer",  :   Cannot create a RasterLayer object from this file. (file does not exist)

`

1 Ответ

0 голосов
/ 10 ноября 2018

Если функция с циклом не работает, попробуйте запустить ее для первого случая, без цикла. Полученные сообщения об ошибках довольно ясны. Файл не существует, так как у вас есть только имя файла, но не путь, и вы изменили каталоги.

Вместо этого вы можете сделать это:

library(raster)
ff <- list.files("D:/mtech project/data/DEC 16/RH/1-DEC-16/extracted/", pattern="\\.tif$", full.names=TRUE)
n <- length(ff)
r2 <- raster("D:/mtech project/data/extracted/3DIMG_01DEC2016_0000_L2C_FOG_FOG.tif")
for (i in 1:n) {
    r1 <- raster(ff[i])    
    f <- paste0('D:/mtech project/data/DEC 16/RH/RESAMPLED/rs_',i,'.img')
    rs <- resample(r1, r2, method="bilinear", filename=f, overwrite=TRUE)
}

Или вообще избежать цикла и записать в один файл.

s <- stack(inFiles)
f <- 'D:/mtech project/data/DEC 16/RH/RESAMPLED/rs.img')
rs <- resample(s, r2, method="bilinear", filename=f, overwrite=TRUE)
...