Я пытаюсь манипулировать несколькими растровыми файлами и выполнять над ними различные ГИС-операции (например, создание mosai c, переклассификация, кадрирование и т. Д. c.). Я ищу эффективный способ сделать это с точки зрения кодирования, времени выполнения и веса конечного вывода на жестком диске.
Рассмотрим ситуацию, когда я хочу создать серию мозаик, переклассифицировать каждую мозаику c и сохранить окончательные результаты в виде .vrt
файлов.
У меня есть папка dem
, состоящая из подпапок, каждая из которых содержит набор растровых плиток на данном сайте. Пока что единственный способ сделать это - открыть растры, создать файл .vrt
, открыть только что созданный .vrt
, переклассифицировать его и сохранить результат как .tif
изображение.
library(tidyverse)
library(raster)
library(sf)
# merging dem
dem_ls <- list.files("GIS/Elev/dem", full.names = TRUE)
for (i in dem_ls) {
outfile <- i %>%
basename() %>%
str_replace_all(" ", "_")
i %>%
list.files(
pattern = "\\.tif$",
full.names = TRUE
) %>%
gdal_utils(
util = "buildvrt",
source = .,
destination = str_c("GIS/Elev/vrt/", outfile, ".vrt")
)
}
# reclassifying dem
vrt_ls <- list.files("GIS/Elev/vrt", full.names = TRUE)
for (i in vrt_ls) {
outfile <- i %>%
basename() %>%
str_split("\\.") %>%
pluck(1, 1)
r <- raster(i)
NAvalue(r) <- -1
r <- setMinMax(r)
k <- 100
lv <- minValue(r) %>% floor_nearest(100) # custom function to round down to the nearest given value
hv <- maxValue(r) %>% floor_nearest(100)
lower_v <- seq(lv, hv, k)
higher_v <- seq(lv + k, hv + k, k)
tibble(
lower = lower_v,
higher = higher_v,
new_value = lower_v
) %>%
reclassify(r, ., right = FALSE) %>%
writeRaster(
filename = str_c("GIS/Elev/Mosaic/", outfile, "_reclass.tif"),
drivername = "GTiff",
type = "Float32"
)
}
Есть ли более эффективный способ сделать это, например, использовать временные файлы? Я не нахожу много информации о временных файлах и как их использовать.
В идеале я хотел бы сделать один l oop, использовать временные файлы в течение всего процесса и сохранять только конечный результат как .vrt
.
Что-то вроде:
- открыть набор плиток
- создать mosai c во временном файле
- реклассифицировать новые mosai c (+ другие дополнительные операции)
- сохранить окончательный вывод как
.vrt
файл
Возможно ли это?