> 技术文档 > MAC V2.0/V3.0 气溶胶参数信息数据下载版本

MAC V2.0/V3.0 气溶胶参数信息数据下载版本


仅用于记录,有一定的容错率

一、The second version of the Max-Planck Aerosol climatology (MACv2):第二版马克斯-普朗克气溶胶气候学

马克斯・普朗克研究所的气溶胶气候学(MAC)通过每月全球(1×1 度)的气溶胶光学和微物理特性场来定义。其核心聚焦于中可见光谱区(550 纳米)大气柱气溶胶的光学特性,这些特性的确定依托过去二十年可靠的地面观测数据。然而,鉴于观测数据在空间分布上较为稀疏,为构建时空完整的场,便引入了全球 “自下而上” 建模所提供的空间背景信息 。

在 MAC 的构建过程中,有一个关键步骤为 “合并过程”。在此过程里,会依据地面太阳光度计所统计的月数据,对全球建模生成的月度地图予以调整。所采用的光度测定数据来源可靠,涵盖了 AERONET 网络中 CIMEL 仪器经质量保证的直接太阳衰减和天空辐射样本(Holben 等人,1998,2001 ),以及 MAN 海洋气溶胶网络里手持式 MICROTOPS 仪器的太阳衰减样本(Smirnov 等人,2009,2011) 。

相较于初始的 MACv1 版本(Kinne 等,2013) ,MACv2 实现了多项重大升级 :
(1) MACv2 纳入了更新的 AERONET 数据,因此中心参考年份从 2000 年移至 2005 年;
(2) 现在考虑了海洋上空的 MAN 数据;
(3) 采用了新的区域数据合并程序;
(4) 仅合并绝对属性(例如,使用 AAOD 而非 SSA);
(5) 使用预定义的气溶胶类型来分配局部成分混合物,以实现更一致的光谱相关性;
(6) 引入了新的(更小的)人为成分。

