附录C 文件格式参考

每个 OGGM 冰川目录(GlacierDirectory)包含一组由预处理、气候、反演和模拟工作流生成的标准化文件。 本附录记录了每个文件的用途、格式、内部结构以及变量/键清单。 在读取、写入或调试冰川目录(GlacierDirectory)内容时,请使用此参考。

按研究问题查文件
研究问题优先读取核心变量或键备注
冰川面积、长度、体积时间序列model_diagnostics.ncarea_m2, length_m, volume_m3用于历史模拟、未来情景和区域统计。
初始冰厚和冰储量inversion_output.pklvolume, thick/thickness反演结果,不等同于直接观测。
物质平衡校准mb_calib.jsonmelt_f, temp_bias, prcp_fac解释不同冰川响应差异时必须检查。
气候输入climate_historical.nctemp, prcp, ref_hgt降水是月总量,不是瞬时速率。
质量控制和溯源diagnostics.jsondem_source, 任务诊断键区域批处理后应首先汇总。

C.1 冰川目录(GlacierDirectory)文件清单

文件名BASENAMES 键格式生成来源用途
outlines.shpoutlinesESRI Shapefileinit_glacier_directories所有任务
dem.tifdemGeoTIFFprocess_demGIS 任务
glacier_grid.jsonglacier_gridJSONdefine_glacier_region初始化之后的所有任务
gridded_data.ncgridded_dataNetCDFglacier_masks, gridded_attributes, catchment_area中心线、反演
climate_historical.ncclimate_historicalNetCDFprocess_climate_data物质平衡、校准
centerlines.pklcenterlinesgzip picklecompute_centerlines流线初始化
inversion_input.pklinversion_inputpickleprepare_for_inversion反演
inversion_output.pklinversion_outputpicklemass_conservation_inversion流线模型
model_flowlines.pklmodel_flowlinespickleinitialize_flowlines反演、演化
model_diagnostics.ncmodel_diagnosticsNetCDFflowline_model_run后处理
mb_calib.jsonmb_calibJSONmb_calibration物质平衡模型
geometries.pklgeometriespicklecatchment_area可视化
hypsometry.csvhypsometryCSVinitialize_flowlines体积-面积标度
diagnostics.jsondiagnosticsJSON贯穿整个工作流调试、溯源

C.2 逐文件规格说明

outlines.shp -- RGI 冰川轮廓

格式: ESRI Shapefile | BASENAMES 键: outlines

用途: 包含冰川轮廓多边形和 RGI 元数据。这是所有其他数据的起始来源。

字段:

字段类型描述
RGIIdstr(14 字符)唯一的 RGI 冰川标识符
GLIMSIdstrGLIMS 冰川标识符
Namestr冰川名称(如果已知)
AreafloatRGI 报告的面积(km²)
CenLatfloat质心纬度(度)
CenLonfloat质心经度(度)
TermTypeint末端类型代码(0=陆地,1=海洋,2=湖泊等)
Connectint连通性代码
Statusint冰川状态代码

dem.tif -- 数字高程模型

格式: GeoTIFF(Float32) | BASENAMES 键: dem

用途: 经过重投影和裁剪的 DEM,覆盖冰川及其缓冲区(即"边界")。

属性: 单波段 Float32 栅格。使用投影坐标参考系(通常以冰川为中心的横轴墨卡托投影)。 NoData 值:-9999。分辨率由参数中的 grid_dx_method 决定。

尺寸: 网格尺寸取决于冰川面积和边界。通常在 30-100 米分辨率下,每边 50-200 像素。

glacier_grid.json -- Salem 网格定义

格式: JSON | BASENAMES 键: glacier_grid

用途: 定义冰川的局部坐标系和网格。

结构:

