当前位置:首页>python>Python | 1982—2022年全球0.1°月度GPP和ET数据集 (MF-CW)

Python | 1982—2022年全球0.1°月度GPP和ET数据集 (MF-CW)

  • 2026-09-04 17:44:24
Python | 1982—2022年全球0.1°月度GPP和ET数据集 (MF-CW)
一、关于数据
https://data.globalecology.unh.edu/data/MF-CW_v2/

二、Python下载与处理

以GPP为例,基于Python批量下载并合成月度、季度和年度栅格。

import osimport requestsimport numpy as npimport rasteriofrom io import BytesIObase_url = "https://data.globalecology.unh.edu/data/MF-CW_v2/GPP/MeanSimulation/"save_dir = r"D:\MF_CW\GPP"annual_dir = os.path.join(save_dir, "Annual_Sum")season_dir = os.path.join(save_dir, "Season_Sum")for d in [save_dir, annual_dir, season_dir]:    if not os.path.exists(d):        os.makedirs(d)for year in range(1982, 1991):    year_data = {}    meta = None    for month in range(1, 13):        file_name = f"MF-CW_GPP_{year}.M{month:02d}.tif"        url = base_url + file_name        local_path = os.path.join(save_dir, file_name)        try:            r = requests.get(url, timeout=30)            if r.status_code == 200:                with rasterio.open(BytesIO(r.content)) as src:                    data = src.read(1).astype("float32")                    if meta is None:                        meta = src.meta.copy()                    data[data <= 0] = np.nan                    meta.update(dtype="float32", nodata=np.nan)                    with rasterio.open(local_path, "w", **meta) as dst:                        dst.write(data, 1)                    year_data[month] = data        except:            pass    if len(year_data) == 12:        stacked = np.stack([year_data[m] for m in range(1, 13)])        annual_sum = np.nansum(stacked, axis=0)        annual_sum[np.all(np.isnan(stacked), axis=0)] = np.nan        with rasterio.open(os.path.join(annual_dir, f"GPP_Annual_{year}.tif"), "w", **meta) as dst:            dst.write(annual_sum.astype("float32"), 1)        spring = np.stack([year_data[m] for m in [3, 4, 5]])        summer = np.stack([year_data[m] for m in [6, 7, 8]])        autumn = np.stack([year_data[m] for m in [9, 10, 11]])        spring_sum = np.nansum(spring, axis=0)        summer_sum = np.nansum(summer, axis=0)        autumn_sum = np.nansum(autumn, axis=0)        spring_sum[np.all(np.isnan(spring), axis=0)] = np.nan        summer_sum[np.all(np.isnan(summer), axis=0)] = np.nan        autumn_sum[np.all(np.isnan(autumn), axis=0)] = np.nan        with rasterio.open(os.path.join(season_dir, f"GPP_Spring_{year}.tif"), "w", **meta) as dst:            dst.write(spring_sum.astype("float32"), 1)        with rasterio.open(os.path.join(season_dir, f"GPP_Summer_{year}.tif"), "w", **meta) as dst:            dst.write(summer_sum.astype("float32"), 1)        with rasterio.open(os.path.join(season_dir, f"GPP_Autumn_{year}.tif"), "w", **meta) as dst:            dst.write(autumn_sum.astype("float32"), 1)print("All tasks completed.")

最新文章

随机文章