Как написать цикл создания обрезанного растра для каждого идентификатора шейп-файла с растровой базой? - PullRequest
0 голосов
/ 17 октября 2018

Я все еще новичок в R и не знаю, как создать цикл для моего рабочего процесса, чтобы сделать его более эффективным.

У меня есть цифровая модель рельефа (растр Barrow_5m.tif), шейп-файлдля озер и буфера с 10 идентификаторами в строке таблицы каждый.В приведенном ниже сценарии я создал новый растровый файл для всех значений озера и файл формы буфера с данными из растра DEM.Это прекрасно работает.

setwd("...")

Barrow_5m <- raster("Barrow_5m.tif")

Barrow_DTLB <- st_read("Barrow_DTLB.shp")

Barrow_DTLB_Buffer <- st_read("Barrow_DTLB_BufferOUT.shp")

Barrow_lake <- crop(Barrow_5m, extent(Barrow_DTLB))

raster_lake <- rasterize(Barrow_DTLB, Barrow_lake, mask = TRUE)

Barrow_buffer <- crop(Barrow_2m, extent(Barrow_DTLB_Buffer))

raster_buffer <- rasterize(Barrow_DTLB_Buffer, Barrow_buffer, mask = TRUE)

writeRaster(raster_lake, "raster_lake.tif")

writeRaster(raster_buffer, "raster_buffer.tif")

Но теперь я хочу иметь растровый файл для каждого идентификатора озера и буферный шейп-файл отдельно, поэтому файлы 2x10.Я думал, что лучше написать цикл для этого, но моих навыков пока недостаточно для этого.Также другие вопросы не принесли решения до сих пор.Я попытался помочь мне с this .

В качестве альтернативы я мог бы использовать свой конечный продукт TIF из приведенного выше сценария и отменить это в файлах для каждого идентификатора.

Я хочунаписать цикл и не делать это вручную для всех идентификаторов шейп-файлов, потому что после этого я собираюсь сделать то же самое с еще большим шейп-файлом с большим количеством значений.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Я нашел решение сейчас, извлекая данные по идентификатору.Он создает большой список с 11 элементами и всеми значениями каждого идентификатора, что достаточно для моей дальнейшей работы.Вы также можете напрямую создать среднее, максимальное, минимальное и т. Д. Значения каждого элемента (то есть каждого идентификатора).

k <- Barrow_DTLB$ID #k= number of rows
LakesA <- extract(raster_lakeA, Barrow_DTLB[k, ])
LakesA_mean <- extract(raster_lakeA, Barrow_DTLB[k, ], fun=mean)

Может быть, это решение также полезно для немногих, кто уже просматривал вопрос.

0 голосов
/ 19 октября 2018

Я думаю, что это должно работать:

for (i in unique(raster_lake)){
  r <- raster_lake
  r[!(values(r) == i)] <- NA
  r <- trim(r) 
  writeRaster(r, paste0("raster_lake_", i, ".tif"))
}
...