{
  "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 方向的网格单元数)。

gridded_data.nc -- 网格化变量

格式: NetCDF4 | BASENAMES 键: gridded_data

用途: 所有 2D 网格化数据的中央存储库。随着预处理工作流的推进,变量会逐步添加。

维度: (y, x),与 glacier_grid 维度匹配。

变量清单:

变量数据类型单位添加者描述
topofloat64m a.s.l.process_dem完整 DEM 高程(包括冰川外地形)
glacier_maskuint8布尔型(0/1)glacier_masks掩膜:1 = 冰川内,0 = 冰川外
glacier_topofloat64m a.s.l.glacier_masks被冰川区域掩膜后的 DEM(外部为 NaN)
aspectfloat64gridded_attributes地表坡向(0-360,0 = 北)
slopefloat64gridded_attributes地表坡度角
disfloat64mgridded_attributes每个网格单元到冰川轮廓的距离
catchment_maskuint8类别catchment_area每个网格单元的流域 ID(0 表示无流域)
distributed_thicknessfloat64mdistribute_2d(sandbox 模块)从流线分布得到的 2D 冰厚度

全局属性: rgi_iddem_sourceprojgrid_dxgrid_dy

climate_historical.nc -- 气候时间序列

格式: NetCDF4 | BASENAMES 键: climate_historical

用途: 存储冰川的月均温度和降水时间序列,从气候数据源插值到冰川的高程范围。

维度: 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标量参考气候像素的面积

时间覆盖范围: 起止日期取决于气候数据源。CRU TS 通常覆盖 1901 年至今(存在 1-2 年的滞后)。

高程层: 通常为 30 个离散层,覆盖从冰川最低点到最高点的高程范围,外加安全余量。

centerlines.pkl -- 中心线对象

格式: gzip 压缩 pickle | BASENAMES 键: centerlines

用途: 存储从冰川掩膜计算得到的几何中心线对象。

内容: 一个 Centerline 对象列表,每个对象包含: line(shapely LineString -- 投影坐标下的中心线几何), dis_on_line(ndarray -- 沿线距离,单位米), heads(Point 列表 -- 上游端点), tail(Point -- 下游末端点), flows_to(Centerline 或 None -- 该中心线汇入的下游中心线), inflows(Centerline 列表 -- 汇入该中心线的上游中心线), order(int -- 河流级别)。

inversion_input.pkl -- 反演输入

格式: pickle | BASENAMES 键: inversion_input

用途: 为质量守恒反演准备的数据。

内容: dict,包含以下键: flux(ndarray 列表 -- 每条流线的表观物质平衡(apparent mass balance)通量), width(ndarray 列表 -- 每个网格点处的流线宽度), dx(float -- 网格间距,单位米), surface_h(ndarray 列表 -- 每条流线的表面高程), bed_h(ndarray 列表 -- 每条流线的初始冰床估计), glen_a(float -- 反演使用的 Glen's A 参数), fs(float -- 反演使用的滑动参数)。

inversion_output.pkl -- 反演结果

格式: pickle | BASENAMES 键: inversion_output

用途: 质量守恒反演得到的冰厚度分布。

内容: 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 -- 使用的滑动参数)。

model_flowlines.pkl -- MixedBedFlowline 对象

格式: pickle | BASENAMES 键: model_flowlines

用途: 准备用于数值模拟的流线对象。包含模型网格分辨率下的完整几何信息(表面、反演后的冰床、宽度)。

内容: 一个 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 -- 支流连接)。

model_diagnostics.nc -- 模型输出诊断

格式: NetCDF4 | BASENAMES 键: model_diagnostics

用途: 流线模型运行期间存储的模型诊断变量时间序列。

维度: time(逐年,每个存储年份一个条目),flowlines(每条流线一个,用于每条流线的独立变量)。

变量清单:

变量维度单位描述
volume_m3(time, flowlines)每条流线每年的冰体积
area_m2(time, flowlines)每条流线每年的表面积
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_hbed_hthickness_mice_velocity_myr -- 这些变量会增加一个额外的 dis_along_flowline 维度。

mb_calib.json -- 物质平衡校准

格式: JSON | BASENAMES 键: mb_calib

用途: 存储冰川的校准物质平衡参数。

结构:

{
  "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 -- 校准参考年份(物质平衡近似等于参考值的年份)。

geometries.pkl -- 多边形几何

格式: pickle | BASENAMES 键: geometries

用途: 存储冰川的 GIS 多边形几何(流域多边形、相交多边形、流线流域)。

内容: dict,包含以下键: polygon_pix(list -- 以像素坐标表示的冰川掩膜), polygon_hr(shapely Polygon -- 以 shapely 几何表示的冰川轮廓), catchments(dict -- 将流线索引映射到流域多边形,如果已计算), intersects(Polygon 列表 -- 相交的冰川多边形,如果存在)。

hypsometry.csv -- 测高统计

格式: CSV | BASENAMES 键: hypsometry

用途: 测高表:高程区间及其对应的冰川面积。

列: elevation(m a.s.l. -- 高程区间中心), area(m² -- 该高程区间内的冰川面积), width(m -- 该高程处的冰川总宽度)。

该 CSV 由 initialize_flowlines 生成,并在物质平衡计算和可视化中内部使用。

diagnostics.json -- 处理诊断信息

格式: JSON | BASENAMES 键: diagnostics

用途: 记录处理元数据和诊断信息,用于溯源和调试。

典型内容:

{
  "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
}

C.3 读写模式

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='')
← 附录B 参数参考手册 附录D 术语表 →