一个文件夹下有多个nc文件
将所有nc文件批量处理并以nc文件夹命名,每个文件夹存放nc文件中所有时间步的tif文件
使用matlab进行操作代码
% 定义NetCDF文件路径
ncDir = 'E:\Data\newEnvironment\rain';
% 获取目录中所有的.nc文件
ncFiles = dir(fullfile(ncDir, '*.nc'));
% 循环处理每个文件
for k = 1:length(ncFiles)
ncFilename = fullfile(ncDir, ncFiles(k).name);
%去除.nc
newncname = ncFiles(k).name(1:end-3);
disp(newncname)
% 定义输出TIF文件的目录
tifDir = 'E:\Data\newEnvironment\rainDay';
%拼接输出TIF文件夹
newtifDir=fullfile(tifDir, newncname);
% 检查输出目录是否存在,不存在则创建
if ~exist(newtifDir, 'dir')
mkdir(newtifDir);
end
% 读取经度和纬度数据
lon = ncread(ncFilename, 'longitude');
lat = ncread(ncFilename, 'latitude');
% 创建地理参考对象
R = georasterref('RasterSize', [length(lat), length(lon)], ...
'LatitudeLimits', [min(lat), max(lat)], ...
'LongitudeLimits', [min(lon), max(lon)], ...
'ColumnsStartFrom', 'north', ...
'RowsStartFrom', 'west');
% 获取时间长度
timeLen = ncread(ncFilename, 'time');
% 遍历每个时间步
for z = 1:length(timeLen)
% 读取数据
data = ncread(ncFilename, 'tp', [1, 1, z], [length(lon), length(lat), 1]);
% 替换缺失值
data(data == -32768) = NaN;
%
% 调整数据矩阵以匹配地理参考对象
data = permute(single(data), [2, 1]);
% 定义输出的TIFF文件名
ncTimeName=str2num(newncname)
tifFilename = fullfile(newtifDir, sprintf('%d_%02d.tif', ncTimeName, z));
% 保存为TIFF文件
geotiffwrite(tifFilename, data, R, 'CoordRefSysCode', 'EPSG:4326');
fprintf('已转换并保存文件:%s\n', tifFilename);
end
end
fprintf('所有时间步的数据已成功转换为TIFF格式。\n');
原代码与灵感起源于BILBIL某播主,但找不到链接了,没挂上。不好意思