找回密码
 注册
关于网站域名变更的通知
查看: 1234|回复: 1
打印 上一主题 下一主题

利用matlab画地图的工具:worldmap和m_map

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-17 10:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
+ K1 `, ~1 \$ u# @
1、用matlab画世界地图, a7 j3 F5 O0 [2 Q9 p8 F0 @2 V6 [
8 `  Q2 I- s* u" \( ?! Q" G5 l5 N
[matlab自带的例子]( j4 j4 I* Z$ i% v  b' J3 c: g. u+ |
1 j' \6 A& X5 F4 a: J. {
ax = worldmap('World'); setm(ax, 'Origin', [0 180 0]) land = shaperead('landareas', 'UseGeoCoords', true); geoshow(ax, land, 'FaceColor', [0.5 0.7 0.5]) lakes = shaperead('worldlakes', 'UseGeoCoords', true); geoshow(lakes, 'FaceColor', 'blue') rivers = shaperead('worldrivers', 'UseGeoCoords', true); geoshow(rivers, 'Color', 'blue') cities = shaperead('worldcities', 'UseGeoCoords', true); geoshow(cities, 'Marker', '.', 'Color', 'red')" T1 I- u7 Q5 ]2 e2 s( W
用matlab画世界地图
# w  C) b7 q! j( H# n 5 N! v1 K' y3 T1 }5 ^

* T$ q& P* S- e. n
1 A' r' n- C6 e% I7 n, }4 }$ O8 }& @$ L( G5 h; q; W' u- c; M) O
2、matlab的m_map工具箱及添加行政边界底图6 e, l  ?9 H) M# m0 {2 |6 f

* C. W1 k% B1 C+ \对习惯使用matlab的人来说,m_map是一个很好的绘制地图的免费工具箱。可以选择的投影种类近20种,包括常用的Lambert、Mercator、UTM等。可以测量距离( m_lldist, m_xydist ),绘制等值线(m_contour),等值线填充图(m_contouRF),矢量图(m_quiver),栅格图(m_pcolor)等,并与相应的matlab函数语法类似,很容易使用。
  ?* s" q4 h. t" i3 V+ i
& c, [' d& k( j$ o7 v8 F3 O  f& B      m_map通过m_coast提供1/4 degree分辨率的全球海岸线,通过下载GSHHS可以得到更高分辨率的海岸线数据。
7 _  S2 g1 K. }6 S0 W8 e& U) H6 h7 p0 f$ t/ }
     除海岸线外,还可以利用已有的GIS行政边界资料,在地图上添加行政边界底图。具体作法为:下载.shp格式的行政边界文件( 国家基础地理信息系统的下载服务),将下载的.shp文件通过mapinfo转换成.dxf文件,利用已编译好的fortran程序,读取经纬度信息,输出.dat文件。导入matlab空间,可以直接m_plot,也可以调用m_plotbndry()。# Z  `1 q2 c3 m, J& v. Z

& I9 l3 f/ b' J; A通过以上方法可以实现.shp在matlab绘图中的应用。
$ X& A  d! n5 T% U" s" }0 |/ V) N8 A/ q
, U6 }; _2 H, f
3、[原创ZHOU Feng]在matlab中利用worldmap画中国区域图时加上台湾和钓鱼岛8 r! Z$ A! g. D) g" S
/ S- A9 a# ]4 ^% ~) `. ^
3 u+ |  ~0 O$ }8 a! m5 \
Matlab是我们常用的一个画图和计算、仿真工具,在我们海洋科研中,经常在画图时需要加上底图(譬如海岸线,国界、省界线等等)。常用的一个工具包是M_map。但这里我要讲的是利用matlab自带的一个画图工具包话底图,这个工具包就是worldmap.& X7 B$ U( H- q1 R  `% o$ `
' s) I# r( l0 G% z
# r" b) F' n# G4 @. C7 ~
    worldmap的一般用法约为:  @$ D4 p( ^3 H& F
   >> figure; worldmap('china'); polcmap;, k4 J: i) j3 R9 e) Q6 {; H
    或者
* d4 T" K: ^+ @8 m    >> figure; worldmap china; polcmap;
# e7 s6 l2 E( t* ^) l% m! M    如果要加入颜色的画,一般可以这样:, Y* {2 t4 B! I2 ]- {* Y3 `
    >> figure' \: Q7 ]  f( i( l& z# W
        worldmap('china','patch')7 c9 T! l2 V( ?6 q' V6 |
        scaleruler: x- x5 @" i8 G0 ?
' C+ r/ }% H# e# Q. b8 m- ]
    这时候问题就出来了。因为鬼子偷偷的讲台湾和大陆用两种颜色表示;甚至,如果你放大图片的画,会发现钓鱼岛也是不同颜色。这个是我们不能忍受的!!!!!5 p' o, @) |" S: B
    于是我就费了一点时间,琢磨这个画图,然后修改。下面是这个脚本程序,在matlab中执行就可,这时候台湾和钓鱼岛和大陆就是一个颜色了^_^。
  C* V% v* \$ j- Z$ g% f* p1 E  H  R; E, Z4 I
3 W; y9 Q# L4 S5 m7 f( j9 U
    用兴趣的朋友可以把这个用法举一反三((ZHOU Feng)zhoufeng@sio.org.cn。matlab版本是6.5)。6 c/ ^2 }3 H- h+ Y0 z8 R
不过老实说,我不太用matlab自带的这个画图包,用M_map比较多一点。试验一下,感觉还可以用用。% G, U) }3 S* L3 _! t
画上述图的代码如下:
4 ?, t9 c# A1 d; K# a* G4 k
$ g6 S, ^* M# d4 S8 i& _' n- O% W+ B% 把台湾和大陆合成一个文件保存起来,这样画图用patch就是一种颜色(Zhou Feng, 2008-06-30, SOED, Hangzhou)。" v1 B/ w) \: V5 `9 J7 }( N4 F
%
  y6 {; U& k* ]2 P% by ZHOU Feng3 v8 g' h5 y+ p