——以上机翻内容来自文章(有容错率,仅参考或者阅读文章总结):The MACv2 aerosol climatology(https://doi.org/10.1080/16000889.2019.1623639)

二、MAC V2.0/V3.0 数据下载地址

https://www.mmnt.net/db/0/0/ftp-projects.zmaw.de/aerocom/climatology

**采用FileZilla下载,主要用于下载气溶胶参数信息,以及不同类型气溶胶的参数信息:
**
主机:ftp-projects.zmaw.de

ftp://ftp-projects.zmaw.de/aerocom/climatology/

MAC V2.0/V3.0 气溶胶参数信息数据下载版本

主要下载信息请查看每一个文件内的readme-示例:README-2018-550nm

MACv2 climatology (2018)1x1 global, monthlyAOD/SSA/ASY at 550nm--------------------gt_a_00550nm.nc anthropogenic (today - \'2005\')gt_c_00550nm.nc coarse (no annual changes)gt_f_00550nm.nc fine-mode (today - \'2005\')gt_n_00550nm.nc natural (no annual changes)gt_p_00550nm.nc pre-industrial (\'1850\' lamarque 2010)gt_t_00550nm.nc total (today - \'2005\')component AOD at 550nm----------------------gt_aodBC_550.nc soot (BC)gt_aodCA_550.nc carbon (BC+OC)gt_aodCO_550.nc coarse-mode (DU+SS)gt_aodDU_550.nc mineral dust (DU)gt_aodFI_550.nc fine-mode (SU+OC+BC)gt_aodOB_550.nc OC shelled BCgt_aodOC_550.nc organic matter (OC)gt_aodSS_550.nc sea-salt (SS)gt_aodSU_550.nc non-absorbing fine-mode (SU)gt_aodTO_550.nc total (DU+SS+SU+OC+BC) AOD at 550, fraction by size-mode---------------------------------gt_cf_0550nm.nc coarse-mode fraction (r>500nm)gt_ff_0550nm.nc fine-mode fraction (r<500nm)AAOD at 550nm (absorption AOD)------------------------------gt_ca_0550nm.nc coarse-mode AAODgt_fa_0550nm.nc fine-mode AAODgt_ta_0550nm.nc total AAODcomponent mass --------------gt_masBC_550.nc as for comp.AODgt_masCA_550.nc gt_masCO_550.ncgt_masDU_550.ncgt_masFI_550.ncgt_masOB_550.ncgt_masOC_550.ncgt_masSS_550.ncgt_masSU_550.ncgt_masTO_550.ncmass extinction efficiency--------------------------gt_meeBC_550.nc as for comp.AODgt_meeCA_550.ncgt_meeCO_550.ncgt_meeDU_550.ncgt_meeFI_550.ncgt_meeOB_550.ncgt_meeOC_550.ncgt_meeSS_550.ncgt_meeSU_550.ncgt_meeTO_550.nc

三、MATLAB读取代码示例:

查看nc内的信息的示例代码:

%% 读取MACA v2气候数据集中的单次散射反照率(SSA)及相关变量% 作者:小小程序猿% 日期:2025-06-24clear;clc%% 定义文件路径nc_file = \'G:\\MAC-AOD\\z001test\\macv3_2022\\total_30bands\\MACv3_tot_b30_2006.nc\';output_dir = \'G:\\MAC-AOD\\z001test\\data\\mat_files\\macv3_2022\\tif_files_clip2006\'; % 保存MAT文件的目录%% 创建输出目录(如果不存在)if ~exist(output_dir, \'dir\') mkdir(output_dir); fprintf(\'创建输出目录: %s\\n\', output_dir);end%% 检查NC文件是否存在if ~exist(nc_file, \'file\') error(\'指定的NC文件不存在: %s\', nc_file);end%% 获取文件元数据try nc_info = ncinfo(nc_file); fprintf(\'成功获取NC文件元数据: %s\\n\', nc_file); % 显示文件基本信息 fprintf(\'文件格式: %s\\n\', nc_info.Format); fprintf(\'全局属性: %d个\\n\', length(nc_info.Attributes)); fprintf(\'变量数量: %d个\\n\', length(nc_info.Variables)); catch e error(\'获取NC文件元数据失败: %s\', e.message);end%% 获取所有变量名var_names = {nc_info.Variables.Name}\';fprintf(\'文件包含以下变量:\\n\');disp(var_names);%% 以下的内容可以不获取,使用上面的代码进行查看即可!!!%% 逐个读取变量并保存为单独的MAT文件for i = 1:length(var_names) var_name = var_names{i}; try % 读取变量数据 var_data = ncread(nc_file, var_name); % 获取变量维度信息 var_dims = nc_info.Variables(i).Dimensions; dim_names = {var_dims.Name}\';% dim_sizes = [var_dims.Size]\'; % 显示详细维度信息 fprintf(\'\\n变量: %s\\n\', var_name); fprintf(\' 数据大小: %s\\n\', mat2str(size(var_data))); fprintf(\' 维度信息:\\n\'); % 获取并显示每个维度的单位和坐标值 for d = 1:length(dim_names) dim_name = dim_names{d};% dim_size = dim_sizes(d); % 尝试获取维度变量的单位 dim_units = \'\'; try dim_var = ncinfo(nc_file, dim_name); if isfield(dim_var, \'Attributes\')  for a = 1:length(dim_var.Attributes) if strcmpi(dim_var.Attributes(a).Name, \'units\') dim_units = dim_var.Attributes(a).Value; break; end  end end catch % 忽略错误 end % 尝试获取维度的坐标值 dim_values = []; try dim_values = ncread(nc_file, dim_name); % 只显示前5个和后5个值(如果有) if dim_size > 10  dim_values_str = [sprintf(\'%.3f, \', dim_values(1:5)), \'..., \', sprintf(\'%.3f\', dim_values(end-4:end))]; else  dim_values_str = sprintf(\'%.3f, \', dim_values);  dim_values_str = dim_values_str(1:end-2); % 移除最后一个逗号和空格 end catch dim_values_str = \'无法获取坐标值\'; end % 显示维度信息 if ~isempty(dim_units) fprintf(\' %-15s: 大小=%d, 单位=%s, 坐标值=[%s]\\n\', dim_name, dim_units, dim_values_str); else fprintf(\' %-15s: 大小=%d, 坐标值=[%s]\\n\', dim_name, dim_values_str); end end % 构建输出文件名 mat_file = fullfile(output_dir, [var_name, \'.mat\']); % 保存为MAT文件 save(mat_file, \'var_data\', \'-v7.3\'); % 使用-v7.3支持大文件 % 显示进度 fprintf(\'[%d/%d] 已保存变量: %s -> %s\\n\', i, length(var_names), var_name, mat_file); catch e warning(\'处理变量 %s 失败: %s\', var_name, e.message); endend%% 保存全局属性信息try global_att_file = fullfile(output_dir, \'global_attributes.mat\'); global_att = struct(); for i = 1:length(nc_info.Attributes) att_name = nc_info.Attributes(i).Name; att_value = nc_info.Attributes(i).Value; global_att.(att_name) = att_value; end save(global_att_file, \'global_att\'); fprintf(\'已保存全局属性信息: %s\\n\', global_att_file); catch e warning(\'保存全局属性失败: %s\', e.message);end%% 显示保存结果摘要mat_files = dir(fullfile(output_dir, \'*.mat\'));fprintf(\'\\n共保存 %d 个MAT文件到目录: %s\\n\', length(mat_files), output_dir);

从上述代码可以查看nc的全局信息,然后获取自己所需要的代码;
目前的AI写代码很普遍,也可以将数据打印出来的信息输入给AI辅助写代码,效果也是可以的!!!
属性的保存也可以不需要,直接获取变量的属性就可。

结果可视化:

MAC V2.0/V3.0 气溶胶参数信息数据下载版本

简单的读取示例,非30波段的代码,仅是一年数据量的读取;30波段的代码可以根据参数信息,选择对应的波段;

% 设置路径% 设置路径clear; clcncfile = \'G:\\MAC-AOD\\z001test\\data\\gt_t_00550nm.nc\';outdir = \'G:\\MAC-AOD\\z001test\\data\\tif_files_clip3\';if ~exist(outdir, \'dir\') mkdir(outdir);end % 读取经纬度并转换为 double 类型lon = double(ncread(ncfile, \'lon\'));lat = double(ncread(ncfile, \'lat\'));% 判断纬度是否升序,反转处理if lat(1) < lat(end) lat = flip(lat); flip_lat = true;else flip_lat = false;end% 裁剪区域范围% lat_range = [18, 45];% lon_range = [100, 125];lat_range = [18, 45];lon_range = [100, 125];% 创建严格 1x1 度整数经纬度网格(无小数误差)lon_target = 100:1:125;lat_target = 45:-1:18; % 从北到南[lon_grid, lat_grid] = meshgrid(lon_target, lat_target);% 明确指定 RasterSize(确保 1x1 度分辨率)nLon = numel(lon_target);nLat = numel(lat_target);R = georasterref(\'RasterSize\', [nLat, nLon], ...  \'LatitudeLimits\', [min(lat_target), max(lat_target)], ...  \'LongitudeLimits\', [min(lon_target), max(lon_target)], ...  \'RasterInterpretation\', \'cells\', ...  \'ColumnsStartFrom\', \'north\'); % ? 删除无效参数 RowsStartFrom% 变量列表vars = {\'aod_ann\', \'aod\', \'ssa_ann\', \'ssa\', \'asy_ann\', \'asy\'};for i = 1:length(vars) varname = vars{i}; fprintf(\'正在处理变量: %s\\n\', varname); data = ncread(ncfile, varname); % 获取原始网格并构建原始坐标网格 [lon_orig, lat_orig] = meshgrid(lon, lat); if flip_lat lat_orig = flip(lat_orig, 1); end if ndims(data) == 2 % 2D插值 if flip_lat data = flip(data, 2); end data_interp = interp2(lon_orig, lat_orig, data\', lon_grid, lat_grid, \'linear\'); filename = fullfile(outdir, [varname, \'_clip_1deg.tif\']); fprintf(\' -> 写入: %s\\n\', filename); geotiffwrite(filename, data_interp, R, \'CoordRefSysCode\', \'EPSG:4326\'); elseif ndims(data) == 3 % 3D插值并逐月保存 for t = 1:size(data, 3) slice = data(:, :, t); if flip_lat slice = flip(slice, 2); end slice_interp = interp2(lon_orig, lat_orig, slice\', lon_grid, lat_grid, \'linear\'); filename = fullfile(outdir, sprintf(\'%s_month%02d_clip_1deg.tif\', varname, t)); fprintf(\' -> 写入: %s\\n\', filename); geotiffwrite(filename, slice_interp, R, \'CoordRefSysCode\', \'EPSG:4326\'); end endendfprintf(\'\\n全部变量已重采样为精确 1x1 度并保存为 GeoTIFF:%s\\n\', outdir);

结果可是化:进行了裁剪后的结果
MAC V2.0/V3.0 气溶胶参数信息数据下载版本

到此!!!
后续会继续处理,重采样到自己需要的分辨率等,不一定会再次给出教程,只是在初识该类型数据时,简单记录一下!!!
再会!!!