每个 OGGM 冰川目录(GlacierDirectory)包含一组由预处理、气候、反演和模拟工作流生成的标准化文件。 本附录记录了每个文件的用途、格式、内部结构以及变量/键清单。 在读取、写入或调试冰川目录(GlacierDirectory)内容时,请使用此参考。
| 研究问题 | 优先读取 | 核心变量或键 | 备注 |
|---|---|---|---|
| 冰川面积、长度、体积时间序列 | model_diagnostics.nc | area_m2, length_m, volume_m3 | 用于历史模拟、未来情景和区域统计。 |
| 初始冰厚和冰储量 | inversion_output.pkl | volume, thick/thickness | 反演结果,不等同于直接观测。 |
| 物质平衡校准 | mb_calib.json | melt_f, temp_bias, prcp_fac | 解释不同冰川响应差异时必须检查。 |
| 气候输入 | climate_historical.nc | temp, prcp, ref_hgt | 降水是月总量,不是瞬时速率。 |
| 质量控制和溯源 | diagnostics.json | dem_source, 任务诊断键 | 区域批处理后应首先汇总。 |
| 文件名 | BASENAMES 键 | 格式 | 生成来源 | 用途 |
|---|---|---|---|---|
| outlines.shp | outlines | ESRI Shapefile | init_glacier_directories | 所有任务 |
| dem.tif | dem | GeoTIFF | process_dem | GIS 任务 |
| glacier_grid.json | glacier_grid | JSON | define_glacier_region | 初始化之后的所有任务 |
| gridded_data.nc | gridded_data | NetCDF | glacier_masks, gridded_attributes, catchment_area | 中心线、反演 |
| climate_historical.nc | climate_historical | NetCDF | process_climate_data | 物质平衡、校准 |
| centerlines.pkl | centerlines | gzip pickle | compute_centerlines | 流线初始化 |
| inversion_input.pkl | inversion_input | pickle | prepare_for_inversion | 反演 |
| inversion_output.pkl | inversion_output | pickle | mass_conservation_inversion | 流线模型 |
| model_flowlines.pkl | model_flowlines | pickle | initialize_flowlines | 反演、演化 |
| model_diagnostics.nc | model_diagnostics | NetCDF | flowline_model_run | 后处理 |
| mb_calib.json | mb_calib | JSON | mb_calibration | 物质平衡模型 |
| geometries.pkl | geometries | pickle | catchment_area | 可视化 |
| hypsometry.csv | hypsometry | CSV | initialize_flowlines | 体积-面积标度 |
| diagnostics.json | diagnostics | JSON | 贯穿整个工作流 | 调试、溯源 |
用途: 包含冰川轮廓多边形和 RGI 元数据。这是所有其他数据的起始来源。
字段:
| 字段 | 类型 | 描述 |
|---|---|---|
RGIId | str(14 字符) | 唯一的 RGI 冰川标识符 |
GLIMSId | str | GLIMS 冰川标识符 |
Name | str | 冰川名称(如果已知) |
Area | float | RGI 报告的面积(km²) |
CenLat | float | 质心纬度(度) |
CenLon | float | 质心经度(度) |
TermType | int | 末端类型代码(0=陆地,1=海洋,2=湖泊等) |
Connect | int | 连通性代码 |
Status | int | 冰川状态代码 |
用途: 经过重投影和裁剪的 DEM,覆盖冰川及其缓冲区(即"边界")。
属性: 单波段 Float32 栅格。使用投影坐标参考系(通常以冰川为中心的横轴墨卡托投影)。
NoData 值:-9999。分辨率由参数中的 grid_dx_method 决定。
尺寸: 网格尺寸取决于冰川面积和边界。通常在 30-100 米分辨率下,每边 50-200 像素。
用途: 定义冰川的局部坐标系和网格。
结构:
{
"proj": "+proj=tmerc +lat_0=46.80 +lon_0=10.78 +k=1.0 +x_0=0 +y_0=0 +ellps=WGS84",
"x0": 0,
"y0": 0,
"nx": 134,
"ny": 107,
"dx": 100.0,
"dy": 100.0,
"origin": "lower-left",
"pixel_ref": "corner",
"topo_valid": true
}
关键字段: proj(PROJ.4 字符串),dx/dy(网格间距,单位米),
nx/ny(x 和 y 方向的网格单元数)。
用途: 所有 2D 网格化数据的中央存储库。随着预处理工作流的推进,变量会逐步添加。
维度: (y, x),与 glacier_grid 维度匹配。
变量清单:
| 变量 | 数据类型 | 单位 | 添加者 | 描述 |
|---|---|---|---|---|
topo | float64 | m a.s.l. | process_dem | 完整 DEM 高程(包括冰川外地形) |
glacier_mask | uint8 | 布尔型(0/1) | glacier_masks | 掩膜:1 = 冰川内,0 = 冰川外 |
glacier_topo | float64 | m a.s.l. | glacier_masks | 被冰川区域掩膜后的 DEM(外部为 NaN) |
aspect | float64 | 度 | gridded_attributes | 地表坡向(0-360,0 = 北) |
slope | float64 | 度 | gridded_attributes | 地表坡度角 |
dis | float64 | m | gridded_attributes | 每个网格单元到冰川轮廓的距离 |
catchment_mask | uint8 | 类别 | catchment_area | 每个网格单元的流域 ID(0 表示无流域) |
distributed_thickness | float64 | m | distribute_2d(sandbox 模块) | 从流线分布得到的 2D 冰厚度 |
全局属性: rgi_id、dem_source、proj、grid_dx、grid_dy。
用途: 存储冰川的月均温度和降水时间序列,从气候数据源插值到冰川的高程范围。
维度: time(逐月,通常从 1901 年至今),height(离散高程层)。
变量清单:
| 变量 | 维度 | 单位 | 描述 |
|---|---|---|---|
temp | (time, height) | deg C | 各高程层的月平均温度 |
prcp | (time, height) | kg m⁻² | 各高程层的月总降水量 |
gradient | (time) | deg C / 100m | 月温度递减率 |
ref_hgt | 标量 | m a.s.l. | 原始气候数据的参考高程 |
ref_pix_lat | 标量 | 度 | 参考气候像素的纬度 |
ref_pix_lon | 标量 | 度 | 参考气候像素的经度 |
ref_pix_dis | 标量 | km | 冰川中心到参考像素的距离 |
ref_pix_area | 标量 | m² | 参考气候像素的面积 |
时间覆盖范围: 起止日期取决于气候数据源。CRU TS 通常覆盖 1901 年至今(存在 1-2 年的滞后)。
高程层: 通常为 30 个离散层,覆盖从冰川最低点到最高点的高程范围,外加安全余量。
用途: 存储从冰川掩膜计算得到的几何中心线对象。
内容: 一个 Centerline 对象列表,每个对象包含:
line(shapely LineString -- 投影坐标下的中心线几何),
dis_on_line(ndarray -- 沿线距离,单位米),
heads(Point 列表 -- 上游端点),
tail(Point -- 下游末端点),
flows_to(Centerline 或 None -- 该中心线汇入的下游中心线),
inflows(Centerline 列表 -- 汇入该中心线的上游中心线),
order(int -- 河流级别)。
用途: 为质量守恒反演准备的数据。
内容: dict,包含以下键:
flux(ndarray 列表 -- 每条流线的表观物质平衡(apparent mass balance)通量),
width(ndarray 列表 -- 每个网格点处的流线宽度),
dx(float -- 网格间距,单位米),
surface_h(ndarray 列表 -- 每条流线的表面高程),
bed_h(ndarray 列表 -- 每条流线的初始冰床估计),
glen_a(float -- 反演使用的 Glen's A 参数),
fs(float -- 反演使用的滑动参数)。
用途: 质量守恒反演得到的冰厚度分布。
内容: dict,包含以下键:
volume(float -- 冰川总体积,m³),
volume_bsl(float -- 海平面以下体积,m³,用于入海型冰川),
volume_bsl_max(float -- 最大可能的海平面以下体积),
thickness(ndarray 列表 -- 每条流线的反演厚度,m),
is_tidewater(bool -- 冰川末端是否到达海/湖),
bed_h(ndarray 列表 -- 每条流线的最终冰床高程),
glen_a(float -- 使用的 Glen's A 值),
fs(float -- 使用的滑动参数)。
用途: 准备用于数值模拟的流线对象。包含模型网格分辨率下的完整几何信息(表面、反演后的冰床、宽度)。
内容: 一个 MixedBedFlowline 对象列表(Flowline 的子类),每个对象包含:
dis_on_line(ndarray -- 沿流线距离,m),
surface_h(ndarray -- 来自 DEM 的表面高程,m),
bed_h(ndarray -- 来自反演或初始估计的冰床高程,m),
widths(ndarray -- 各网格点处的冰川宽度,m),
widths_m(ndarray -- 数值格式中交错网格上的宽度,m),
dx(float -- 沿流线网格间距),
dx_meter(float -- 实际米数网格间距),
is_tidewater(bool),
is_rectangular(bool -- 冰床类型标志),
is_trapezoid(bool -- 冰床类型标志),
is_parabolic(bool -- 冰床类型标志),
flows_to(MixedBedFlowline 或 None -- 支流连接)。
用途: 流线模型运行期间存储的模型诊断变量时间序列。
维度: time(逐年,每个存储年份一个条目),flowlines(每条流线一个,用于每条流线的独立变量)。
变量清单:
| 变量 | 维度 | 单位 | 描述 |
|---|---|---|---|
volume_m3 | (time, flowlines) | m³ | 每条流线每年的冰体积 |
area_m2 | (time, flowlines) | m² | 每条流线每年的表面积 |
length_m | (time, flowlines) | m | 每条流线每年的长度 |
calving_m3 | (time, flowlines) | m³ yr⁻¹ | 每条流线的崩解通量(陆地终止冰川为 0) |
ela_m | (time) | m a.s.l. | 冰川整体平衡线高度 |
dmdtda_mmwea | (time) | mm w.e. yr⁻¹ | 比物质平衡率 |
可选(如果 store_model_geometry=True): surface_h、bed_h、thickness_m、
ice_velocity_myr -- 这些变量会增加一个额外的 dis_along_flowline 维度。
用途: 存储冰川的校准物质平衡参数。
结构:
{
"melt_f": 4.2,
"temp_bias": 0.3,
"prcp_fac": 1.0,
"reference_mb": -850.0,
"reference_period": "2000-01-01_2015-12-31",
"calibration_method": "geodetic_mb_consensus",
"t_star": 1920.5,
"bias": 0.03
}
关键字段:
melt_f -- 度日融化因子(kg m⁻² K⁻¹ day⁻¹),
temp_bias -- 温度偏差校正(K),
prcp_fac -- 降水校正因子(1.0 = 无校正),
t_star -- 校准参考年份(物质平衡近似等于参考值的年份)。
用途: 存储冰川的 GIS 多边形几何(流域多边形、相交多边形、流线流域)。
内容: dict,包含以下键:
polygon_pix(list -- 以像素坐标表示的冰川掩膜),
polygon_hr(shapely Polygon -- 以 shapely 几何表示的冰川轮廓),
catchments(dict -- 将流线索引映射到流域多边形,如果已计算),
intersects(Polygon 列表 -- 相交的冰川多边形,如果存在)。
用途: 测高表:高程区间及其对应的冰川面积。
列: elevation(m a.s.l. -- 高程区间中心),
area(m² -- 该高程区间内的冰川面积),
width(m -- 该高程处的冰川总宽度)。
该 CSV 由 initialize_flowlines 生成,并在物质平衡计算和可视化中内部使用。
用途: 记录处理元数据和诊断信息,用于溯源和调试。
典型内容:
{
"dem_source": "SRTM",
"dem_resolution": 30.0,
"grid_dx": 100,
"grid_dy": 100,
"map_proj": "tmerc",
"rgi_area_km2": 8.45,
"glacier_area_on_grid_km2": 8.43,
"n_centerlines": 3,
"centerlines_total_length_m": 12450,
"n_flowlines": 3,
"prepro_level": 3,
"has_climate": true,
"climate_source": "CRU",
"mb_calibration_done": true,
"inversion_done": true
}
OGGM 在 GlacierDirectory 上为每种文件类型提供了标准化的读写方法:
# NetCDF 文件
gdir.write_netcdf(data_dict, basename_key, filesuffix='')
ds = xr.open_dataset(gdir.get_filepath(basename_key, filesuffix=''))
# Pickle 文件
gdir.write_pickle(obj, basename_key, filesuffix='')
obj = gdir.read_pickle(basename_key, filesuffix='')
# JSON 文件
gdir.write_json(obj, basename_key, filesuffix='')
obj = gdir.read_json(basename_key, filesuffix='')
# Shapefile 文件
gdir.write_shapefile(gdf, basename_key, filesuffix='')
gdf = gpd.read_file(gdir.get_filepath(basename_key, filesuffix=''))
# 文本/CSV 文件
gdir.write_text(text, basename_key, filesuffix='')
text = gdir.read_text(basename_key, filesuffix='')