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/

在这里插入图片描述

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

MACv2 climatology  (2018)
1x1 global, monthly


AOD/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 BC
gt_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 AAOD
gt_fa_0550nm.nc    fine-mode AAOD
gt_ta_0550nm.nc    total AAOD


component mass    
--------------
gt_masBC_550.nc    as for comp.AOD
gt_masCA_550.nc   
gt_masCO_550.nc
gt_masDU_550.nc
gt_masFI_550.nc
gt_masOB_550.nc
gt_masOC_550.nc
gt_masSS_550.nc
gt_masSU_550.nc
gt_masTO_550.nc


mass extinction efficiency
--------------------------
gt_meeBC_550.nc    as for comp.AOD
gt_meeCA_550.nc
gt_meeCO_550.nc
gt_meeDU_550.nc
gt_meeFI_550.nc
gt_meeOB_550.nc
gt_meeOC_550.nc
gt_meeSS_550.nc
gt_meeSU_550.nc
gt_meeTO_550.nc

三、MATLAB读取代码示例:

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

%% 读取MACA v2气候数据集中的单次散射反照率(SSA)及相关变量
% 作者:小小程序猿
% 日期:2025-06-24
clear;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);
    end
end
%% 保存全局属性信息
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辅助写代码,效果也是可以的!!!
属性的保存也可以不需要,直接获取变量的属性就可。

结果可视化:

在这里插入图片描述

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

% 设置路径
% 设置路径
clear; clc
ncfile = '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
    end
end

fprintf('\n全部变量已重采样为精确 1x1 度并保存为 GeoTIFF:%s\n', outdir);

结果可是化:进行了裁剪后的结果
在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值