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

如何用CDO或Python实现IGBP数据重格网与森林覆盖占比计算

用CDO实现重格网与林地覆盖占比计算

步骤1:生成目标分辨率网格模板

赤道附近100km对应约0.8333°经纬度(1°≈111km),用CDO生成该分辨率的全球网格文件:

cdo gengrid,lon=0.8333/lon=-180/lon=180,lat=0.8333/lat=-90/lat=90 target_100km_grid.nc

步骤2:保守重映射计算林地占比

原数据是0(非林地)、1(林地)的二进制值,保守重映射(remapcon)会自动按面积比例统计新网格内的林地占比,直接运行:

# 若原数据未包含网格面积变量,先添加
cdo setgridarea input_igbp.nc input_with_area.nc
# 执行重映射
cdo remapcon,target_100km_grid.nc input_with_area.nc forest_cover_fraction.nc

重映射后的结果变量值即为对应100km网格的林地覆盖占比(范围0-1)。


用Python实现重格网与林地覆盖占比计算

基于xarray库处理规则经纬度网格数据,步骤如下:

import xarray as xr

# 读取原始IGBP数据集
ds = xr.open_dataset("input_igbp.nc")
landuse_data = ds["your_variable_name"]  # 替换为数据集中的土地利用变量名

# 方法1:按倍数 coarsen 重采样(适合已知原分辨率是1km,对应~0.008333°)
# 100km是1km的100倍,所以coarsen倍数设为100
fraction_coarsen = landuse_data.coarsen(
    lon=100, lat=100, boundary="trim"
).mean(skipna=True)

# 方法2:按指定经纬度间隔 resample 重采样
fraction_resample = landuse_data.resample(
    lon="0.8333deg", lat="0.8333deg"
).mean(skipna=True)

# 保存结果为NetCDF文件
fraction_coarsen.to_netcdf("forest_cover_fraction_100km.nc")

说明:

  • 若原数据存在缺失值,skipna=True会忽略缺失值计算有效网格的占比
  • 如果是不规则网格,可改用pyresample库进行重映射,核心逻辑仍是统计新网格内1的数量占总有效网格的比例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:20:23