当前位置: 首页 > article >正文

【WRF数据处理】基于Python处理静态地理数据:LAI、Albedo、LUCC

【WRF数据处理】基于Python处理静态地理数据:LAI、Albedo、LUCC

  • update_NC_file函数
  • 参考

update_NC_file函数

函数功能:从现有的 NetCDF 文件中读取地理数据,进行一些处理后,生成新的 NetCDF 文件。

导入库:

import netCDF4 as nc
from shutil import copyfile
import copy
  • netCDF4: 用于读取和写入 NetCDF 文件格式的库,特别适用于气象和气候数据。
  • shutil.copyfile: 用于文件复制的函数。
  • copy: 用于深拷贝对象的模块,以防止对原始数据的修改。

函数 read_geo
功能: 从指定的 NetCDF 文件中读取四个变量(LAI、绿色覆盖度、反照率和土地利用指数),并返回这些数据。
返回值: 四个 NumPy 数组。

def read_geo(geo_file):
    nc_data_obj = nc.Dataset(geo_file)
    lai = nc_data_obj.variables['LAI12M'][:]
    greenfac = nc_data_obj.variables['GREENFRAC'][:]
    albe = nc_data_obj.variables['ALBEDO12M'][:]
    lu = nc_data_obj.variables['LU_INDEX'][:]
    
    return lai, greenfac, albe, lu

函数 gene_new
功能: 生成新的地理数据,修改土地利用指数。
步骤:
1、读取基础地理数据。
2、深拷贝土地利用指数(防止对原始数据的修改)。
3、遍历每个波段,读取对应月份的地理数据,并将其赋值到基础数据中。
4、将土地利用指数中值为 13 的像素修改为 31。
返回值: 更新后的 LAI、绿色覆盖度、反照率和土地利用指数。

def gene_new(t_path, m_path, do_num):
    lai_t, greenfac_t, albe_t, lu_t = read_geo(t_path)
    lu = copy.deepcopy(lu_t)
    band, row, col = lai_t[0, :, :, :].shape
    for b in range(0, band):
        path = m_path + '\\' + 'month' + str(b + 1) + do_num + '.nc'
        lai, greenfac, albe, lu = read_geo(path)
        for r in range(0, row):
            for c in range(0, col):
                lai_t[0, b, r, c] = lai[0, r, c]
                greenfac_t[0, b, r, c] = greenfac[0, r, c] 
                albe_t[0, b, r, c] = albe[0, r, c] 
    
    for r in range(0, row):
        for c in range(0, col):    
            if lu[0, r, c] == 13:
                lu_t[0, r, c] = 31
    return lai_t, greenfac_t, albe_t, lu_t

函数 revise_nc
功能: 更新指定的 NetCDF 文件中的变量内容。
步骤: 打开文件并用新的数据替换对应的变量,最后关闭文件。

def revise_nc(new_file, lai_new, greenfac_new, albe_new, lu_new):
    newfile = nc.Dataset(new_file, 'r+')
    newfile.variables['LAI12M'][:] = lai_new
    newfile.variables['GREENFRAC'][:] = greenfac_new
    newfile.variables['ALBEDO12M'][:] = albe_new
    newfile.variables['LU_INDEX'][:] = lu_new
    newfile.close()

函数主代码如下:
功能: 遍历两个 NetCDF 文件(d0和d1),读取旧数据和新数据,生成新的 NetCDF 文件并更新内容。
步骤:
1、为每个数据集生成文件路径。
2、读取和生成新的地理数据。
3、复制原始文件到新位置。
4、更新新文件中的数据。
5、打印完成信息。

old_nc_folder = r'D:\WRF_lgDes\geo_em\old'
m_path = r'D:\WRF_lgDes\geo_em\nc_files'
new_nc_folder = r'D:\WRF_lgDes\geo_em\new'

for d in [1, 2]:
    t_path = old_nc_folder + '\\' + "geo_em.d0" + str(d) + ".nc"
    do_num = 'd0' + str(d)
    new_file = new_nc_folder + '\\' + "geo_em.d0" + str(d) + ".nc"
    lai_new, greenfac_new, albe_new, lu_new = gene_new(t_path, m_path, do_num)
    copyfile(t_path, new_file)
    revise_nc(new_file, lai_new, greenfac_new, albe_new, lu_new)
    print('finish ' + do_num)

参考


http://www.kler.cn/a/428498.html

相关文章:

  • 电压电流声音信号采集与分析系统
  • vulnhub靶场【hacksudo】之search
  • hive分区分桶、数据倾斜总结
  • HTTP中GET和POST详细理解
  • webpack插件: CopyWebpackPlugin
  • 2024/12/8周报
  • 【5G】架构 Architecture
  • 智能系统复习
  • web复习(一)
  • 嵌入式蓝桥杯学习5 定时中断实现按键
  • 【Python]深入Python日志管理:从logging到分布式日志追踪的完整指南
  • 使用 pyperclip 进行跨平台剪贴板操作
  • SpringBoot中Selenium详解
  • RPA系列-uipath 学习笔记1
  • C++ Lambda表达式:语法、特点和原理
  • C++ 完美转发和左值右值
  • Oracle 12C DataGuard GAP 修复过程(RECOVER … FROM SERVICE)
  • 关于利用 EtherNet/IP 转 Profinet 网关模块实现罗克韦尔变频器接入西门子 PLC 的配置范例
  • Few Examples in MetaGPT
  • ORB-SLAM3源码学习:ImuTypes.cc:Eigen::Matrix3f RightJacobianSO3计算右雅可比矩阵