%{
author:wangjian
time:2019年8月
function:用于读取多幅hdf文件的叶绿素浓度,然后绘制图像,并保存为nc图像
注意: 由于本程序中给出的经纬度坐标存在问题,本程序在师姐的指导下,
选用了自己构造经纬度坐标,过程中采用了矩阵的转置和纵向翻转进行计算
(坐标系的不一致,图像坐标系采用左上角坐标系,经纬度坐标采用左下角坐标系)
%}
close all;clear;clc
addpath m_map
%图像的经纬度
lat_start=-45;lat_end=30 ;
lon_start=30;lon_end=150;
%在这里设置画图区域的经纬度
lat_min=21.75; lat_max=23.5;
lon_min=113.25; lon_max=114.5;
%设置colorbar的初始值和最大值
% colorbar_min=0;
% colorbar_max=0.04;
biaoti1='2011年';
biaoti2='月叶绿素a浓度分布图';
filepath=['E:\satellite\RS\2011\chl a\','*.hdf'];
path1='E:\satellite\RS\2011\chl a\';
path='E:\satellite\RS\2011\chl a\新建文件夹\';
list = dir(filepath);
n = length(list);
fileinfo =hdfinfo([path1,list(1).name]);
data_set_info = fileinfo.SDS;
% hdftool(filename);
for i = 1:n
mon_str=list(i).name(5:6);
data2=hdfread([path1,list(i).name],'l3m_data');
data1=data2';
data1=fliplr(data1);
[m,n]=size(data1);
lon=linspace(lon_start,lon_end,m);
lat=linspace(lat_start,lat_end,n);
xlon =find(lon>=lon_min & lon<=lon_max);
ylat =find(lat>=lat_min & lat<=lat_max);
lon_RS1 =lon(xlon);
lon_RS=lon_RS1';
lat_RS1 =lat(ylat);
lat_RS=lat_RS1';
data=data1(xlon,ylat);
data(data>10)=NaN;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%***********************用于存储BA为nc文件*******************
%**********创造一个nc文件****************
ncid = netcdf.create([path,biaoti1,mon_str,biaoti2,'.nc'],'NC_SHARE');
%***********定义Dimension***************
%dimid = netcdf.defDim(ncid,dimname,dimlen)
[n1,m1]=size(data);
dimidx = netcdf.defDim(ncid,'lon1',n1);
dimidy = netcdf.defDim(ncid,'lat1',m1);
dimidz = netcdf.defDim(ncid,'month',1);
%***********定义变量*******************
%varid = netcdf.defVar(ncid,varname,xtype,dimids)
lon1 =netcdf.defVar(ncid,'longitude','double', dimidx);
lat1=netcdf.defVar(ncid,'latitude','double', dimidy);
varid = netcdf.defVar(ncid,'chla','double',[dimidx dimidy dimidz]);
%**********完成netCDF文件定义模式****************
netcdf.endDef(ncid);
longitude=linspace(lon_min,lon_max,n1);
latitude=linspace(lat_min,lat_max,m1);
%把数据写到netcdf的文件中
netcdf.putVar(ncid,lon1,longitude);
netcdf.putVar(ncid,lat1,latitude);
netcdf.putVar(ncid,varid,data);
% %将保存的图像读取然后画图
path3=([path,biaoti1,mon_str,biaoti2,'.nc']);
% path3='E:\satellite\RS\2017\BA\201701细菌丰度空间分布图.nc';
ncdisp(path3);
lon3=ncread(path3,'longitude');
lat3=ncread(path3,'latitude');
data3=ncread(path3,'chla');
figure;
m_proj('miller','lon',[lon_min lon_max],'lat',[lat_min lat_max]); %主要用于确定投影方式
h=m_pcolor(lon3,lat3,data3');
% caxis([colorbar_min,colorbar_max]);
shading flat;
hold on;
% 注意m_contourf和m_pcolor第三个参数为lat*lon排列才对;
% m_contourf(LON,LAT,bacteria_abun');
% 注意,m_coast与m_pcolor不能同用,换成m_gshhs_h,原因未知;
% m_coast('patch',[.5 .5 .5],'edgecolor','k'); %划海岸线,并对非海岸线的进行填充
m_gshhs_i('patch',[0.5 0.5 0.5],'edgecolor','k'); %画高分辨率的海岸线
% m_elev; %添加地形水深数据
m_grid('box','fancy','xtick',6,'tickdir','out','yaxislocation','left','fontsize',12);
gg=colorbar('FontSize',10);
colormap(jet(10)) %这个主要用于设置colorbar颜色条的变化
set(get(gg,'Title'),'string',' ','FontSize',15);
%'xtick',(105:5:121),'ytick',(15:3:24);
% title([biaoti1,mon_str,biaoti2],'FontSize',15);
% xlabel('longitude(经度)','FontSize',12);
% ylabel('latitude(纬度)','FontSize',12);
% m_text(115',24','广东','fontsize',22);
m_text(120.2',23.2','台湾','fontsize',22);
% m_text(105.5',13','越南','fontsize',22);
m_text(120',16','菲律宾','fontsize',22);
m_text(109',19','海南','fontsize',22);
saveas(h,[path,biaoti1,mon_str,biaoti2,'.png']);
clear d*;
% clear data1 data2 data;
end
close all;
评论0
最新资源