一、NetCDF数据介绍

NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。

二、数据下载

  1. 进入网址 https://www.ecmwf.int/ 申请一个账号,注册流程简单,按操作提示完成即可。
  2. 文件下载,找到数据集,填写检索参数,即可下载。

                    

三、数据提取需求

利用Matlab编程实现提取**地区三个坐标点的风(u10、v10)、总降雨(tp)、水蒸气含量(tcwv)信息,且输出结果组织如下表:

提取结果组织形式
     时间          u10        v10         tp         tcwv
20100101
20100102
……
20130101
……
……

四、数据提取思想

要想利用编程提取,我们首先需要学习一下NetCDF的文件组织形式:

1、读取NetCDF的源数据信息。在Matlab2015带有读取该文件类型的函数:ncdisp('path'),示例如下:

ncdisp('C:\Users\Administrator\Desktop\dataset\2017\1月份\_grib2netcdf-webmars-public-svc-green-002-6fe5cac1a363ec1525f54343b6cc9fd8-4vMyn2.nc')

2、读取NetCDF的变量信息。在Matlab2015带有读取该文件变量的函数:ncread('path','变量的名称'),示例如下:

ncread('C:\Users\Administrator\Desktop\dataset\2017\1月份\_grib2netcdf-webmars-public-svc-green-002-6fe5cac1a363ec1525f54343b6cc9fd8-4vMyn2.nc','time')
ncread('C:\Users\Administrator\Desktop\dataset\2017\1月份\_grib2netcdf-webmars-public-svc-green-002-6fe5cac1a363ec1525f54343b6cc9fd8-4vMyn2.nc','longitude')

3、由上面提取的变量,在Matlab查看可知:

变量数据结构:由下知,u10、v10、tp、tcwv变量空间索引为    经度   维度   时间
          time           30x1 int32
          latitude      721x1 single (可知经纬度间隔,方便推算对应经纬度下变量的空间坐标索引)
          longitude   1440x1 single(可知经纬度间隔,方便推算对应经纬度下变量的空间坐标索引)
          u10            1440x721x30 double
          v10            1440x721x30 double
          tp              1440x721x30 double
          tcwv           1440x721x30 double

五、Matlab代码实现

