使用R将nc文件转换为asc文件或者tif文件

使用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

相关推荐
临床数据科学和人工智能兴趣组11 小时前
RStudio的Console(控制台)是一个非常重要的组件
人工智能·机器学习·数据分析·r语言·r语言-4.2.1
智购科技无人售货机工厂2 天前
自动售货机硬件选型避坑:单片机 / 树莓派 / ESP32 怎么选?~YH
人工智能·单片机·嵌入式硬件·r语言·swift·perl·symfony
青春不败 177-3266-05204 天前
基于“R语言+遥感“水环境综合评价方法实践技术应用
r语言·水环境·水文模型·水遥感·水温模拟
临床数据科学和人工智能兴趣组5 天前
R语言因其强大的统计功能、灵活的编程环境、活跃的社区支持和强大的R扩展包,迅速成为统计学和数据科学领域的首选工具之一
开发语言·数据分析·r语言·r语言-4.2.1
IDIOSF10 天前
R语言 下载安装教程(附安装包)R语言4.5安装步骤(保姆级)
开发语言·其他·r语言
喜欢就别13 天前
平均风险:Rényi DP 和零集中 DP
开发语言·r语言
Bioinfo Guy16 天前
高分Panel复现系列|甲基化分型可视化:怎么画这样的ComplexHeatmap分块热图
r语言·生物信息学·生信可视化
临床数据科学和人工智能兴趣组20 天前
R读数据总出错?一份文件读取全指南
r语言·r语言-4.2.1
GZ同学1 个月前
单双变量Ripley’s K函数 R 语言实现
开发语言·r语言
popcorn_min1 个月前
共享单车需求预测:时间特征工程 + 随机森林,R² 达到 0.931
随机森林·r语言·kotlin