You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB中合并多份GLDAS月度NETCDF土壤湿度数据为单文件

MATLAB批量提取GLDAS月度NetCDF土壤湿度并拼接时间序列

GLDAS NOAH025_M v2.1月度产品的单文件包含单月所有陆面变量,土壤湿度按4个观测层存储,对应变量名分别为SoilMoi0_10cm_inst(0-10cm层)、SoilMoi10_40cm_inst(10-40cm层)、SoilMoi40_100cm_inst(40-100cm层)、SoilMoi100_200cm_inst(100-200cm层),可按需选择提取目标。

操作流程

  • 将所有下载好的单月nc4文件统一放到单独的文件夹中,不要混入其他格式或其他数据集的文件。
  • 读取首个文件的经纬度、变量维度信息,提前预分配存储内存,避免循环中动态扩容降低运行效率。
  • 循环遍历所有文件,提取目标土壤湿度变量,同时解析文件名中的年月信息作为时间维度标记。
  • 按时间维度校验排序后,将合并好的三维数据集(经度×纬度×月份)存储为本地文件。

可直接复用的MATLAB代码

%% 参数配置
% 替换为本地存放GLDAS月度nc4文件的文件夹路径
input_dir = 'E:/Dataset/GLDAS/NOAH025_M/monthly/';
% 按需调整要提取的土壤湿度层变量
target_sm_vars = {'SoilMoi0_10cm_inst','SoilMoi10_40cm_inst','SoilMoi40_100cm_inst','SoilMoi100_200cm_inst'};
% 合并后结果的保存路径
output_file = 'E:/Dataset/GLDAS/GLDAS_monthly_soil_moisture_series.mat';

%% 批量获取文件列表
nc_files = dir(fullfile(input_dir, '*.nc4'));
file_count = length(nc_files);
if file_count < 1
    error('指定路径下未找到nc4格式文件,请检查输入路径是否正确');
end

%% 初始化数据集
% 读取首个文件的空间基准信息
ref_file = fullfile(nc_files(1).folder, nc_files(1).name);
lon = ncread(ref_file, 'lon');
lat = ncread(ref_file, 'lat');
n_lon = length(lon);
n_lat = length(lat);
% 预分配存储数组
sm_dataset = struct();
for i = 1:length(target_sm_vars)
    var = target_sm_vars{i};
    sm_dataset.(var) = nan(n_lon, n_lat, file_count);
end
time_axis = NaT(file_count, 1);

%% 循环读取并拼接
for fi = 1:file_count
    disp(['正在处理:' nc_files(fi).name ' (' num2str(fi) '/' num2str(file_count) ')']);
    curr_file = fullfile(nc_files(fi).folder, nc_files(fi).name);
    % 从文件名解析年月,文件名固定格式为GLDAS_NOAH025_M.AYYYYMM.021.nc4
    yr = str2double(nc_files(fi).name(19:22));
    mon = str2double(nc_files(fi).name(23:24));
    time_axis(fi) = datetime(yr, mon, 1);
    % 读取目标变量
    for vi = 1:length(target_sm_vars)
        var = target_sm_vars{vi};
        sm_dataset.(var)(:,:,fi) = ncread(curr_file, var);
    end
end

%% 按时间排序(避免文件命名乱序导致时间序列错误)
[time_axis, sort_idx] = sort(time_axis);
for i = 1:length(target_sm_vars)
    var = target_sm_vars{i};
    sm_dataset.(var) = sm_dataset.(var)(:,:,sort_idx);
end

%% 保存结果
save(output_file, 'sm_dataset', 'lon', 'lat', 'time_axis', 'target_sm_vars', '-v7.3');
disp(['合并完成,结果已保存至:' output_file]);

注意事项

  • 首次运行前可先用ncdisp(参考文件路径)命令查看nc文件内的实际变量名、填充值、单位信息,和代码配置做匹配,GLDAS土壤湿度默认单位为kg/m²,除以水的密度1000kg/m³即可转换为常用的体积含水量单位m³/m³。
  • 如果需要获取整层土壤柱总含水量,可按各层厚度加权求和:0-10cm层厚0.1m、10-40cm层厚0.3m、40-100cm层厚0.6m、100-200cm层厚1m。
  • 若数据存在缺测,可结合文件自带的_FillValue属性做掩膜处理,避免缺测值参与后续计算。

内容的提问来源于stack exchange,提问作者pragati Kharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 07:39:29