提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
GlobSnow-2 SWE数据的下载与提取(2_数据提取)
前言
紧接上文的数据下载,本篇内容主要介绍利用Matlab来提取GlobSnow的SWE数据。
前文链接:【积雪数据】GlobSnow-2 SWE数据的下载与提取(1_数据下载)
提示:以下是本篇文章正文内容,下面案例可供参考
一、数据检查/查看数据信息
方法/软件
方法1:Panoply
Panoply是由美国NASA出品的一款可以用来打开与查看NetCDF、HDF、GRIB等多种格式文件的软件。
软件地址及网站页面:https://www.giss.nasa.gov/tools/panoply/
软件安装可以参看本篇文章: https://blog.csdn.net/ch206265/article/details/103516883
> 数据页面展示
可以清楚、便捷的查看NC文件及其变量的详细信息,双击变量名便可以进一步查看数据,如SWE_avg:
方法2:Matlab
直接使用Matlab的命令行进行NC文件信息的查阅。目前可以使用函数有ncinfo、ncdisp等,同样以1979年9月的数据作为展示:
> ncdisp
> ncinfo
需要先将数据信息保存到变量中,然后打开Info的详情页,双击字段即可查看详细信息。
Info = ncinfo('197909.nc');
提取数据之前先查看数据信息主要是为了获取以下信息:
- 文件中包含的变量名称:这里需要到的变量分别为纬度(lat)、经度(lon)和雪水当量数据(SWE_avg, SWE_max)
- 需要用到/处理的变量的数据结构:每个变量都是721 * 721的二维数组
二、数据提取(Matlab)
数据提取代码如下:
clc;
clear;
save_path = 'F:\Globsnow_2.0\result\'; %设置保存输出结果的路径
files = dir('*.nc'); %遍历所有的文件,并将其信息保存至files变量
Lat = ncread(files(1).name,'lat'); %读取第一个文件的纬度数据
Lon = ncread(files(1).name,'lon'); %读取第一个文件的经度数据
% 将所有nc文件合并为一个三维数组,方便数据的提取
for i = 1 : length(files)
data_avg = ncread(files(i).name,'SWE_avg');
data_max = ncread(files(i).name,'SWE_max');
all_avg(:,:,i) = data_avg; %将每个月的SWE_avg依次保存至第三维
all_max(:,:,i) = data_max; %同上
end
% 分别设置需要提取的行(j)与列(k)的范围,这里对所有网格进行了提取
for j = 1 : 721
for k = 1 : 721
result = [];
grid_lat = Lat(j,k); %确定当前网格的纬度
grid_lon = Lon(j,k); %确定当前网格的经度
SWE_avg = all_avg(j,k,:);
SWE_max = all_max(j,k,:);
result = [SWE_avg,SWE_max];
path = [save_path,'data_',num2str(grid_lat,'%.4f'),'_',num2str(grid_lon,'%.4f')]; %设置输出结果的文件名,这里以经纬度作为输出的文件名
result = (squeeze(double(result)))'; % 对result进行转置,使其成为多行2列的一个二维数组
dlmwrite( path ,result,'delimiter','\t','precision', '%.4f');
%fprintf('Row %d,Cloumn %d is done!\n',j,k); %在屏幕中输出当前进度
end
end
> 输出结果展示
每个文件内分别包含两列数据,分别为各月的SWE_avg和SWE_max
总结
简要介绍了如何用matlab提取雪水当量数据