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

相关文章

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Pandas利用主表更新子表指定列小技巧

《Pandas利用主表更新子表指定列小技巧》本文主要介绍了Pandas利用主表更新子表指定列小技巧,通过创建主表和子表的DataFrame对象,并使用映射字典进行数据关联和更新,实现了从主表到子表的同... 目录一、前言二、基本案例1. 创建主表数据2. 创建映射字典3. 创建子表数据4. 更新子表的 zb

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.