clear
close allsavedir = 'I:\feng_liu_data\result\';  % 保存excel的路径
point = [50 3;93 1.5;120 6.5];     % 经纬度的坐标点
startYear = 2017;endYear = 2019;    % 数据起始年份%遍历文件夹找寻下载的NetCDF文件
j = 1;
for year = startYear : endYear  % 遍历年份maindir = ['I:\feng_liu_data\datset\' num2str(year) '\'];   % nc文件的路径,是年份再上一级的路径,因为我的路径是:I:\feng_liu_data\datset\里面有三个文件夹(2017、2018、2019),每个年份文件夹里有12个月文件夹,每个文件夹里才是NC文件subdir =  dir( maindir );      % 读取maindir文件夹中的所有文件名,返回一列for i = 1 : length( subdir )if( isequal( subdir( i ).name, '.' ) || ...isequal( subdir( i ).name, '..' ) || ...~subdir( i ).isdir )   % 如果不是目录跳过continue;endsubdirpath1 = fullfile( maindir, subdir( i ).name, '*.nc' );file = dir( subdirpath1 );   % 在这个子文件夹下找后缀为nc的文件    for jj = 1 : length( file )  % 遍历文件filedir{j} = fullfile( maindir, subdir( i ).name);  % 保存文件目录filepath{j} = fullfile( maindir, subdir( i ).name, file( jj ).name  );  % 保存文件路径filename{j} =  file(jj).name;       % 保存文件名字j = j + 1;endend
end% 建立一些空的变量,用来记录所有时间下的数据
year_u10 = [];year_v10 = [];year_tp = [];year_tcwv = [];year_time = [];month = 1;thisYear = startYear;
for i = 1 : j-1% 读取NC文件的时间、经纬度time = ncread(filepath{i},'time'); longitude = ncread(filepath{i},'longitude');latitude = ncread(filepath{i},'latitude');% 找到对应坐标下的序号for k = 1 : size(point,1)index_lon(k) = (point(k,1)/0.25)+1;index_lat(k) = (90-point(k,2))/0.25+1;end% 读取要保存的信息u10 = ncread(filepath{i},'u10');v10 = ncread(filepath{i},'v10');tp = ncread(filepath{i},'tp');tcwv = ncread(filepath{i},'tcwv');% 将对应经纬度下的所有时间变量数据筛选出存入下面变量中new_u10 =[];new_v10 =[];new_tp =[];new_tcwv =[];for k = 1 : size(point,1)new_u10(k,:) = u10(index_lon(k),index_lat(k),:);new_v10(k,:) = v10(index_lon(k),index_lat(k),:);new_tp(k,:) = tp(index_lon(k),index_lat(k),:);new_tcwv(k,:) = tcwv(index_lon(k),index_lat(k),:);end% 写入到刚刚这些变量,用于最后输出year_u10 = [year_u10 new_u10];year_v10 = [year_v10 new_v10];year_tp = [year_tp new_tp];year_tcwv = [year_tcwv new_tcwv];% 记录时间n = length(time);thisTime = num2str(thisYear*10000 + month*ones(n,1)*100 + [1:n]');%根据已有数据是2017年到2019年,按照time个数推算日期year_time = [year_time;thisTime];%计算月份month = month + 1;if month == 13   %判断一年是否结束thisYear = thisYear + 1;month = 1;end
endq=[];r=[];%用来存放输出EXCLE的名称的坐标点
for k = 1 : size(point,1)data = cell( length(year_time)+1,5);%由于存在文本和数字,建立cell元胞数组data{1,1} = '时间';data{1,2} = 'u10';data{1,3} = 'V10';data{1,4} = 'tp';data{1,5} = 'tcwv';%表头存入元胞数组第一行中for i = 1 : length(year_time)data(i+1,:) = {year_time(i,:) year_u10(k,i)' year_v10(k,i)' year_tp(k,i)' year_tcwv(k,i)'};q = point(k);r = point(3+k);endxlswrite(['I:\feng_liu_data\result\' 'point' '(' num2str(q) ',' num2str(r) ')' '.xlsx'],data)
end

六、提取结果

七、总结

静下心认真思考,相信你可以。

利用Matlab编程实现对NetCDF数据针对某一坐标按时间提取风、流、水蒸气等变量信息相关推荐

  1. ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类

    ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类 目录 输出结果 实现代码 输出结果 先看文档分类后的结果,一共得到五类电影: 实现代码 # -*- c ...

  2. matlab 进行非线性回归,5.利用Matlab编程进行非线性回归分析.doc

    5.利用Matlab编程进行非线性回归分析.doc §5. 利用Matlab编程计算非线性回归模型 --以Logistic曲线为例 1.原始数据 下表给出了某地区1971-2000年的人口数据(表1) ...

  3. ML之nyoka:基于nyoka库利用LGBMClassifier模型实现对iris数据集训练、保存为pmml模型并重新载入pmml模型进而实现推理

    ML之nyoka:基于nyoka库利用LGBMClassifier模型实现对iris数据集训练.保存为pmml模型并重新载入pmml模型进而实现推理 目录 基于nyoka库利用LGBMClassifi ...

  4. ML之DT:利用DT(DTC)实现对iris(鸢尾花)数据集进行分类并可视化DT结构

    ML之DT:利用DT(DTC)实现对iris(鸢尾花)数据集进行分类并可视化DT结构 目录 输出结果 实现代码 输出结果 实现代码 #1. iris = load_iris() dir(iris)ir ...

  5. Matlab:利用Matlab编程实现模拟分子布朗运动的动画展示

    Matlab:利用Matlab编程实现模拟分子布朗运动的动画展示 目录 输出结果 实现代码 输出结果 实现代码 %Brownian motion clf; n=20; s=0.02; x = rand ...

  6. ML之H-Clusters:基于H-Clusters算法利用电影数据集实现对top 100电影进行文档分类

    ML之H-Clusters:基于H-Clusters算法利用电影数据集实现对top 100电影进行文档分类 目录 输出结果 实现代码 输出结果 先看输出结果 实现代码 # -*- coding: ut ...

  7. idft重建图像 matlab_利用 MATLAB 编程,打开一幅图像,对其进行 DFT 变换,并置其不同区域内的系数为零,进行 IDFT ,观察其输出效果。_学小易找答案...

    [连线题]请对正确的快键键连线 [判断题]板书是指教师在课堂黑板或白板上书写,将教学内容形象.直观.简洁地传授给学生.清晰.流畅.快速的粉笔书写是课堂板书的基本功. [其它]利用 MATLAB 编程, ...

  8. 使用Python实现对excel数据的处理

    前言 **使用Python实现对excel数据的处理, 预先知识简单介绍 xlrd中 # File_Path是Excel路径,打开Excel工作蒲 workbook = xlrd.open_workb ...

  9. 环形网络潮流计算matlab,利用matlab编程计算任意环形网络牛拉法潮流计算程序

    环形网络潮流计算matlab,利用matlab编程计算任意环形网络牛拉法潮流计算程序,程序通用性强,通过修改参数可以得到任意节点和网络的环形网络牛拉法潮流计算. YID:696064261479453 ...

最新文章

  1. 计算机教师专业发展论文,关于教师专业发展的计算机专业论文
  2. 计算机组成原理中英对照篇,信息科学系课程介绍(中英对照).doc
  3. Bash shell脚本练习(一)
  4. WPF4.5 Cockbook - Chapter8(Style, Triggers and Control Template)
  5. mysql+美团点评_MySQL之安装美团点评的SQLAdvisor
  6. Java 高效编程之 Builder 模式
  7. 20145213《信息安全系统设计基础》第二周学习总结
  8. 236.Lowest Common Ancestor of a BinaryTree
  9. EF6.0新特性-DbCommandInterceptor实现非SQL端读写分离
  10. error: two or more data types in declaration specifiers原因及解决方法
  11. 【树上贪心】Tree with Small Distances【codeforces-Round #506-div3-E】
  12. 初学者想自学单片机需要买什么呢?
  13. Young不等式的一个新证明
  14. PPT里快速插入上下角标
  15. “夏栀的博客”网站一期建站通知贴
  16. String类题目methods总结
  17. 计算机显示器的标准是什么,电脑显示器的标准相位是多少啊
  18. 数模2019暑期培训Day1
  19. 分享md5解密站源代码,简单的代码就可以实现md5解密
  20. 线性代数——矩阵的秩

热门文章

  1. 设置标签位置:Excel图表学习记第13课
  2. CSS 设置字体大小用法介绍
  3. 日本語を勉強する日記 十八回目
  4. simulink降维观测器设计_基于MATLAB的状态观测器设计.doc
  5. simulink降维观测器设计_现代控制理论线性系统入门(九)设计状态观测器
  6. Excel多Sheet拆分与合并 - 亲测可用
  7. 6.18! 当当网推出购书优惠活动满400减230!有效优惠码更新
  8. mysql tpch_GitHub - staticor/tpch-mysql
  9. java 地图定位_利用百度地图进行定位
  10. 常用数据类型打印格式