有时候要提取tif格式数据中的气象数据,但从气象网站上下载的却是NC格式的文件。这就需要我们将NC格式的文件转换成TIF格式的文件。
以下是用R语言实现NC转TIF的过程:
#NetCDF(NC)文件包含12个时间步长或12个不同的变量
#生成12个单独的TIF文件
# 安装和加载必要的包
install.packages("ncdf4")
install.packages("sf")
install.packages("stars")
library(ncdf4)
library(sf)
library(stars)
# 设置NC文件路径
nc_path <- "E:/R文件/nc文件转tif/tmp_2022.nc"
# 打开NetCDF文件
nc_data <- nc_open(nc_path)
# 查看变量名
variable_names <- names(nc_data$var)
print(variable_names)
# 读取变量(假设你有一个名为"tmp"的变量)
variable_name <- "tmp"
nc_var <- ncvar_get(nc_data, variable_name)
# 获取维度信息
lon <- ncvar_get(nc_data, "lon")
lat <- ncvar_get(nc_data, "lat")
time <- ncvar_get(nc_data, "time")
# 关闭NetCDF文件
nc_close(nc_data)
# 循环处理每个时间步长
for (i in 1:length(time)) {
# 提取当前时间步长的数据
current_layer <- nc_var[,,i]
# 创建一个数据框,包含经度、纬度和变量值
df <- expand.grid(lon = lon, lat = lat)
df$value <- as.vector(current_layer)
# 将数据框转换为sf对象
sf_obj <- st_as_sf(df, coords = c("lon", "lat"), crs = 4326)
# 将sf对象转换为stars对象
stars_obj <- st_rasterize(sf_obj)
# 设置输出文件路径
output_path <- paste0("E:/R文件/nc文件转tif/tmp_2022_", i, ".tif")
# 保存为GeoTIFF文件
write_stars(stars_obj, output_path)
}
结果如下: