EDA365电子论坛网
标题:
M_map工具包函数研究
[打印本页]
作者:
mytomorrow
时间:
2020-3-20 11:02
标题:
M_map工具包函数研究
0 j) |5 V+ _5 b8 Q! J d
m_map可以画出很漂亮的图
) g& i* i6 n$ I$ S+ q4 E
3 q, ^- l* o6 z7 h
如果想在m_map的指定投影上画图必须使用m_text,m_quiver,m_pcolor等前面加了‘m_'的函数,那么这些函数与text,quiver,pcolor等普通matlab函数有什么区别呢?让我来分析一下m_plot的代码为大家解答吧。
" l6 |4 E% k8 F
8 v+ v2 ?2 F- @0 U+ @ C
m_plot代码如下:
$ b& H" J2 a; M- h0 e, C
& K( Y/ l) q, L
function han = m_plot(varargin)
( r- o- `" g+ P* g
. L$ _4 [' a1 D( m2 C' `
%将用户输入参数放在varargin中,这个varargin是个大小可变的cell数组,
: u2 K$ c% g- T; {% A) [+ g
: K5 j+ c c3 ?' c
%这样设计的好处是m_plot就和plot一样是一个输入参数可变的函数了
. c! |( p+ f; Z
global MAP_PROJECTION MAP_VAR_LIST
( Z6 J! Q$ Y U
if isempty(MAP_PROJECTION), %判断有没有设定投影方式
0 ?7 Z) g: T, X5 w
disp('No Map Projection initialized - call M_PROJ first!');
+ `; p3 s3 {" ^6 V5 m1 ]
return;
& r) d( r/ O3 E5 @6 A8 c" o* d# m& Z
end;
2 I5 u0 R+ K7 L$ l5 b6 K
if nargin < 2; %判断输入参数的个数,小于2的话就好好查看一下m_plot函数的用法
: f7 Z% C9 d4 R% F( Q [7 f
help m_plot
- ]' a% a3 L0 [4 H Y3 i* n
return
# a- Z- S) ]1 _$ U/ A
end
4 n% V3 n+ y. X) `1 w
[x,y] = m_ll2xy(varargin{1},varargin{2});
9 Q3 y( R& } s8 e1 y* K
( K9 ^! u/ g# x |2 X- U
%m_ll2xy这个函数会根据当前投影的方式将varargin{1},varargin{2}也就是笛卡尔坐标系的横纵坐标进行转化
& \% \6 a3 M4 M+ R
varargin = varargin(:); %将cell数组由一行变成一列
# t# | M" F( g+ q5 O, T0 z
s = size(varargin,1); %s为cell数组的行数,也就是输入参数个数
) ?8 T d5 I. _4 |. K7 C/ m
h=plot(x,y,varargin{3:s}); %调用plot函数,m_map里大部分函数都是如此,最终都要调用系统函数
5 b( |( o1 a3 l5 M- S
if nargout == 1 %判断输出变量个数是否为1
3 t e& k) T- w& f0 ^# t
han = h;
" T" `1 g3 b( j h' m+ f, d
end
: _+ y- L+ r u0 z/ y0 V
$ I. V5 A5 A2 W+ C3 n' Q/ S4 ]
return
5 U+ N; i5 c5 y/ I* l8 ~
i A5 [1 V7 |. u' ~/ h1 g
既然明白了m_map的基本原理,我们就可以自己为m_map添加函数了,比如m_map工具包没有m_scatter, 没关系,我们可以自己写啊,很简单的!
8 }, A/ b) g' a
+ V0 k2 f1 x# E5 U5 D/ w, |
function han = m_scatter(varargin)
2 B! Q( W! O$ R9 S
% written by Haidong Pan (Ocean University of China) 潘海东 (中国海洋大学)
3 A) l0 N8 a! B7 v4 f; R
% email:
panhaidong_phd@qq.com
" d9 h' L. }' A* r; H/ l, [
2 R. e+ @" w6 _. [' J# |
global MAP_PROJECTION MAP_VAR_LIST
# t1 D/ y( S5 A7 U" v
/ I$ [6 v; d1 O' d# x. n- ]
if isempty(MAP_PROJECTION),
7 t$ O; H0 d& U& U
disp('No Map Projection initialized - call M_PROJ first!');
) D! |2 p0 G; i
return;
2 Z( o. F7 A. [8 u2 p9 P
end;
& l8 C- g" f# l6 T+ U
: d0 z+ N$ R4 l3 G; H- Q2 x- H% z
[x,y] = m_ll2xy(varargin{1},varargin{2});
9 c3 V7 B6 M/ V' i* i8 }/ p$ E
varargin = varargin(:);
% Q, Y0 W. {* x' d! p$ r; k4 X
s = size(varargin,1);
" M8 ?0 D$ M& Y8 t. ?) G, O
h=scatter(x,y,varargin{3:s});
3 x* ]7 L" L+ C6 \% F) x M
if nargout == 1
' O/ k) i) w: i- q9 F
han = h;
" U0 x' d. j% M* A9 o
end
+ B* }8 U, Y$ {$ I) |6 ~: l
! Q. X4 ?( s0 X! l, Z* B7 e
return
作者:
NingW
时间:
2020-3-20 18:13
M_map工具包函数研究
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2