NC(NetCDF network Common Data Form,译为“网络通用数据格式”) 文件是将多个时段的数据存储在一个文件当中。
内容格式如下:
•从数学上来说,netcdf存储的数据就是一个多自变量的单值函数。用公式来说就是f(x,y,z,…)=value;
•函数的自变量x,y,z等在netcdf中叫做维(dimension) 或坐标轴(axix),
•函数值value在netcdf中叫做变量(Variables).
一个Netcdf文件的结构包括以下对象:
•变量(Variables) :变量对应着真实的物理数据。
•维(dimension):一个维对应着函数中的某个自变量,或者说函数图象中的一个坐标轴,在线性代数中就是一个N维向量的一个分量。
•属性(Attribute) :属性对变量值和维的具体物理含义的注释或者说解释。
在处理的时候,可以使用ArcGIS读取并进行处理。
使用ArcGIS工具里的多维工具->创建NetCDF栅格图层来读取nc文件,使用ArcGIS读取好后,可以右键图层导出数据,导出时可以在属性里面修改所要导出数据的时间。如下图:
用ArcGIS处理的时候会比较麻烦,所以可以用matlab批量读取并保存为tif格式文件。
在读取前,首先在matlab控制窗口输入ncdisp(filepath),filepath为文件路径,如ncdisp(‘E:\data\降水气温数据\2000.nc’),读取后将相应的变量名称在下面代码中替换即可。
具体实现代码如下:
clc
clear all
%% 批读取NC文件的准备工作
datadir = 'E:\data\降水气温数据\'; %指定批量数据所在的文件夹
filelist = dir([datadir,'*.nc']); %列出所有满足指定类型的文件
% a = filelist(1).name %查看要读取的文件的编号
% b = filelist(2).name
k=length(filelist);
for i = 1:56 %依次读取并处理,按照文件夹内文件的顺序读取
%% 批量读取NC文件
ncFilePath = ['E:\data\降水气温数据\',filelist(i).name]; %设定NC路径
num = filelist(i).name(24:27); %读取数据编号,以便于保存时以此编号储存tif
%% 读取变量值
%根据ncdisp函数读取到的nc文件变量相应替换
lon=ncread(ncFilePath,'Longitude'); %读取经度信息(范围、精度)
lat=ncread(ncFilePath,'Latitude'); %读取维度信息
time=ncread(ncFilePath,'time'); %读取时间序列
pre=ncread(ncFilePath,'Temperature'); %获取温度数据
sum_pre=sum(pre,3)/12.0; %求年平均温度
%% 展示数据内部结构等信息
%figure(i);
pcolor(lat,lon,sum_pre);
shading flat; %移除网格线,否则图上一片黑什么都没有
[x,y]=meshgrid(lon,lat); %根据经纬度信息产生格网,3600列(经度),1800列(纬度)
phandle=pcolor(x,y,sum_pre'); %显示一个矩阵,其中x,y,sum_pre的行列数必须一致
shading flat;
colorbar
%% 存为tif格式
data=flipud(rot90(sum_pre,1)); %镜像反转,不反转的话最后的图像的南北朝向是错的
%逆时针旋转90°
R = georasterref('RasterSize', size(data),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);
geotiffwrite(['E:\data\降水气温数据\',num,'.tif'],data,R);
disp([num,'done'])
end
disp('Done!')
根据以上代码就可以批量对NC文件读取并处理,最后输出为TIFF格式文件了。