【问题标题】:R- resampling one coarser resolution raster image with finer oneR-用更精细的一张重新采样一张较粗分辨率的光栅图像
【发布时间】:2018-11-10 05:09:29
【问题描述】:

我有 2 个不同空间分辨率和投影的光栅图像。我想根据一张 4 公里的更高分辨率图像将多个更粗糙的图像(0.25 度)重新采样到更高分辨率(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)

`

【问题讨论】:

    标签: r resampling


    【解决方案1】:

    如果带有循环的函数不起作用,请尝试在第一种情况下不使用循环运行它。您收到的错误消息非常清楚。该文件不存在,因为您只有文件名,但没有路径名,并且您更改了目录。

    您可以这样做:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 2021-05-16
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 2022-06-10
      相关资源
      最近更新 更多