Matlab : nc批处理输出指定时刻tif,Hourly转Daily并输出tif(以ERA5的nc文件为例)

2023-12-08 15:10

本文主要是介绍Matlab : nc批处理输出指定时刻tif,Hourly转Daily并输出tif(以ERA5的nc文件为例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Matlab : nc批处理输出指定时刻tif,Hourly转Daily并输出tif(以ERA5的nc文件为例)
该代码可以实现多个nc文件的循环批处理,上代码!
补充:
(1)1年的nc文件构成是:
ERA5的nc文件下载截图
(2)nc文件命名例如:ERA2020,所以截取年份时是4:7;
(3)使用时请根据自己的数据情况和需求更改代码适配。

%%
% @LastEditors  : 喵小鱼~
% @Date         : 2021-11-10 20:00 
% @LastEditTime : 2021-11-20 16:50 
% @Description  : nc2tif,hourly2daily,year by year
% @Objective    : ERA5小时数据转日数据,并输出11点数据
%%
clc;
clear all;
% 输入nc根路径
nc_Path='E:\TarimBasin\meta\ERA5_original\';
% 输出tif根路径
tif_Path='E:\TarimBasin\meta\ERA5_original\nc2tif\';
nc_list=dir(strcat(nc_Path,'*.nc'));%列出路径下所有nc文件
% ERA5小时数据转日数据,并输出11点数据
for yy=1:length(nc_list)nc_name=nc_list(yy).name;info=ncinfo(strcat(nc_Path,nc_name));		%读取nc文件信息year =nc_list(yy).name(4:7); %读取数据年份编号,以便于保存时以此编号储存tifnc_vart2m = ncread(strcat(nc_Path,nc_name),'t2m'); %2m temperature,knc_vard2m = ncread(strcat(nc_Path,nc_name),'d2m'); %2m dewpoint temperature,knc_varu10 = ncread(strcat(nc_Path,nc_name),'u10'); %10m u-component of wind,m/snc_varv10 = ncread(strcat(nc_Path,nc_name),'v10'); %10m v-component of wind,m/s% 直接输出11点气象数据t2m,d2m,Uz,用于计算ET0_hrn=0;time=size(nc_vart2m);%层数量doy=time(3)/24;t=time(3)-12;Uz=zeros(time(1),time(2),doy);for i=12:24:tt11=nc_vart2m(:,:,i);dt11=nc_vard2m(:,:,i);u10=nc_varu10(:,:,i);v10=nc_varv10(:,:,i);u11=sqrt(u10.^2+v10.^2);%先计算再采样与先采样再计算会改变精度吗?应该不会n=n+1;        t11_file=fullfile(strcat(tif_Path,year,'\t11\'));dt11_file=fullfile(strcat(tif_Path,year,'\dt11\'));u11_file=fullfile(strcat(tif_Path,year,'\u11\'));t11_Path=strcat(t11_file,'t11_doy',year,num2str(n,'%03d'),'.tif');dt11_Path=strcat(dt11_file,'dt11_doy',year,num2str(n,'%03d'),'.tif');u11_Path=strcat(u11_file,'u11_doy',year,num2str(n,'%03d'),'.tif');t11 = rot90(t11);dt11 = rot90(dt11);u11 = rot90(u11);Ref=georasterref('RasterSize',size(t11),'Latlim',[30 50],'Lonlim',[70 100]);         Ref.ColumnsStartFrom = 'south';geotiffwrite(t11_Path,t11,Ref);geotiffwrite(dt11_Path,dt11,Ref);geotiffwrite(u11_Path,u11,Ref);disp(i);end% 小时数据转日平均数据&日最值数据,Tmean,Tmax,Tmin,dTmean,meanUz用于计算ET0_hr & ET_dayfor j=0:(doy-1)t2m_day=nc_vart2m(:,:,(24*j+1):(24*(j+1))); %grab an entire dayTmax=max(t2m_day,[],3);%find Daily maximum temperatureTmin=min(t2m_day,[],3);%find Daily minimum temperatured2m_day=nc_vard2m(:,:,(24*j+1):(24*(j+1))); dTmean=sum(d2m_day,3)./24;u10_day=nc_varu10(:,:,(24*j+1):(24*(j+1))); v10_day=nc_varv10(:,:,(24*j+1):(24*(j+1))); meanu10=sum(u10_day,3)./24;meanv10=sum(v10_day,3)./24;meanUz=sqrt(meanu10.^2+meanv10.^2);Tmax_file=fullfile(strcat(tif_Path,year,'\maxTem\'));Tmin_file=fullfile(strcat(tif_Path,year,'\minTem\'));dTmean_file=fullfile(strcat(tif_Path,year,'\dTmean\'));meanUz_file=fullfile(strcat(tif_Path,year,'\meanUz\'));Tmax_Path=strcat(Tmax_file,'Tmax_doy',year,num2str(j+1,'%03d'),'.tif');Tmin_Path=strcat(Tmin_file,'Tmin_doy',year,num2str(j+1,'%03d'),'.tif');dTmean_Path=strcat(dTmean_file,'dTmean_doy',year,num2str(j+1,'%03d'),'.tif');meanUz_Path=strcat(meanUz_file,'meanUz_doy',year,num2str(j+1,'%03d'),'.tif');Tmax = rot90(Tmax);Tmin = rot90(Tmin);dTmean = rot90(dTmean);meanUz = rot90(meanUz);Ref=georasterref('RasterSize',size(Tmax),'Latlim',[30 50],'Lonlim',[70 100]);         Ref.ColumnsStartFrom = 'south';geotiffwrite(Tmax_Path,Tmax,Ref);geotiffwrite(Tmin_Path,Tmin,Ref);geotiffwrite(dTmean_Path,dTmean,Ref);geotiffwrite(meanUz_Path,meanUz,Ref);  disp(j+1);end
end

参考:
1.CSDN:matlab将nc数据转换为tif
https://blog.csdn.net/qq_34149805/article/details/73024600
2.Stackoverflow:MATLAB: How to calculate total precipitation per day using hourly data ? (netcdf)
https://stackoverflow.com/questions/58658489/matlab-how-to-calculate-total-precipitation-per-day-using-hourly-data-netcdf

这篇关于Matlab : nc批处理输出指定时刻tif,Hourly转Daily并输出tif(以ERA5的nc文件为例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/470324

相关文章

java创建xls文件放到指定文件夹中实现方式

《java创建xls文件放到指定文件夹中实现方式》本文介绍了如何在Java中使用ApachePOI库创建和操作Excel文件,重点是如何创建一个XLS文件并将其放置到指定文件夹中... 目录Java创建XLS文件并放到指定文件夹中步骤一:引入依赖步骤二:创建XLS文件总结Java创建XLS文件并放到指定文件

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

基于Python实现数字限制在指定范围内的五种方式

《基于Python实现数字限制在指定范围内的五种方式》在编程中,数字范围限制是常见需求,无论是游戏开发中的角色属性值、金融计算中的利率调整,还是传感器数据处理中的异常值过滤,都需要将数字控制在合理范围... 目录引言一、基础条件判断法二、数学运算巧解法三、装饰器模式法四、自定义类封装法五、NumPy数组处理

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu