当前位置:首页>python>Python | 1901—2025年中国1km逐月气温和降水数据

Python | 1901—2025年中国1km逐月气温和降水数据

  • 2026-09-10 01:38:37
Python | 1901—2025年中国1km逐月气温和降水数据

一、数据下载

#中国1km逐月平均气温数据集(1901-2025)https://www.tpdc.ac.cn/zh-hans/data/71ab4677-b66c-4fd1-a004-b2a541c4d5bf
#中国1km逐月降水量数据集(1901-2025)https://www.tpdc.ac.cn/zh-hans/data/faae7605-a0f2-4d18-b28f-5cee413766a2

二、Panoply查看NC信息

三、Python提取逐月逐年栅格

基于python提取逐月栅格,并合成年数据,以下是代码和空间分布草图。

import os, globimport numpy as npimport xarray as xrimport geopandas as gpdimport rioxarrayout_dir = r"E:\tmppeng\TIF"os.makedirs(out_dir, exist_ok=True)china = gpd.read_file(r"E:\研究区\中国标准行政区划数据GS(2024)0650号\shp格式\中国边界.shp")if china.crs.to_string() != "EPSG:4326":    china = china.to_crs("EPSG:4326")mask = china.geometry.values.tolist()for f in sorted(glob.glob(r"E:\tmppeng\tmp_*.nc")):    year = os.path.basename(f).split("_")[1].split(".")[0]    print(f"处理 {year} ...")    ds = xr.open_dataset(f)    data = ds["tmp"].values * 0.1    lon, lat = ds["lon"].values, ds["lat"].values    ds.close()    for m in range(12):        da = xr.DataArray(data[m], dims=["y", "x"], coords={"y": lat, "x": lon})        da.rio.write_crs("EPSG:4326").rio.clip(mask, crs="EPSG:4326", drop=True).rio.to_raster(            os.path.join(out_dir, f"tmp_{year}_{m+1:02d}.tif"), nodata=-32768)    annual = np.nanmean(data, axis=0)    da = xr.DataArray(annual, dims=["y", "x"], coords={"y": lat, "x": lon})    da.rio.write_crs("EPSG:4326").rio.clip(mask, crs="EPSG:4326", drop=True).rio.to_raster(        os.path.join(out_dir, f"tmp_{year}_annual.tif"), nodata=-32768)    print(f"  {year} 完成")print("全部完成。")
import os, globimport numpy as npimport xarray as xrimport geopandas as gpdimport rioxarrayout_dir = r"E:\Pre_peng\TIF"os.makedirs(out_dir, exist_ok=True)china = gpd.read_file(r"E:\研究区\中国标准行政区划数据GS(2024)0650号\shp格式\中国边界.shp")if china.crs.to_string() != "EPSG:4326":    china = china.to_crs("EPSG:4326")mask = china.geometry.values.tolist()for f in sorted(glob.glob(r"E:\Pre_peng\pre_*.nc")):    year = os.path.basename(f).split("_")[1].split(".")[0]    print(f"处理 {year} ...")    ds = xr.open_dataset(f)    data = ds["pre"].values * 0.1    lon, lat = ds["lon"].values, ds["lat"].values    ds.close()    for m in range(12):        da = xr.DataArray(data[m], dims=["y", "x"], coords={"y": lat, "x": lon})        da.rio.write_crs("EPSG:4326").rio.clip(mask, crs="EPSG:4326", drop=True).rio.to_raster(            os.path.join(out_dir, f"pre_{year}_{m+1:02d}.tif"), nodata=-32768)    annual = np.nansum(data, axis=0)    annual[np.all(np.isnan(data), axis=0)] = np.nan    da = xr.DataArray(annual, dims=["y", "x"], coords={"y": lat, "x": lon})    da.rio.write_crs("EPSG:4326").rio.clip(mask, crs="EPSG:4326", drop=True).rio.to_raster(        os.path.join(out_dir, f"pre_{year}_annual.tif"), nodata=-32768)    print(f"  {year} 完成")print("全部完成。")

最新文章

随机文章