% zhoufeng@sio.org.cn1 E( \" a# n, a9 v; g" H
% SOED, 2nd Institute of Oceanography
8 b+ i( W* U: V! E. o% 2008-06-30
$ d* {# k' @( s7 z/ m, n+ S8 M( q* F7 T  l0 G3 v
s1 = worldhi('china');
2 u1 T) T6 I7 z% z" k- e- a6 ks2 = worldhi('taiwan');3 w2 y: s8 [$ R3 i' Q
disp(s1);" [& f: k2 q5 F: ]! r: p; ?, `
8 v  W! n% J% b0 g% V- j. B
% add Taiwan together (ZHOU Feng)zhoufeng@sio.org.cn
2 `$ l* ]0 g, n& r+ s' P5 ?s = s1;
2 u/ Q: q3 y; Zs.lat = [s1.lat;NaN; s2.lat];  @& R- u1 `8 p! w  a( a, k) b
s.long= [s1.long; NaN;s2.long];
; @7 T9 N- F( ]1 M$ {% }% t. |( E+ t
+ f0 c7 v! L& ^% add the Diaoyu Island (钓鱼岛)
% V! W1 W7 s- u* r% L$ K; A. V% 钓鱼岛群岛由钓鱼岛、黄尾岛、赤尾岛、南小岛、北小岛、大南小岛、大北小岛和飞濑岛等岛屿组成,总面积约7平方公里。
; a! C4 W3 D+ v% 地理位置:东经123°-124°34′北纬25°40′-26°。
6 C/ W" v" i  U+ p3 [& S%# Q  a2 p# L4 r# j! {9 W0 h% _( u+ ?3 F8 X
% ---这里的分辨率只有两块 --; h  b# t9 b3 h$ R$ `3 z4 ~0 E4 U
s3 = worldhi('japan');  %(ZHOU Feng)zhoufeng@sio.org.cn
# S; M( c7 W: q; D7 c# y+ h: ^+ O7 ox = s3.long;
7 ?0 h1 |) ?9 W2 w7 z6 Q! E4 V- C) fy = s3.lat;6 n: r; B' Y  w: M  ]  T; O
idx = find(x>123.0 & x<124.5);
/ ~# O8 X8 M% i. }0 Bidy = find(y> 25.5 & y< 26.0);' E8 y2 T- o& @5 Q; I
m = length(idy);, N& Z4 T3 a  u+ K' D6 i- i: N4 O2 G
id=[];
  ?5 ~. Q. g. K- ufor i=1:m- H1 S5 Y4 _& ~0 k7 a8 m0 u+ K
    tmp=find(idx == idy(i));
  @4 l( w- R8 y! {; \' s    if isempty(tmp)5 s+ G4 \3 u% G2 L& T, E+ i$ Z
    else$ `4 C/ d( H# P* l9 r9 s/ o
        id = [id; idx(tmp)];    %(ZHOU Feng)zhoufeng@sio.org.cn
& X! h% Y2 e) `$ W$ U4 ?    end
9 B( t) J  Y$ H. o2 J/ W7 {end. J' J. g) _' |0 X% _
%%longd = x(id);
+ q7 c0 L1 q) E# |( Q: Z%%latd  = y(id);
9 Q0 g+ p/ y- m1 _% f, C%0 y; L5 O* f: r/ R
% find nan# j6 T" l! O* v" N
dtmp = find(diff(id)>1);
, v) L+ o6 W, G5 Oif isempty(dtmp)
) ?- J& _4 c( q  B7 I5 x    disp('no change')
4 z0 O; V4 ]) S  g& b! [elseif length(dtmp)==1, E* V/ y. x& |# V3 J
    idnew = [id(1:dtmp); id(dtmp+1)-1;id(dtmp+1:end)];
1 a8 |7 o7 ]7 F9 v, j9 Selse# V8 b) E) e3 I) U
    for j=1:length(dtmp)
: j0 Q+ c9 F7 K5 x8 F+ G        idnew = [id(1:dtmp(j)+j-1); id(dtmp(j)+1)+j-1; id(dtmp(j)+j+1:end)];        % 未试验,可能有误6 t8 C7 i' B* n5 `& W" o) N, t0 l# I
    end1 [& @1 B8 Q9 `1 o% D0 H4 h& E
end
5 F+ K- m# g# R3 g; g6 [longd = x(idnew);
- ?- w$ J& P$ @latd  = y(idnew);
+ k* g& n6 v& ^" E- c  A% h( ?
/ s5 W5 v. G9 ~/ u, Bs.lat = [s.lat; NaN; latd];
2 e1 |8 Q6 ^. h- gs.long= [s.long; NaN; longd];
- c& G; L* m' F
- L) X/ z2 M, Vworldmap china
2 M9 A4 X, H) L1 u9 V( i' Dh = displaym(s);
' g2 ?* _8 d: O! a( |( Z$ R8 O% xpolcmap
7 s% W3 z; Z* E* a  @% a0 P
6 r6 ]8 B% Q; e% L5 z% A+ JOK!!!!!!!!!!!!!!!

该用户从未签到

2#
发表于 2020-3-17 17:38 | 只看该作者
看看楼主说的matlab画世界地图的工具。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-4 07:35 , Processed in 0.156250 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表