|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1 q% r7 M8 W# W. t5 l8 b" B
m_map可以画出很漂亮的图0 L* r9 g' y9 }! C8 C1 Q* S
+ W8 o5 _4 t p! l如果想在m_map的指定投影上画图必须使用m_text,m_quiver,m_pcolor等前面加了‘m_'的函数,那么这些函数与text,quiver,pcolor等普通matlab函数有什么区别呢?让我来分析一下m_plot的代码为大家解答吧。* Q U8 o: `3 [. L# ?* i( H
/ k( A. e3 Y1 v' U; k8 K5 Am_plot代码如下:
% Q4 _4 T' _8 \0 M% G$ z
' e3 u- C1 _2 r: ~! L N0 _function han = m_plot(varargin)4 Q) U- j. r, l9 z
' y) L) o2 W9 _: t) `* P' C/ {%将用户输入参数放在varargin中,这个varargin是个大小可变的cell数组,
5 q8 C5 w' K# U2 ?$ A) u3 I( F* ^" A# J# ^
%这样设计的好处是m_plot就和plot一样是一个输入参数可变的函数了
$ l0 f' y0 t+ @8 B+ |global MAP_PROJECTION MAP_VAR_LIST
! j* }9 c1 I! r& tif isempty(MAP_PROJECTION), %判断有没有设定投影方式( i1 O* [5 {6 w1 U0 Q, Q7 z% P
disp('No Map Projection initialized - call M_PROJ first!');
" a3 D4 Q4 U; x( w' o2 [9 H: I; d return;
( Q! }4 k, S& h3 u5 M; X" Eend;9 m. G* }9 @9 @$ ?* t
if nargin < 2; %判断输入参数的个数,小于2的话就好好查看一下m_plot函数的用法
; F% W/ M0 N2 Z4 x help m_plot
: }9 e L4 z. ~8 }$ u return
. K, T, s2 h4 C/ b* `end
8 H2 |6 Y! |% y[x,y] = m_ll2xy(varargin{1},varargin{2});% x2 z+ A5 E( d" b1 u. E9 [8 J9 u" o
7 w2 C) h; x+ [1 {, [0 v% p- h$ T%m_ll2xy这个函数会根据当前投影的方式将varargin{1},varargin{2}也就是笛卡尔坐标系的横纵坐标进行转化! w( G, M5 k8 Q0 B) y; _. M
varargin = varargin(:); %将cell数组由一行变成一列0 i8 i5 G+ p5 I; K6 k
s = size(varargin,1); %s为cell数组的行数,也就是输入参数个数
2 {( p9 {; o% Z! N+ ~h=plot(x,y,varargin{3:s}); %调用plot函数,m_map里大部分函数都是如此,最终都要调用系统函数1 l& V# o' b8 {1 K/ q
if nargout == 1 %判断输出变量个数是否为1( y, o5 y$ K2 I6 `% t& j U0 _
han = h;1 l. \2 ~# N8 R$ H1 A
end G! u4 B2 |9 i0 ^$ b/ M1 ~* E
0 k" Z+ }1 q$ G! P# w. ~return, e. Y# Y3 b! U4 }2 D2 p
- E! m/ p* |- R) y% m7 Q d, T
既然明白了m_map的基本原理,我们就可以自己为m_map添加函数了,比如m_map工具包没有m_scatter, 没关系,我们可以自己写啊,很简单的!: r1 Y4 t0 r. s' f0 x+ o, v
& E g* V8 R: }
function han = m_scatter(varargin)
7 }. C* l: z3 r2 ~/ ]1 C4 k% Z* e% written by Haidong Pan (Ocean University of China) 潘海东 (中国海洋大学)1 [. k; ?; A) u7 Z$ q
% email: panhaidong_phd@qq.com
& u% s& x6 T2 o" ^+ r- o, y" u/ S K# U" o* R1 j* t( }4 r1 h
global MAP_PROJECTION MAP_VAR_LIST
' _- i: D1 G, G. W% Z; S6 S( F
0 r( K# I7 ~! N8 h5 _, A7 gif isempty(MAP_PROJECTION),2 e1 v0 B: v4 k; L" J, w: G
disp('No Map Projection initialized - call M_PROJ first!');
; z, K8 V- _; H1 f. Z8 O return;6 i3 {3 k& e, g4 R
end;
3 }6 o+ J" ~! s4 {% H5 _$ B! i4 F7 J8 x7 }5 \. G5 z
[x,y] = m_ll2xy(varargin{1},varargin{2});
( I G( `3 x3 g c9 n5 Pvarargin = varargin(:);% U& }, }1 @, Q4 d3 z2 X' J7 `
s = size(varargin,1);4 `8 e. e6 ^" i6 k4 H& ?! X
h=scatter(x,y,varargin{3:s});! b/ }+ X. X/ `: \
if nargout == 1
0 r" ^# P) J8 ]8 b& f: ? han = h;$ M: E. P B, }+ i0 ~4 |
end
# y2 H# y7 ~# R! c0 {2 g* X' i
* O# u, y1 I+ b4 R. \# j- e2 Greturn |
|