MATLAB:读取nc文件并将nc文件转为tif文件输出

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读取好后,可以右键图层导出数据,导出时可以在属性里面修改所要导出数据的时间。如下图:
MATLAB:读取nc文件并将nc文件转为tif文件输出_第1张图片
MATLAB:读取nc文件并将nc文件转为tif文件输出_第2张图片

用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格式文件了。

你可能感兴趣的:(MATLAB,matlab,nc文件读取,ArcGIS,输出为tif文件,批量处理)