使用R将nc文件转换为asc文件或者tif文件
文章目录
前言
本文主要记录一下如何将环境数据的nc文件转换为asc文件、tif文件,分享所用R代码。
一、nc文件转换为asc文件代码
使用R语言代码将nc文件批量转换为asc文件
该转换算是对于生态位模拟(ENM)分析笔记的一个步骤补充,具体可详见该文章。
r
#批量转换nc文件为asc文件
library(ncdf4)
library(raster)
library(progress)
input_dir <- "D:/oceandata/48_nc" #nc文件存放目录
output_dir <- "D:/oceandata/48_asc" # 修改输出目录名
dir.create(output_dir, showWarnings = FALSE, recursive = TRUE)
nc_files <- list.files(path = input_dir,
pattern = "\\.nc$",
full.names = TRUE)
pb <- progress_bar$new(
format = " 转换进度 [:bar] :percent | 剩余: :eta",
total = length(nc_files),
clear = FALSE,
width = 60
)
process_nc_file <- function(nc_file) {
tryCatch({
nc <- nc_open(nc_file)
available_vars <- names(nc$var)
first_var <- available_vars[1]
nc_close(nc)
tmpbr <- brick(nc_file, varname = first_var)
base_name <- tools::file_path_sans_ext(basename(nc_file))
# 修改为ASC输出格式
output_file <- file.path(output_dir, paste0(base_name, ".asc"))
writeRaster(tmpbr,
filename = output_file,
bylayer = TRUE,
format = "ascii", # 关键修改点
NAflag = -9999) # 设置无效值标识
pb$tick()
message(paste("\n成功转换:", basename(nc_file)))
}, error = function(e) {
pb$tick()
message(paste("\n处理失败:", basename(nc_file), "错误:", e$message))
})
}
cat("开始批量转换NC文件为ASC...\n")
lapply(nc_files, process_nc_file)
cat("\n批量转换完成!共处理", length(nc_files), "个文件\n")

二、nc文件转换为tif文件代码
使用R语言将nc文件批量转换为tif文件
r
#library(ncdf4)
#nc <- nc_open("D:/oceandata/48_nc/Air_temperature_[range].nc")
#available_vars <- names(nc$var) # 获取所有变量名
#first_var <- available_vars[1] # 提取第一个变量名
#nc_close(nc)
#library(raster)
#tmpbr <- brick("D:/oceandata/48_nc/Air_temperature_[range].nc",
# varname = first_var)
#print(paste("已选择变量:", first_var))
#print("数据维度信息:")
#print(dim(tmpbr))
## 显式指定输出目录
#output_dir <- "D:/output_folder"
#dir.create(output_dir, showWarnings = FALSE)
#writeRaster(tmpbr,
# filename = file.path(output_dir, paste0(names(tmpbr), ".tif")),
# bylayer = TRUE,
# format = "GTiff")
# 批量处理
library(ncdf4)
library(raster)
library(progress)
input_dir <- "D:/oceandata/48_nc"
output_dir <- "D:/oceandata/48_tif"
dir.create(output_dir, showWarnings = FALSE, recursive = TRUE)
nc_files <- list.files(path = input_dir,
pattern = "\\.nc$",
full.names = TRUE)
# 创建进度条
pb <- progress_bar$new(
format = " 转换进度 [:bar] :percent | 剩余: :eta",
total = length(nc_files),
clear = FALSE,
width = 60
)
process_nc_file <- function(nc_file) {
tryCatch({
nc <- nc_open(nc_file)
available_vars <- names(nc$var)
first_var <- available_vars[1]
nc_close(nc)
tmpbr <- brick(nc_file, varname = first_var)
base_name <- tools::file_path_sans_ext(basename(nc_file))
output_file <- file.path(output_dir, paste0(base_name, ".tif"))
writeRaster(tmpbr,
filename = output_file,
bylayer = TRUE,
format = "GTiff")
pb$tick() # 更新进度条
message(paste("\n成功转换:", basename(nc_file)))
}, error = function(e) {
pb$tick()
message(paste("\n处理失败:", basename(nc_file), "错误:", e$message))
})
}
cat("开始批量转换NC文件...\n")
lapply(nc_files, process_nc_file)
cat("\n批量转换完成!共处理", length(nc_files), "个文件\n")
总结
---2025-8-6