自动化焦点功能,以便可以应用于文件夹中的每个光栅

问题描述 投票:0回答:0

在 R 中,我使用焦点函数来模糊一些栅格。到目前为止,我正在单独读取每个栅格,我应用焦点(请参阅下面的代码)然后我移动到下一个栅格等。这个分别读取和应用函数到每个栅格的过程非常耗时,因为我有几个许多研究地点的栅格。

我想做的是读取位于文件夹中的栅格,并以自动方式应用焦点功能。也就是说,该函数应该读取文件夹的每个栅格,然后将准确地应用我正在为每个栅格使用的代码。这样,我唯一需要设置的参数就是工作目录。

这就是我目前所做的:

library(terra)

wd = "C:/Users/nikos/OneDrive/Desktop/psf_paris2/"

# read the rasters
pop = rast(paste0(wd, "pop.tif"))
tirs = rast(paste0(wd, "tirs.tif"))
agbh = rast(paste0(wd, "agbh.tif"))
ndvi = rast(paste0(wd, "ndvi.tif"))
poi = rast(paste0(wd, "poi.tif"))
road = rast(paste0(wd, "road.tif"))
red = rast(paste0(wd, "red.tif"))
blue = rast(paste0(wd, "blue.tif"))
nir = rast(paste0(wd, "nir.tif"))
swir = rast(paste0(wd, "swir.tif"))
built = rast(paste0(wd, "built.tif"))
imperv_dens = rast(paste0(wd, "imperv_dens.tif"))
tcd = rast(paste0(wd, "tcd.tif"))

v <- vect(paste0(wd, "lc.shp"))

# focal for every raster
# raster named pop
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(pop, i * 400, "Gauss")
  r_gf <- focal(pop, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/pop", 
                                  stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named tirs
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(tirs, i * 400, "Gauss")
  r_gf <- focal(tirs, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/tirs", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named agbh
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(agbh, i * 400, "Gauss")
  r_gf <- focal(agbh, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/agbh", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named ndvi
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(ndvi, i * 400, "Gauss")
  r_gf <- focal(ndvi, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/ndvi", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named road
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(road, i * 400, "Gauss")
  r_gf <- focal(road, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/road", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named poi
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(poi, i * 400, "Gauss")
  r_gf <- focal(poi, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/poi", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named red
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(red, i * 400, "Gauss")
  r_gf <- focal(red, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/red", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named blue
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(blue, i * 400, "Gauss")
  r_gf <- focal(blue, w = gf, na.rm = TRUE)
  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/blue", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named nir
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(nir, i * 400, "Gauss")
  r_gf <- focal(nir, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/nir", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named swir
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(swir, i * 400, "Gauss")
  r_gf <- focal(swir, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/swir", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named built
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(built, i * 400, "Gauss")
  r_gf <- focal(built, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/built", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named imperv_dens
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(imperv_dens, i * 400, "Gauss")
  r_gf <- focal(imperv_dens, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/imperv_dens", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
}

# raster named tcd
for (i in seq(from = 0.2, to = 0.8, by = 0.2)) {
  
  print(i)
  
  gf <- focalMat(tcd, i * 400, "Gauss")
  r_gf <- focal(tcd, w = gf, na.rm = TRUE)

  r_gf = aggregate(r_gf, fact = 4, fun = "mean", cores = 8)
  
  r_gf <- crop(r_gf, ext(v))
  r_gf <- mask(r_gf, v)
  
  stringedi = gsub("\\.", "", toString(format(i, nsmall = 2)))
  
  writeRaster(r_gf, 
              paste0("C:/Users/nikos/OneDrive/Desktop/psf_paris2/tcd", 
                     stringedi, ".tif"), 
              overwrite=TRUE)
} 

代码有点大,但我想强调一下我的观点。对于here,您可以下载数据。

r automation raster terra
© www.soinside.com 2019 - 2024. All rights reserved.