M_Map绘图笔记——实用案例(三)

引言

这篇博文将结合官网中提供的案例进行测试和总结。以及安装GSHHS和TerrainBase, 这两个组件都不是必要安装,如果需要可以选择性的安装。

GSHH安装

该安装不是必要安装,如果需要高精度海岸线等数据可以选择安装。不安装会影响案例九的使用。案例九,不包含GSHH时会提示如下警告:

警告: Coastline file private/gshhs_f.b not found \n(Have you installed it? See the M_Map User's Guide for details)\n
---Using default coastline instead 
> In mu_coast>get_coasts (line 460)
  In mu_coast (line 101)
  In m_gshhs (line 114)
  In m_gshhs_f (line 28)
  In Untitled2 (line 47) 

下载GSHH安装包,下载链接http://www.ngdc.noaa.gov/mgg/shorelines/data/gshhs/

下载gshhg-bin-2.3.7.zip或最新版,并解压,将gshhs_*.b, wdb_borders_*.b, and wdb_rivers_*.b (分别时海岸线、边界和河流)拷贝到D:\Program Files (x86)\Matlab2018a\toolbox\m_map\private文件夹内,即完成安装。

如果是自己定义的目录,需要在m_gshhs.m中的FILNAME变量添加绝对路径即可。

% Root of directories where all the gshhs_X.b, wdb_borders-X.b and wdb_rivers_X.b
% files live
% FILNAME='private/';
FILNAME='D:\Program Files (x86)\Matlab2018a\toolbox\m_map\private\';

注意:如果将gshhs_*.b, wdb_borders_*.b, and wdb_rivers_*.b 直接拷贝到private后依然会提示警告,可以修改FILNAME解决。

TerrainBase 安装

(1)下载
M_Map没有包含高分辨率的高程数据库,因为这样会增加M_Map包。
下载TerrainBase 安装包,下载链接http://dss.ucar.edu/datasets/ds759.2/
首先需要注册,注册后可以下载。下载tbase.Z文件解压后大小为53.8M。
(2)转换
使用m_tba2b.m转换ASCII tbase文件到二进制tbase.int文件。

m_tba2b('PATHNAME') %PATHNAME 下载的tbase文本文件路径

实际代码:

m_tba2b('C:\Users\Lily\Desktop\tbase')

运行这个代码会出错,还要修改m_tba2b.m文件中的路径。
运行 edit m_tba2b.m打开该文件进行修改。将m_tba2b.m文件中的第36行代码修改为绝对路径即可。

fid=fopen('C:\Users\Lily\Desktop\tbase\tbase','rt');

(3)编译成功
删除文本的tbase文件,将编译好的tbase.int文件拷贝到toolbox m_map路径里(或者自己定义的路径),如下:

D:\Program Files (x86)\Matlab2018a\toolbox\m_map\tbase

修改m_tbase.m文件中的第31行代码PATHNAME变量中的路径为tbase.int的所在路径,如下:

PATHNAME='D:\Program Files (x86)\Matlab2018a\toolbox\m_map\tbase\';

(4)测试
使用案例7中的测试代码可以验证。

案例

运行m_proj('set') 可以得到m_map所有投影类型。
运行下列代码可以得到该投影的参数设置信息。

m_proj('proj name')
m_proj('get')
案例1——M_Map 标志
m_proj('ortho','lat',48','long',-123'); %正射投影,指定中央经纬度, 可以使用完整名称:Orthographic
m_coast('patch','r'); %用红色填充陆地部分
m_grid('linest','-','xticklabels',[],'yticklabels',[]); %线型可以选择:'-' | '--' | ':' | '-.' | 'none'

% Matlab自带函数进行填充和文本
patch(.55*[-1 1 1 -1],.25*[-1 -1 1 1]-.55,'w'); 
text(0,-.55,'M\_Map','fontsize',25,'color','b',...
    'vertical','middle','horizontal','center');
案例2——兰伯特投影下的北美地形图
clf
m_proj('lambert','long',[-160 -40],'lat',[30 80]); %设置投影和经纬度范围
m_coast('patch',[1 .85 .7]); %填充陆地颜色
m_elev('contourf',[500:500:6000]);  %加载高程数据,绘制等高线
m_grid('box','fancy','tickdir','in'); %绘制边框属性
colormap(flipud(copper)); %颜色映射
% colormap(jet)

案例3——北极地区赤平投影

一种等角正割椭球方位投影,常用于南北纬80°以上地区绘图。

% 注意海岸线是绘制在网格线之上(覆盖绘图)与调用顺序有关

m_proj('stereographic','lat',90,'long',30,'radius',25); %设置投影中心和半径,投影半径为25度
m_elev('contour',[-3500:1000:-500],'edgecolor','b'); %设置等高线颜色
m_grid('xtick',12,'tickdir','out','ytick',[70 80],'linest','-'); %设置xtick个数,边框和ytick值,线型
m_coast('patch',[.7 .7 .7],'edgecolor','r'); %设置海岸线颜色、陆地填充颜色
案例4——全球海洋两种独立投影
clf
subplot(211); %设置绘图区,二行一列,第一个图区
Slongs=[-100 0;-75 25;-5 45; 25 145;45 100;145 295;100 290];    %为七个子图设置经度区域
Slats= [   8 80;-80  8;  8  80;-80   8; 8   80;-80   0; 0 80];  %为七个子图设置纬度区域
for l=1:7
    m_proj('sinusoidal','long',Slongs(l,:),'lat',Slats(l,:));
    m_grid('fontsize',6,'xticklabels',[],'xtick',[-180:30:360],...
                'ytick',[-80:20:80],'yticklabels',[],'linest','-','color',[.7 .7 .7]);
    m_coast('patch','g');
end
xlabel('Interrupted Sinusoidal Projection of World Oceans');

set(gca,'xlimmode','auto','ylimmode','auto'); % 为了看见全部地图,必须撤销m_grid调用的坐标限制
subplot(212); %设置绘图区,二行一列,第二个图区
Slongs=[-100 43;-75 20; 20 145;43 100;145 295;100 295];
Slats= [  0  90;-90  0;-90   0; 0  90;-90   0;  0  90];
for l=1:6
    m_proj('mollweide','long',Slongs(l,:),'lat',Slats(l,:));
    m_grid('fontsize',6,'xticklabels',[],'xtick',[-180:30:360],...
                'ytick',[-80:20:80],'yticklabels',[],'linest','-','color','k')
    m_coast('patch',[.6 .6 .6]);
end
xlabel('Interrupted Mollweide Projection of World Oceans');
set(gca,'xlimmode','auto','ylimmode','auto');
案例5——斜轴墨卡托投影的矢量箭头图和等值线图
clf
[lon,lat]=meshgrid([-136:2:-114],[36:2:54]);
u=sin(lat/6);
v=sin(lon/6);

m_proj('oblique','lat',[56 30],'lon',[-132 -120],'aspect',.8);
subplot(121); %设置绘图区域,一行二列,第一个子图
m_coast('patch',[.9 .9 .9],'edgecolor','none');
m_grid('tickdir','out','yaxislocation','right',...
            'xaxislocation','top','xlabeldir','end','ticklen',.02);
hold on;
m_quiver(lon,lat,u,v);  %绘制箭头,设置箭头的位置和方向
xlabel('Simulated surface winds');
subplot(122);
m_coast('patch',[.9 .9 .9],'edgecolor','none');
m_grid('tickdir','out','yticklabels',[],...
              'xticklabels',[],'linestyle','none','ticklen',.02);
hold on;
[cs,h]=m_contour(lon,lat,sqrt(u.*u+v.*v));
clabel(cs,h,'fontsize',8); %设置等值线上的label
xlabel('Simulated something else');
案例6——米勒投影的大圆
% 绘制一个圆形轨迹
clf
lon=[-180:180];
lat=atan(tan(60*pi/180)*cos((lon-30)*pi/180))*180/pi;
m_proj('miller','lat',82); %设置纬度的范围(纬度的上下限)
m_coast('color',[0 .6 0]);
m_line(lon,lat,'linewidth',1,'color','r'); %设置轨迹的宽度和颜色
m_grid('linestyle','none','box','fancy','tickdir','out');
案例7——兰伯特投影下的西地中海高分辨率水深
clf
m_proj('lambert','lon',[-10 20],'lat',[33 48]); 
[CS,CH]=m_tbase('contourf',[-5000:500:3000],'edgecolor','none');
m_grid('linestyle','none','tickdir','out','linewidth',3);

colormap([ m_colmap('blues',40); m_colmap('greens',24)]);
brighten(.5);

ax=m_contfbar(1,[.5 .8],CS,CH);
title(ax,{'Level/m',''}); % 将标题网上挪动

使用m_tbase需要安装TerrainBase 地形数据库。

警告: Cannot open /ocean/rich/more/mmapbase/tbase_5/tbase.int !! \n   Have you installed the TerrainBase database
correctly?\n   This (optional) database must be installed separately - see the M_Map user's guide for instructions\n
----Using default elevation database instead 
案例8——矢量展示方式

clf
m_vec; % 细节详见m_vec.m中代码

案例9——在爱德华王子岛上展示不同分辨率的海岸线
% 展示了默认的海岸线和爱德华王子岛部分放大
% 所有不同分辨率GSHHS海岸线

clf
axes('position',[.35 .6 .37 .37]);
m_proj('albers equal-area','lat',[40 60],'long',[-90 -50],'rect','on');
m_coast('patch',[0 1 0]);
m_grid('linestyle','none','linewidth',2,'tickdir','out',...
    'xaxisloc','top','yaxisloc','right','fontsize',6);
m_text(-69,51,'Standard coastline','color','r','fontweight','bold');
m_ruler([.5 .9],.8,3,'fontsize',8)

axes('position',[.09 .5 .37 .37]);
m_proj('albers equal-area','lat',[40 54],'long',[-80 -55],'rect','on');
m_gshhs_c('patch',[.2 .8 .2]);
m_grid('linestyle','none','linewidth',2,'tickdir','out',...
    'xaxisloc','top','fontsize',6);
m_text(-80,52.5,'GSHHS\_C (crude)','color','m','fontweight','bold');
m_ruler([.5 .9],.8,2,'fontsize',8);

axes('position',[.13 .2 .37 .37]);
m_proj('albers equal-area','lat',[43 48],'long',[-67 -58],'rect','on');
m_gshhs_l('patch',[.4 .6 .4]);
m_grid('linestyle','none','linewidth',2,'tickdir','out','fontsize',6);
m_text(-66.5,43.5,'GSHHS\_L (low)','color','m','fontweight','bold');
m_ruler([.5 .9],.8,3,'fontsize',8);

axes('position',[.35 .05 .37 .37]);
m_proj('albers equal-area','lat',[45.8 47.2],'long',[-64.5 -62],'rect','on');
m_gshhs_i('patch',[.5 .6 .5]);
m_grid('linestyle','none','linewidth',2,'tickdir','out',...
    'yaxisloc','right','fontsize',6);
m_text(-64.4,45.9,'GSHHS\_I (intermediate)   ','color','m',...
    'fontweight','bold','horizontalalignment','right');
m_ruler([.5 .8],.1,3,'fontsize',8);

axes('position',[.5 .1 .37 .37]);
m_proj('albers equal-area','lat',[46.375 46.6],'long',[-64.2 -63.7],'rect','on');
m_gshhs_h('patch',[.6 .7 .6]);
m_grid('linestyle','none','linewidth',2,'tickdir','out',...
    'xaxisloc','top','yaxisloc','right','fontsize',6);
m_text(-64.18,46.4,'GSHHS\_H (high)','color','m','fontweight','bold');
m_ruler([.5 .8],.2,3,'fontsize',8);

axes('position',[.55 .35 .37 .37]);
m_proj('albers equal-area','lat',[46.55 46.65],'long',[-63.97 -63.77],'rect','on');
m_gshhs_f('patch',[.7 .9 .7]);
m_grid('linestyle','none','linewidth',2,'tickdir','out',...
    'xaxisloc','top','yaxisloc','right','fontsize',6);
m_text(-63.95,46.56,'GSHHS\_F (full)','color','m','fontweight','bold');
m_ruler([.5 .8],.2,3,'fontsize',8);
案例10——UTM投影下的轨迹图
案例11——等距圆环
案例12——斑点状边界
案例13——蓝色海洋
clf
m_proj('miller','lat',[-77 77]); %设置米勒投影,和纬度边界
m_coast('patch',[.7 1 .7],'edgecolor','none'); % 海岸填充
m_grid('box','fancy','linestyle','-','gridcolor','w','backcolor',[.2 .65 1]); % 边框属性

%三个城市以及所在经纬度
cities={'Cairo','Washington','Buenos Aires'}; 
lons=[ 30+2/60  -77-2/60   -58-22/60];
lats=[ 31+21/60  38+53/60  -34-45/60];
%计算指定点到三个城市的距离,以及距离上差分后的经纬度值
for k=1:3
    [range,ln,lt]=m_lldist([-123-6/60 lons(k)],[49+13/60  lats(k)],40);
    m_line(ln,lt,'color','r','linewi',2);
    m_text(ln(end),lt(end),sprintf('%s - %d km',cities{k},round(range)));
end;
title('Great Circle Routes','fontsize',14,'fontweight','bold');

set(gcf,'color','w');   %这么做可以设置打印窗口背景为白色


案例14——阶梯式彩图
案例15
案例16
  • 26
    点赞
  • 155
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值