EDA365电子论坛网

标题: M_map工具包函数研究 [打印本页]

作者: mytomorrow    时间: 2020-3-20 11:02
标题: M_map工具包函数研究

0 j) |5 V+ _5 b8 Q! J  dm_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 F8 v+ v2 ?2 F- @0 U+ @  C
m_plot代码如下:
$ b& H" J2 a; M- h0 e, C
& K( Y/ l) q, Lfunction 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  Uif 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 Kif 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
end4 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+ Rvarargin = varargin(:); %将cell数组由一行变成一列# t# |  M" F( g+ q5 O, T0 z
s = size(varargin,1); %s为cell数组的行数,也就是输入参数个数
) ?8 T  d5 I. _4 |. K7 C/ mh=plot(x,y,varargin{3:s}); %调用plot函数,m_map里大部分函数都是如此,最终都要调用系统函数5 b( |( o1 a3 l5 M- S
if nargout == 1  %判断输出变量个数是否为13 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 Pend;
& 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  Mif nargout == 1' O/ k) i) w: i- q9 F
  han = h;
" U0 x' d. j% M* A9 oend
+ B* }8 U, Y$ {$ I) |6 ~: l
! Q. X4 ?( s0 X! l, Z* B7 ereturn
作者: NingW    时间: 2020-3-20 18:13
M_map工具包函数研究




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2