一、NC文的读取
ncread语法规则
vardata = ncread(source,varname)
vardata = ncread(source,varname,start,count,stride)
功能:读取 NetCDF 数据源中的变量数据
代码语言:javascript复制NcPath='01.nc';
lon1 =ncread(NcPath,'lon'); %读取lon所有数据
lon2 =ncread(NcPath,'lon',2,3,4); %从lon[2]开始,按间隔4,共读取3个数据
二、创建NC文件
(1) netcdf语法规则
1. ncid = netcdf.create(filename, mode)
①作用:创建新的NetCDF file
②常用mode:
'CLOBBER':覆盖现有文件
'NOCLOBBER':不覆盖现有文件
'SHARE':更新现有文件
③返回值ncid是文件的ID
2. ncid = netcdf.open(filename, mode)
①作用:打开NetCDF file
②常用mode:
'WRITE':读写
'SHARE':更新
'NOWRITE':只读
3. netcdf.endDef(ncid)
作用:结束NetCDF file定义模式
4. netcdf.close(ncid)
作用:关闭NetCDF file
(2) 维函数与变量函数
dimid = netcdf.defDim(ncid,dimname,dimlen)
%定义NetCDF 维度
varid = netcdf.defVar(ncid,varname,xtype,dimids)
%创建NetCDF 变量
netcdf.putVar(ncid,varid,data)
%对变量写入数据
代码语言:javascript复制dimidlat= netcdf.defDim(ncid,'latitude',180); %定义名为大小为180的latitude的维度
varid=netcdf.defVar(ncid,'lat','double',dimidlat); %创建该维度下的lat变量
netcdf.putVar(cid,varid,lat); %写入lat
NC文件创建与保存实例演示
代码语言:javascript复制%创建NetCDF file
cid=netcdf.create('01.nc', 'CLOBBER');
%待写入数据
lon=-180:5:180;
lat=-87.5:2.5:87.5;
m=length(lon);
n=length(lat);
h=rand(n,m);
%定义维度
dimidlon=netcdf.defDim(cid,'lon',m);
dimidlat=netcdf.defDim(cid,'lat',n);
%创建变量
varid1=netcdf.defVar(cid,'lon','double',dimidlon); %一维
varid2=netcdf.defVar(cid,'lat','double',dimidlat); %一维
varid3=netcdf.defVar(cid,'h','double',[dimidlon dimidlat]); %二维
%结束NetCDF file定义模式
netcdf.endDef(cid);
%写入变量
netcdf.putVar(cid,varid1,lon);
netcdf.putVar(cid,varid2,lat);
netcdf.putVar(cid,varid3,h');
%关闭NetCDF file
netcdf.close(cid);
三、拓展:利用GMT对NC文件中的格网数据插值
可以利用GMT对生成的.nc格式文件进行自动插值,并可以选择插值精度,十分方便,如下是对某网格数据插值实现的。
代码语言:javascript复制gmt begin Test png
gmt basemap -JX15c/8c -R-180d/180d/-87.5d/87.5d -Bx60 -By30 -BWSrt
gmt makecpt -Cjet -T0/70/5
gmt grdimage 01.nc -E1000 %核心
gmt colorbar -C -Bx10 -By l"TECu" -DJMR v o1c/0c
gmt end
结果图
本例之所以提到GMT,一方面是因为GMT绘图质量比matlab高,且代码简单;另一方面,matlab可以和GMT联合编程,有兴趣的小伙伴可以学习GMT。
祝大家五一节快乐!
本文推荐指数:★★☆ (5/10分)
好不好用只有用了才知道!若觉得好,别忘分享给和您一样爱学习研究的小伙伴哦!