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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
2 W3 T/ u. H+ J
1、用matlab画世界地图
7 T+ l5 e. w' O$ D
* `& W# `2 V) j5 R4 d% W[matlab自带的例子]) P; Q$ {$ h( p; \2 X1 z
' c! t/ k$ D  a9 N4 n
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')1 }" |+ [$ `- Z0 J4 s( T* f" E
用matlab画世界地图
' {. D6 V4 G. D2 z: w, z
/ t4 c6 ~+ [1 U7 V; c1 H& w- L8 i5 Q: ~( j# |: P7 W4 g% E5 y

) e$ C) [* ^' N6 ]* n1 e
+ o4 p# n8 ?% d; [6 g1 Z2、matlab的m_map工具箱及添加行政边界底图/ ^/ [6 B; T( E1 p! N0 t

7 X$ n! W! _0 |9 ~: I5 X对习惯使用matlab的人来说,m_map是一个很好的绘制地图的免费工具箱。可以选择的投影种类近20种,包括常用的Lambert、Mercator、UTM等。可以测量距离( m_lldist, m_xydist ),绘制等值线(m_contour),等值线填充图(m_contouRF),矢量图(m_quiver),栅格图(m_pcolor)等,并与相应的matlab函数语法类似,很容易使用。; q. f9 k8 p5 ]" T3 c4 y" b

' g9 b2 x0 i1 O* t. j; o! E1 F& s      m_map通过m_coast提供1/4 degree分辨率的全球海岸线,通过下载GSHHS可以得到更高分辨率的海岸线数据。. v& D; Z. r4 _' W" j9 I' Q( j" N( E
1 F" V! P7 d3 c3 @+ v( I
     除海岸线外,还可以利用已有的GIS行政边界资料,在地图上添加行政边界底图。具体作法为:下载.shp格式的行政边界文件( 国家基础地理信息系统的下载服务),将下载的.shp文件通过mapinfo转换成.dxf文件,利用已编译好的fortran程序,读取经纬度信息,输出.dat文件。导入matlab空间,可以直接m_plot,也可以调用m_plotbndry()。- {8 A: o" ]( I. ^/ l! x
" R" G8 x" F1 G/ \! b( G& U. \: b$ B
通过以上方法可以实现.shp在matlab绘图中的应用。8 Y1 m$ }: r/ N4 ~; K; P% g, }: A
6 K: t/ i& ?* `% {. l& ?

) u3 i2 ?5 M4 W2 _+ C, y3、[原创ZHOU Feng]在matlab中利用worldmap画中国区域图时加上台湾和钓鱼岛
3 _. l3 }. C: R0 R$ j5 Z: l5 ~" b9 E
% W" R( {3 u$ l& j
Matlab是我们常用的一个画图和计算、仿真工具,在我们海洋科研中,经常在画图时需要加上底图(譬如海岸线,国界、省界线等等)。常用的一个工具包是M_map。但这里我要讲的是利用matlab自带的一个画图工具包话底图,这个工具包就是worldmap., x& B' ~) E- c% [4 t( J* |1 q  z

, M6 ]4 R% a, }2 u6 k- s- {& x+ e' n) v2 `
    worldmap的一般用法约为:
4 A) t; Y, C) f+ @   >> figure; worldmap('china'); polcmap;% R0 f. x/ Z& ^2 Q. w7 }+ ?; @! S
    或者
) o7 s# ^  N2 d5 q* @4 G    >> figure; worldmap china; polcmap;
. x6 W9 y" ^# H' X) [    如果要加入颜色的画,一般可以这样:
* `! C0 ]3 X+ i  y2 c! f    >> figure5 {; A' m& N6 F
        worldmap('china','patch')- G, _2 U# L' g7 \
        scaleruler  I/ d9 ?/ I0 j, M' H; R

2 W1 k. G) X# a% v    这时候问题就出来了。因为鬼子偷偷的讲台湾和大陆用两种颜色表示;甚至,如果你放大图片的画,会发现钓鱼岛也是不同颜色。这个是我们不能忍受的!!!!!
" E, ]1 s8 ~" b# n. q    于是我就费了一点时间,琢磨这个画图,然后修改。下面是这个脚本程序,在matlab中执行就可,这时候台湾和钓鱼岛和大陆就是一个颜色了^_^。* g5 y4 z+ s# Z& v
! A! H1 c) O3 c/ ~" i
# ?# \& J) F3 ~( f# u9 s6 f6 {/ P
    用兴趣的朋友可以把这个用法举一反三((ZHOU Feng)zhoufeng@sio.org.cn。matlab版本是6.5)。. u/ M! k' e( A" C+ [$ X
不过老实说,我不太用matlab自带的这个画图包,用M_map比较多一点。试验一下,感觉还可以用用。  W6 k$ h- B; F! W. n% {
画上述图的代码如下:& t. M! e5 m% U' k! R
5 h& N* y1 F# F4 S# D: x& x/ D
% 把台湾和大陆合成一个文件保存起来,这样画图用patch就是一种颜色(Zhou Feng, 2008-06-30, SOED, Hangzhou)。
, H% r0 w5 X: y2 [%
% S0 T3 u$ @4 t! e9 S% by ZHOU Feng" X; H- N7 ]" o' |) a7 k
% zhoufeng@sio.org.cn
; j! i- ]9 _9 V9 W2 @3 N; W. o; ^$ ]% SOED, 2nd Institute of Oceanography
$ }( h2 G. q9 [2 w  |6 l" U% `% 2008-06-30
/ L( J6 j. S/ h
# R/ l" ]& C% g, l+ es1 = worldhi('china');) L# t4 J6 I! b! L  R
s2 = worldhi('taiwan');; v- b- z( V% e4 S' D, X/ e
disp(s1);
$ U- W( y9 s+ z
. ]( N+ A/ J8 ]6 ?; W+ W; p% S% e% add Taiwan together (ZHOU Feng)zhoufeng@sio.org.cn
$ }/ S% ?) p$ J9 i! P* m3 T* Qs = s1;
- A  |) Z% V  J1 E$ L  ~% `# Ts.lat = [s1.lat;NaN; s2.lat];
. V5 E# L$ Q- G, M/ rs.long= [s1.long; NaN;s2.long];
, Q- h! K! P8 }
# z& h# n5 W) ]: z: g% add the Diaoyu Island (钓鱼岛)& d- V& B; N& }/ L) J; V8 U
% 钓鱼岛群岛由钓鱼岛、黄尾岛、赤尾岛、南小岛、北小岛、大南小岛、大北小岛和飞濑岛等岛屿组成,总面积约7平方公里。. u/ {& k' N1 G4 R
% 地理位置:东经123°-124°34′北纬25°40′-26°。! D0 C3 c2 [3 U/ b: ~
%) l. Q5 |& Z" y/ N
% ---这里的分辨率只有两块 --: N; T" s; b$ K+ A: V
s3 = worldhi('japan');  %(ZHOU Feng)zhoufeng@sio.org.cn5 H; {0 r0 I* }2 ]+ n. \
x = s3.long;0 }. t4 e# Y; {+ D  E
y = s3.lat;
) \& v* m% z: Yidx = find(x>123.0 & x<124.5);6 K! O# d1 ]: n! L# P
idy = find(y> 25.5 & y< 26.0);
% G* B+ m: r: ]1 ~m = length(idy);
% r7 z! a, j' A% T, G, e1 Pid=[];
( c4 Z  a5 w7 i* ]. E$ B; Lfor i=1:m
, D8 m) n  x' w  E) s- k" ]    tmp=find(idx == idy(i));( P7 x( H& p7 y  N( k& i; C6 T
    if isempty(tmp)
# w" A$ [& e* ?2 J    else& t% C. J) d- E/ f6 n
        id = [id; idx(tmp)];    %(ZHOU Feng)zhoufeng@sio.org.cn
3 `5 y# |/ Z/ K+ n" K+ k    end8 J) z+ M! N0 ?# w: H5 J& c
end, [' S. K; ^- z6 f! f% e( ]) |" x+ J
%%longd = x(id);
) i  w3 ^. m3 `, D6 `%%latd  = y(id);" ?4 W3 p3 x% A4 H0 X
%
; W( M( ~1 ]9 U$ @# f% find nan
* a; C9 z/ p9 K( o7 Pdtmp = find(diff(id)>1);. j" ?1 J, _/ C) |9 w7 j* `
if isempty(dtmp)/ E, E+ d/ s5 [$ i
    disp('no change')
7 |; y9 o1 I/ u" T5 t2 Melseif length(dtmp)==1
8 e) H0 R( {% H! U9 R4 Y    idnew = [id(1:dtmp); id(dtmp+1)-1;id(dtmp+1:end)];  |1 J+ d) C1 m) [  M, E9 f
else( E. N) a: Q3 v  P
    for j=1:length(dtmp)
) j1 h9 T: u% c$ b% f        idnew = [id(1:dtmp(j)+j-1); id(dtmp(j)+1)+j-1; id(dtmp(j)+j+1:end)];        % 未试验,可能有误+ B9 V! B: e1 d7 G
    end
9 o( D+ w( B' n/ a7 g; k, P7 Bend6 H5 B# n5 u( T4 L  A9 q6 X
longd = x(idnew);
9 A/ l4 ?  G0 R- T% M; M/ W+ y0 i4 n) e3 ilatd  = y(idnew);
' _  w) J( I2 s, m( p# c( s' Q
9 C# W: Z' N, P2 d: v9 es.lat = [s.lat; NaN; latd];
" s, E. q% U9 w# T* \+ F7 ~s.long= [s.long; NaN; longd];
! k6 j( c7 B! ^5 C/ v) O4 _4 d+ b2 T
worldmap china
4 O3 J9 o1 Y. |$ ]h = displaym(s);
$ S9 c, x* T- Q) m* zpolcmap1 L  m0 U0 B/ `# u; i( X9 K
  ~- s8 {) Y* M* p/ x' p. B
OK!!!!!!!!!!!!!!!

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 04:11 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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