介绍
这篇博客里将针对一些m_map函数进行讲解。在M_Map官方的用户向导里有详细的使用方法介绍。也可以从资源里下载中文版的用户向导手册。
基本用法
地图投影
%俄勒冈州/不列颠哥伦比亚省海岸线一部分
%斜墨卡托投影
m_proj('oblique mercator');
m_coast;
m_grid;
%经度用符号划分,东经为正,西经为负
%角度用十进制表示
m_proj用法
%设置投影属性
m_proj('oblique mercator','longitudes',[-132 -125], 'latitudes',[56, 40],'direction','vertical','aspect',0.5)
使用m_proj('set')
或者 m_proj set
得到投影列表
Available projections are:
Stereographic 赤平投影
Orthographic 正射投影
Azimuthal Equal-area 方位等面积投影
Azimuthal Equidistant 天定等距投影(等距方位投影)
Gnomonic 球心投影
Satellite 卫星投影
Albers Equal-Area Conic
Lambert Conformal Conic
Mercator 墨卡托投影
Miller Cylindrical 米勒圆柱投影
Equidistant Cylindrical 等距圆柱投影
Oblique Mercator 斜轴墨卡托投影
Transverse Mercator 横轴墨卡托投影
Sinusoidal 正弦投影
Gall-Peters 彼得斯投影
Hammer-Aitoff 哈默-埃托夫投影
Mollweide 摩尔魏特投影
Robinson 罗宾逊投影
UTM 通用横轴墨卡托投影
如何想得到这些投影可能的选项,可以在上述命令中添加投影的名称,如:
m_proj('set','stereographic')
运行结果
'Stereographic'
<,'lon<gitude>',center_long>
<,'lat<itude>', center_lat>
<,'rad<ius>', ( degrees | [longitude latitude] ) | 'alt<itude>', alt_frac >
<,'rec<tbox>', ( 'on' | 'off' | 'circle' )>
<,'rot<angle>', degrees CCW>
投影的更多细节,例如:查看正弦投影的默认参数,需要先初始化,然后使用get
选项
m_proj('Sinusoidal')
m_proj get
Current mapping parameters -
Projection: Sinusoidal (function: mp_tmerc)
longitudes: -90 30 (centered at -30)
latitudes: -65 65
Rectangular border: off
%设置填充和边界颜色
m_coast('patch',[.7,.7,.7],'edgecolor','r');
%使用get语法得到一系列选项使用方法
m_grid get
一般不用设置m_grid,默认就可以。
'box',( 'on' | 'fancy' | 'off' )
'xtick',( num | [value1 value2 ...])
'ytick',( num | [value1 value2 ...])
'xticklabels',[label1;label2 ...]
'yticklabels',[label1;label2 ...]
'xlabeldir', ( 'middle' | 'end' )
'ylabeldir', ( 'end' | 'middle' )
'ticklength',value
'tickdir',( 'in' | 'out' )
'tickstyle',('dm' | 'dd' )
'color',colorspec
'gridcolor',colorspec
'backgroundcolor',colorspec
'linewidth', value
'linestyle', ( linespec | 'none' )
'fontsize',value
'fontname',name
'XaxisLocation',( 'bottom' | 'middle' | 'top' )
'YaxisLocation',( 'left' | 'middle' | 'right' )
%假设在129W,48.5N显示和标注位置一个锚
%使用MATLAB自带的line和text函数,需要将经纬度转XY值绘图
[X,Y] = m_ll2xy(-129,48.5)
line(X,Y,'marker','square','markersize',4,'color','r');
text(X,Y,'M5','vertical','top')

函数m_ll2xy与m_xy2ll功能相反,用于转换经纬度坐标去匹配投影。
也可以使用M_Map工具箱中内置函数m_line 和m_text绘图。
地图比例尺
设置地图比例尺函数m_scale
设置1:250000比例尺:
m_scale(250000)
海岸线和水深
M_Map包含两个简单的海岸线和全球高程数据库。如需要更多细节的地图可以使用免费的高分辨率数据集。
使用m_coast
函数可以访问M_Map数据库,海岸线可以通过下述语句以单线条形式绘出:
%设置填充和边界颜色
m_coast('patch',[.7,.7,.7],'edgecolor','r');
自定义坐标轴
网格线和标签
为了绘制完美网格,可以尝试不同的网格选项。m_grid
用来绘制网格,m_ungrid
清除网格。
% 北美兰伯特投影
m_proj('Lambert');
m_coast;
m_grid;
% m_ungrid;

可以被改变的选项是:
外框是否绘制,
'box',( 'on' | 'off' | 'fancy' )
'tickdir' 是'in'黑白交替的效果(铁路线效果)
'tickdir' 是'out'一个更复杂的图案效果
指定网格的数量或位置。
'xtick',( num | [value1 value2 ...])
指定标签
'xticklabels',[label1;label2 ...]
图列
可以使用m_legend
在地图中添加图列,图列盒可以使用鼠标进行拖放。
比例尺
可以使用m_ruler
在地图中添加比例尺。
绘制线条、文本、箭头、填充、阴影、斑点状和等值线
m_plot(LONG,LAT,...line properties) %在地图上画一个线条(清除现有线条)
m_line(LONG,LAT,...line properties) % 在地图上面画一个线条
m_text(LONG,LAT,'string') % 文本
m_quiver(LONG,LAT,U,V,S) % 箭头线条
m_patch(LONG,LAT,..patch properties) % 填充.
m_annotation('line',LON,LAT) % Annotation
绘制轨迹
用于表示飞行器、船舶或卫星随时间变化位置曲线,并且添加时间标注。这个可以用m_track
实现。
m_proj('UTM','long',[-72 -68],'lat',[40 44]);
m_gshhs_i('color','k');
m_grid('box','fancy','tickdir','out');
% fake up a trackline
lons=[-71:.1:-67];
lats=60*cos((lons+115)*pi/180);
dates=datenum(1997,10,23,15,1:41,zeros(1,41));
m_track(lons,lats,dates,'ticks',0,'times',4,'dates',8,...
'clip','off','color','r','orient','upright');
% m_ungrid track

计算两点之间的距离
可以使用经纬度或地图坐标(X|Y)使用m_lldist 和 m_xydist计算