m_map绘制地形图时,虽然自带有1°的地形图以及从NOAA下载的1分的地形图(详见:Matlab下地形图绘图包m_map安装与使用),但有时需要对地形图分辨率的要求更高,便无法满足。
此时,需要导入本地地形数据文件,例如多波束测深。
这里以从https://www.ncei.noaa.gov/maps/grid-extract/下载的15秒地形数据为例,展示如何导入本地地形数据并绘图。
关键函数为m_shadedrelief
。
1. 1分的分辨率地图
m_proj('mercator','long',[118 124],'lat',[20 24]);
caxis([-6000 6000])
colormap(slanCM('terrain'))
hc=colorbar;
set(get(hc,'title'),'string','Elevation(m)')
set(hc,'tickdir','out')
m_etopo2('shadedrelief','lightangle',45,'gradient',5);
m_gshhs('ic','color','k')
m_grid('box','on','tickdir','out','gridlines','no')
set(gcf,'position',[10 10 1200 800])
figname='test1'
print('-dpng','-r1000',[figname,'.png']) % 导出png图片
结果如下:
2. 15秒的分辨率地图
load('scs_elevation.mat')
elev=flipud(elev);
lonlim=[extent(1:2)]
latlim=[extent(3:4)]
[nlat,nlon]=size(elev);
Lon=[linspace(lonlim(1),lonlim(2),nlon)];
Lat=[linspace(latlim(1),latlim(2),nlat)]';
m_proj('mercator','long',[118 124],'lat',[20 24]);
caxis([-6000 6000])
colormap(slanCM('terrain'))
hc=colorbar;
set(get(hc,'title'),'string','Elevation(m)')
set(hc,'tickdir','out')
m_shadedrelief(Lon,Lat,elev,'lightangle',45,'gradient',5)
m_gshhs('ic','color','k')
m_grid('box','on','tickdir','out','gridlines','no')
set(gcf,'position',[10 10 1200 800])
figname='test2'
print('-dpng','-r600',[figname,'.png']) % 导出png图片
- 可见15秒分辨率地图比1分地图能显示更多细节。
注:绘图色标参考自:https://blog.csdn.net/slandarer/article/details/127719784