从多个文件夹中读取 shapefile
Posted
技术标签:
【中文标题】从多个文件夹中读取 shapefile【英文标题】:Read shapefiles from many folders 【发布时间】:2021-11-26 03:27:35 【问题描述】:我的 shapefile 分布在许多文件夹中,我想将它们拉出并运行一个脚本以相同的方式处理每个文件夹。所有 .shp 文件都具有相同的名称,我需要将文件夹名称作为 id 出现(尚未尝试该部分)。我被困在第一步,但我觉得我很接近了。
# Read folder names to get list of folders
folders <- list.dirs(path = "./locs", full.names = TRUE, recursive = TRUE)
# Make function that reads inside a folder same way for all files
all_files <- function(folder)
readOGR(dsn = folder, layer = "SAMENAME.shp", verbose = FALSE)
# Map the function to each folder listed in "folders".
try <- map(folders, all_files)
很抱歉,我对此没有一个代表,如果我能在这里获得一些牵引力,也许我明天可以建造一个。
【问题讨论】:
【参考方案1】:我认为你很接近。我认为你只需要三个修复1)使用paste0()
函数在“dsn”参数中组合文件夹名称和shapefile名称,2)在你的all_files()
函数中添加一个return()
调用和3)从map()
到 do.call()
或 lapply()
。尝试像这样调整您的代码:
# Read folder names to get list of folders
folders <- list.dirs(path = "./locs", full.names = TRUE, recursive = TRUE)
# Make function that reads inside a folder same way for all files
all_files <- function(folder)
out<-readOGR(dsn = paste0(folder, "SAMENAME.shp", sep+"/), layer = "SAMENAME.shp", verbose = FALSE)
return(out)
# Map the function to each folder listed in "folders".
try <- lapply(folders, all_files) #lapply() approach
try2 <- do.call(all_files, folders) #do.call() approach
如果这不起作用,您可以考虑使用 sf::read_st()
函数读取 shapefile
【讨论】:
以上是关于从多个文件夹中读取 shapefile的主要内容,如果未能解决你的问题,请参考以下文章