簡體   English   中英

如何在R中按文件夾循環切割帶有shapefile對象的柵格?

[英]How to cut rasters with a shapefile object in loop by folder in R?

怎么樣伙計們。 你好嗎?

我很高興向你致意。

我正在嘗試從 shapefile 對象中剪切柵格 (tif)

我的數據結構如下:

(種子文件夾)

物種 1 <- model1.tif、model2.tif、model3.tif、cut1.shp

物種 2 <- model1.tif、model2.tif、model3.tif、cut1.shp

物種 3 <- model1.tif、model2.tif、model3.tif、cut1.shp

我有來自不同物種的不同文件夾。 在每個文件夾中,我都有不同的 tiff 模型和不同的 shapefile。 我需要的是一個腳本,該腳本使用同一文件夾中的 shapefile 文件剪切該物種文件夾內的所有柵格。 然后去下一個文件夾做同樣的事情。 我不需要剪切不在同一文件夾中的文件。 我正在嘗試使用下一個代碼但沒有成功。 我是 R 中的一個相對較新的用戶,因此我將不勝感激。 謝謝你們。 祝你今天過得愉快。

setwd ("H:/Tesis_maestria/1_Eliposides/1_Cut_models")
library(purrr)
library(kuenm)
library(raster)
library(maptools)
library(rgeos)
library(rgdal)
rm(list=ls())

path_general <- "H:/Tesis_maestria/1_Eliposides/1_Cut_models"


dirs_especies_path <- list.dirs(full.names = T,
                                recursive = F)

datum <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")

x=1
y=1
resultados_all <- seq_along(dirs_especies_path) %>% purrr::map_df(function(x){
   sp_mods <- list.files(dirs_especies_path[x], pattern = ".tif", full.names = TRUE)
   M <-list.files(dirs_especies_path[x], pattern=".shp", full.names = TRUE)
   r1 <- raster(sp_mods[y])
   cut_all <- seq_along(sp_mods) %>%  purrr::map_df(function(y){
   cor <-crop(r1,M)
   mas<-mask(cor,M)
   return(cut_all)
    })
     nwdf <- data.frame(cut_all,
                     sp_name=dirs_especies_names[x])
                         setwd("H:/Tesis_maestria/1_Eliposides/1_Cut_models/cut")
    writeRaster(cut_all,filename=paste(M[[i]]),bylayer=T,suffix=names(stac),format="GTiff")
  return(nwdf)
})
print(resultados_all)

經過一天的工作,我可以成功運行此代碼。 如下。 我希望這可以幫助有同樣問題的人。 問候。

rm(list=ls())
library(rgdal)
library(raster)
library(maptools)
library(rgeos)
library(purrr)
rm(list=ls())

setwd("H:/Tesis_maestria/1_Eliposides/1_Cut_models1")
datum <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")

path_general <- "H:/Tesis_maestria/1_Eliposides/1_Cut_models1"

dirs_especies_path <- list.dirs(full.names = T,
                                recursive = F)
                                
dirs_especies_names <- list.dirs(full.names = F,
                                 recursive = F)
                                 
#paste(path_general,dirs_especies_names,sep="")

##Presente##
for (i in 1:length(dirs_especies_path)){
    M <- list.files(dirs_especies_path[i],pattern = "csv.shp$",full.names = TRUE)
    mods <- list.files(dirs_especies_path[i],pattern = ".tif$",full.names = TRUE)
    stack <- raster::stack(mods)
    Ms <- shapefile(M)
    Ms@proj4string <- datum
    cor <- crop(stack,Ms)
    mas <- mask(cor,Ms)
    writeRaster(mas,filename=paste(M),bylayer=T,suffix=names(stack),format="GTiff")
    next}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM