matlab实现nc文件批量转tif文件

(1)成功运行例子:(PM1)

MATLAB:读取nc文件并将nc文件转为tif文件输出_BetterQ.的博客-CSDN博客_nc文件转tif

clc
clear 
%% 批读取NC文件的准备工作
datadir = 'F:\transfer\try\PM\'; %指定批量数据所在的文件夹
filelist = dir([datadir,'*.nc']);    %列出所有满足指定类型的文件
% a = filelist(1).name               %查看要读取的文件的编号
% b = filelist(2).name
k=length(filelist);
for i = 1:48  %依次读取并处理,按照文件夹内文件的顺序读取
    
    %% 批量读取NC文件
    ncFilePath = ['F:\transfer\try\PM\',filelist(i).name]; %设定NC路径
    num = filelist(i).name(28:33); %读取数据编号,以便于保存时以此编号储存tif
      
    %% 读取变量值
    %根据ncdisp函数读取到的nc文件变量相应替换
    lon=ncread(ncFilePath,'lon');     %读取经度信息(范围、精度)
    lat=ncread(ncFilePath,'lat');      %读取维度信息
    time=ncread(ncFilePath,'time');         %读取时间序列
    DUS=ncread(ncFilePath,'DUSMASS25');   %获取温度数据 
   
    %% 展示数据内部结构等信息
     %figure(i);
     pcolor(lat,lon,DUS);
     shading flat;                        %移除网格线,否则图上一片黑什么都没有
     [x,y]=meshgrid(lon,lat);             %根据经纬度信息产生格网,3600列(经度),1800列(纬度)
     phandle=pcolor(x,y,DUS');        %显示一个矩阵,其中x,y,sum_pre的行列数必须一致
     shading flat;
     colorbar
   
    %% 存为tif格式
    data=flipud(rot90(DUS,1));   %镜像反转,不反转的话最后的图像的南北朝向是错的
                                 %逆时针旋转90° 
    %georasterref 绘制地理栅格数据(raster data);double双精度浮点数,保留16位有效数字
    R = georasterref('RasterSize', size(data),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);
    %geotiffwrite geotiff栅格影像保存
    geotiffwrite(['F:\transfer\try\PM\PMtry\',num,'.tif'],data,R);
    disp([num,'done']);  %输出
    
end
disp('Done!')

a. 读取文件相关信息:

matlab实现nc文件批量转tif文件_第1张图片

相关文章链接:matlab读取hdf文件_地理人,你会用Matlab吗???_jck?????的博客-CSDN博客

b. 转换过程遇到问题:

解决方法:F:\transfer\try\PM\ (在最后加上\)

c. 读取变化量后将其写出:使用xlswrite函数,单变量转出,单波段转出(多维数据该如何转出呢???)

matlab实现nc文件批量转tif文件_第2张图片

敲敲:个人使用多维工具中的创建NetCDF栅格图层,结果好像更明显(可能是值缩小的原因),好像不存在图像翻转的问题,待验证,以及python脚本没有运行出来,呜呜

Arcgis的创建NetCDF栅格图层结果:

matlab实现nc文件批量转tif文件_第3张图片

matlab创建的tif图层:

matlab实现nc文件批量转tif文件_第4张图片

(2)成功的例子:(PM2)

nc文件转tif格式输出 Matlab代码

跟上面例子用matlab转成tif的例子生成结果一致,但与Arcgis的多维工具中的创建NetCDF栅格图层存在一定的偏移(靠右边了一点点)

(3)nasa官网上提供的读取并绘制NetCDF数据的脚本(PM3)

% 该脚本将在MATLAB中读取并绘制NetCDF数据
% 定义数据文件。如果需要,添加目录路径

file = 'MERRA2_100.tavgM_2d_flx_Nx.198001.nc4';
% 取消注释以显示元数据信息
%显示文件

% 实际变量
var1 = ncread(file, 'PRECTOTCORR');
% MATLAB数据以(Y,X)为导向,但数据写成(X,Y)
% rot90和fliplr功能正确地定位数据
var1 = rot90(fliplr(var1));
lats = ncread(file, 'lat');
lons = ncread(file, 'lon');
% ========== 输出图表 ========================
pcolor(lons,lats,var1(:,:,1));
% 平面着色渲染
shading flat
% colorbar显示色条
c = colorbar;
ylabel(c,'PRECTOTCORR')
% 使用load coast加载世界海岸线经纬度lat,long的值
load coast
hold on
plot(long,lat,'black')
title('MERRA-2 PRECTOTCORR')
xlabel('degrees longitude')
ylabel('degrees latitude')

(4)其他matlab转化文章:

a. matlab将nc数据转换为tif_学习、分享-CSDN博客_nc转tif(PM4)

出错:size函数用于求矩阵的大小(https://mbd.baidu.com/ma/s/ozTfCRCY)

matlab实现nc文件批量转tif文件_第5张图片

修改代码后成功输出:(自我理解修改)

matlab实现nc文件批量转tif文件_第6张图片

输出图形结果并不对(黑带,可能只读取了经度下的DUS值,因为同经度的值是一致的)

(5)单个nc转成tif文件

使用matlab将nc文件转成tif文件_Matlabonly的博客-CSDN博客_matlabnc转tiff

你可能感兴趣的:(matlab,开发语言,数据分析)