(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读取hdf文件_地理人,你会用Matlab吗???_jck?????的博客-CSDN博客
b. 转换过程遇到问题:
解决方法:F:\transfer\try\PM\ (在最后加上\)
c. 读取变化量后将其写出:使用xlswrite函数,单变量转出,单波段转出(多维数据该如何转出呢???)
敲敲:个人使用多维工具中的创建NetCDF栅格图层,结果好像更明显(可能是值缩小的原因),好像不存在图像翻转的问题,待验证,以及python脚本没有运行出来,呜呜
Arcgis的创建NetCDF栅格图层结果:
matlab创建的tif图层:
(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)
修改代码后成功输出:(自我理解修改)
输出图形结果并不对(黑带,可能只读取了经度下的DUS值,因为同经度的值是一致的)
(5)单个nc转成tif文件
使用matlab将nc文件转成tif文件_Matlabonly的博客-CSDN博客_matlabnc转tiff