R脚本-环境数据处理:利用R批量对环境数据眼膜提取转ASC
R脚本-环境数据处理:利用R批量对环境数据眼膜提取转ASC
# 加载必要的包
library(raster)
library(sf)# 设置工作目录(需要掩模的栅格数据文件夹路径-注意是文件夹路径)
setwd("C:/Users/西安科硕信息/Desktop/BCC-CSM2-MR-校准数据")# 读取shp格式的地图数据
shp_path <- "C:/Users/qyf66/Desktop/地图/China.shp"
shp_data <- st_read(shp_path)# 确保shp数据的坐标系是WGS1984
if (!st_crs(shp_data)$epsg == 4326) {shp_data <- st_transform(shp_data, crs = 4326)cat("已将shp数据转换为WGS1984坐标系\n")
}# 获取所有文件夹
folders <- list.dirs(full.names = FALSE, recursive = FALSE)# 创建输出根文件夹(设置数据输出的路径-结果文件夹会创建在该路径下)
output_root <- "C:/Users/qyf66/Desktop/1103446030"
dir.create(output_root, showWarnings = FALSE)# 遍历每个文件夹
for (folder in folders) {cat("处理文件夹:", folder, "\n")# 获取文件夹的完整路径folder_path <- file.path(getwd(), folder)# 获取文件夹中的所有tif文件tif_files <- list.files(folder_path, pattern = "\\.tif$", full.names = TRUE)if (length(tif_files) == 0) {cat(" 文件夹中没有tif文件,跳过\n")next}# 创建输出文件夹output_folder <- file.path(output_root, folder)dir.create(output_folder, showWarnings = FALSE)cat(" 创建输出文件夹:", output_folder, "\n")# 遍历每个tif文件for (tif_file in tif_files) {cat(" 处理文件:", basename(tif_file), "\n")# 读取tif文件tryCatch({raster_data <- raster(tif_file)# 确保栅格数据的坐标系是WGS1984if (!as.character(crs(raster_data)) == "+proj=longlat +datum=WGS84 +no_defs") {cat(" 转换栅格数据坐标系为WGS1984\n")raster_data <- projectRaster(raster_data, crs = "+proj=longlat +datum=WGS84 +no_defs")}# 进行掩膜提取cat(" 执行掩膜提取...\n")masked_raster <- mask(raster_data, shp_data)# 生成输出文件名(不含扩展名)base_name <- tools::file_path_sans_ext(basename(tif_file))# 保存为TIF格式output_tif <- file.path(output_folder, paste0(base_name, ".tif"))writeRaster(masked_raster, output_tif, format = "GTiff", overwrite = TRUE)cat(" TIF结果已保存到:", output_tif, "\n")# 保存为ASC格式output_asc <- file.path(output_folder, paste0(base_name, ".asc"))writeRaster(masked_raster, output_asc, format = "ascii", overwrite = TRUE)cat(" ASC结果已保存到:", output_asc, "\n")}, error = function(e) {cat(" 错误:", e$message, "\n")})}
}
资料来源:http://lucky-boy.ys168.com/
