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读取好后,可以右键图层导出数据,导出时可以在属性里面修改所要导出数据的时间。如下图:
在这里插入图片描述
在这里插入图片描述

用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批量读取nc文件转换为tif,可以按照以下步骤进行操作: 首先,需要确保Matlab已经安装了NetCDF工具箱,这样才能读取nc文件。如果没有安装,可以通过在Matlab中运行`ver`命令来检查是否安装了NetCDF工具箱。如果没有安装,可以通过Matlab的插件管理器安装该工具箱。 接下来,可以创建一个文件夹用于存储转换后的tif文件。例如,可以创建一个名为"tif_files"的文件夹。 然后,可以使用Matlab的dir函数获取指定文件夹中所有的nc文件。可以使用绝对路径或相对路径指定文件夹的位置,例如: ``` nc_files = dir('path_to_nc_files/*.nc'); ``` 接下来,使用一个循环来遍历所有的nc文件将它们转换为tif。可以使用Matlabncinfo函数读取nc文件的信息,例如: ``` for i = 1:length(nc_files) nc_file = nc_files(i).name; nc_info = ncinfo(nc_file); % 获取需要转换为tif的数据变量名称,例如变量名为"temperature"。 % 这需要根据nc文件的具体结构来确定。 data_variable = 'temperature'; % 读取数据变量的内容 nc_data = ncread(nc_file, data_variable); % 将数据变量保存为tif文件 tif_file = fullfile('tif_files', nc_file(1:end-3) + ".tif"); imwrite(nc_data, tif_file); end ``` 在上述代码中,首先获取nc文件的名称,使用ncinfo函数获取nc文件的信息。然后,指定需要转换为tif的数据变量的名称,例如"temperature"。通过ncread函数读取数据变量的内容,使用imwrite函数将数据保存为tif文件。 最后,通过循环遍历所有的nc文件将它们转换为tif文件保存在之前创建的"tif_files"文件夹中。
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GISerQ.

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值