nc文件转tif——以CRU TS数据为例
CRU TS是英国东安格利亚大学的气象数据集CRU,我这里下载的文件是cru_ts4.07.2021.2022.pre.dat.nc,是全球2021-2022按月划分的降雨量数据。
- python处理nc文件并绘制
import netCDF4 as nc
import matplotlib.pyplot as plt
import numpy as np
nc_file = nc.Dataset('cru_ts4.07.2021.2022.pre.dat.nc', 'r')
# print(nc_file.variables.keys()) # dict_keys(['lon', 'lat', 'time', 'pre', 'stn'])
latitude = nc_file.variables['lat'][:] # 一维数组,0.5°为间隔
longitude = nc_file.variables['lon'][:] # 一维数组,0.5°为间隔
[X, Y] = np.meshgrid(longitude, latitude)
time = nc_file.variables['time'][:] # 一维数组,24个月,2021-2022年
precipitation = nc_file.variables['pre'] # 三维数组,(24, 360, 720)
station = nc_file.variables['stn'] # 对每个基准做出贡献的台站数目,三维数组,(24, 360, 720)
plt.contourf(X, Y, precipitation[0, :, :]) # 0代表2021.1月
plt.colorbar(label='pre', orientation='horizontal')
plt.show()
nc_file.close()
结果展示:
2、nc文件转tif
由于nc文件是按月划分的,所以我想将nc文件拆分为按月划分的tif文件。
下面是用R语言进行拆分转化的,四行代码。
library(raster)
library(ncdf4)
pre<-brick("cru_ts4.07.2021.2022.pre.dat.nc",varname="pre")
writeRaster(pre,filename = pre@data@names,bylayer=T,format="GTiff")
就可得到下面的tif文件:
QGIS展示,以2021.1月为例,对图层样式调节就会得到下图的效果,赤道部分、非洲南部、南美洲降雨较多;我国西北、非洲北部、澳洲西部降雨偏少:
降雨量值位于0-1128之间
多个tif文件合并为一个tif
现在想将2021年每月的tif合并为全年的tif文件,利用R实现,代码如下:
library(raster)
library(sp)
# 定义合并函数
merge_images <- function(monthly_images, output_filename) {
# 读取第一张图像,作为基准图像
base_image <- raster(monthly_images[1])
# 创建一个空的图像对象,与基准图像相同
result_image <- base_image
# 合并图像
for (img_path in monthly_images[-1]) {
img <- raster(img_path)
result_image <- overlay(result_image, img, fun=sum)
}
# 保存合并后的图像
writeRaster(result_image, output_filename, format="GTiff")
}
monthly_images <- c('X2021.01.tif', 'X2021.02.tif', 'X2021.03.tif','X2021.04.tif','X2021.05.tif','X2021.06.tif','X2021.07.tif','X2021.08.tif','X2021.09.tif','X2021.10.tif','X2021.11.tif','X2021.12.tif') # 每个月tif文件
output_filename <- '2021.tif' # 输出的tif
merge_images(monthly_images, output_filename)
然后用QGIS将2021.tif文件打开,如下:
全年降雨量值位于0-9251之间,我国东南部、赤道部分降雨多,我国西北部、非洲北部、澳洲西部等地区降雨量少。