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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

& \2 f- j. ^" [" h+ N# i; Y0 B5 h1、用matlab画世界地图$ l! R/ p9 _2 a% x' c- Z

" |- Y( p; ?" \+ P[matlab自带的例子]
, v$ u3 p6 Y6 e( ~7 W' O2 ^2 m8 }7 o4 @( `
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')
5 ~1 I7 {) ^; Z- H用matlab画世界地图/ _/ q# k* V' `: f  i9 o5 G3 c% J
% @$ b& _9 l6 G/ N+ d& p: X1 S

0 C0 {8 G- ?$ |# z6 t% B. [! q
8 x( \3 Q' g6 v9 S% r0 i2 u
3 }% v" R& C2 u& V# L. K$ r2、matlab的m_map工具箱及添加行政边界底图
5 U. V  A, i$ u, h+ n. C6 h. Z, Q8 Q5 C/ y% o
对习惯使用matlab的人来说,m_map是一个很好的绘制地图的免费工具箱。可以选择的投影种类近20种,包括常用的Lambert、Mercator、UTM等。可以测量距离( m_lldist, m_xydist ),绘制等值线(m_contour),等值线填充图(m_contouRF),矢量图(m_quiver),栅格图(m_pcolor)等,并与相应的matlab函数语法类似,很容易使用。6 w/ P2 w% D) s5 i
# w+ ^6 I+ Q2 `4 d# T
      m_map通过m_coast提供1/4 degree分辨率的全球海岸线,通过下载GSHHS可以得到更高分辨率的海岸线数据。, X5 d  Q4 G) j+ A2 F, f
! v! n* d; o0 ]& p& k
     除海岸线外,还可以利用已有的GIS行政边界资料,在地图上添加行政边界底图。具体作法为:下载.shp格式的行政边界文件( 国家基础地理信息系统的下载服务),将下载的.shp文件通过mapinfo转换成.dxf文件,利用已编译好的fortran程序,读取经纬度信息,输出.dat文件。导入matlab空间,可以直接m_plot,也可以调用m_plotbndry()。
2 x0 Q. u. C( S; k" p7 ^) `8 Y$ J  W$ q/ b4 f% _
通过以上方法可以实现.shp在matlab绘图中的应用。
, d4 Q( P+ U. n* e+ g* H
9 |: m3 Z+ m8 w9 g) o& o* @0 V) w  r
" l% K9 m2 B( `, H) y# V- o3、[原创ZHOU Feng]在matlab中利用worldmap画中国区域图时加上台湾和钓鱼岛
7 s6 M& Z: N  d. H! _. Y" S
8 k4 e/ K" J. k# n9 |+ d$ y+ w( p
9 n" y' \0 Y, E- OMatlab是我们常用的一个画图和计算、仿真工具,在我们海洋科研中,经常在画图时需要加上底图(譬如海岸线,国界、省界线等等)。常用的一个工具包是M_map。但这里我要讲的是利用matlab自带的一个画图工具包话底图,这个工具包就是worldmap.- ]! M7 W1 `$ `7 M0 K8 l+ `7 D

9 y! p$ ]& X$ i3 c" d1 Q
  d: \- h/ m, k# [- V; u( B) `6 d" d    worldmap的一般用法约为:# J0 c0 x2 O8 e; e( n6 J* G
   >> figure; worldmap('china'); polcmap;
2 s8 c* I) |1 B( x4 f5 G; f2 a    或者
, g/ X9 U$ }+ r    >> figure; worldmap china; polcmap;
& H( W! {1 i: O0 w    如果要加入颜色的画,一般可以这样:  _( c% z: B" v6 N* i% S
    >> figure
1 u: a: ~& b+ G        worldmap('china','patch')
* q) E+ ?$ m+ R! q7 g6 }5 M        scaleruler
1 q) F1 M% t; Z3 k$ ^1 O# P8 f
3 x" c& D3 T) A9 V" |    这时候问题就出来了。因为鬼子偷偷的讲台湾和大陆用两种颜色表示;甚至,如果你放大图片的画,会发现钓鱼岛也是不同颜色。这个是我们不能忍受的!!!!!8 Q, W* r4 R: \7 d
    于是我就费了一点时间,琢磨这个画图,然后修改。下面是这个脚本程序,在matlab中执行就可,这时候台湾和钓鱼岛和大陆就是一个颜色了^_^。  h. ]/ P" V- {
1 i0 ^" H- Z8 F  m1 \6 H8 u% i
% H2 c7 F9 E5 B8 k. G' A5 p- |
    用兴趣的朋友可以把这个用法举一反三((ZHOU Feng)zhoufeng@sio.org.cn。matlab版本是6.5)。
) ?" g9 w3 M. G# p4 R- g不过老实说,我不太用matlab自带的这个画图包,用M_map比较多一点。试验一下,感觉还可以用用。
. i5 R- d: ]) g  T画上述图的代码如下:
6 ?4 p/ X; A) A. u" b4 ], l; o5 `: `5 K+ x5 k* b
% 把台湾和大陆合成一个文件保存起来,这样画图用patch就是一种颜色(Zhou Feng, 2008-06-30, SOED, Hangzhou)。3 k  X5 m5 a/ Z; k( f+ H2 J
%
; w3 B# y, F* I  z5 i1 [" M% by ZHOU Feng6 _: p$ B0 J- {8 _5 k+ A4 E
% zhoufeng@sio.org.cn, ^4 ^$ u6 {) h, [" }) ^
% SOED, 2nd Institute of Oceanography  m& m& ~3 Z( ^' L- z6 H5 P4 Q
% 2008-06-30: J. p, q* T' D) t2 Q
$ L; ]- R! t! ]
s1 = worldhi('china');0 E8 d& e+ }2 W/ `
s2 = worldhi('taiwan');+ c0 B  M8 ~& V1 {1 Q* ?6 A5 q( t& b
disp(s1);) O3 \# Y: L2 ?8 [# j

( T  [( q2 w  ?' F% p' Q% add Taiwan together (ZHOU Feng)zhoufeng@sio.org.cn9 s. @' ~  o1 S6 D( N% v7 j& K
s = s1;
& u+ Y4 m) N8 W/ m$ Z; Ps.lat = [s1.lat;NaN; s2.lat];( Z- ~- w; }' x, [' _
s.long= [s1.long; NaN;s2.long];' e) g8 ^. c/ C1 D3 m3 M
8 R9 s+ @" k1 r2 b7 d' g  `: {* C9 |
% add the Diaoyu Island (钓鱼岛)
5 W& o: v& D& N* X" K) d% 钓鱼岛群岛由钓鱼岛、黄尾岛、赤尾岛、南小岛、北小岛、大南小岛、大北小岛和飞濑岛等岛屿组成,总面积约7平方公里。
7 l/ a+ o. }; }% O% 地理位置:东经123°-124°34′北纬25°40′-26°。( w2 L  G9 Z! v$ i2 t; B5 M
%
$ W' c7 ~8 q" W0 p9 G% ---这里的分辨率只有两块 --3 ?+ n9 ]4 W$ V' b/ C
s3 = worldhi('japan');  %(ZHOU Feng)zhoufeng@sio.org.cn- J0 e# S+ }  x( P& \& [' d' r0 g
x = s3.long;
" y" N; r' H/ n" m. K4 [y = s3.lat;) M, `0 |, y5 O" D4 |
idx = find(x>123.0 & x<124.5);
. E" R3 {, G8 Fidy = find(y> 25.5 & y< 26.0);
, R6 J# Y0 l* m% Um = length(idy);& _8 p: Z% d" \7 L* ~
id=[];
; h! G6 h( Q6 l# C! Efor i=1:m
# Y1 _% p$ L5 W, p* j  @! e    tmp=find(idx == idy(i));. f7 R+ M- }  o7 K$ S- i0 V
    if isempty(tmp)
0 m0 I" K1 P: q' t    else
7 L/ k) Q3 Y9 T        id = [id; idx(tmp)];    %(ZHOU Feng)zhoufeng@sio.org.cn
" O9 P- S: E6 y2 b/ d    end% G  v4 E) z& f- I/ J# X) D
end
  F2 l+ }8 }/ U* O%%longd = x(id);
9 T) }9 v# i" W7 b& E" U0 s2 }%%latd  = y(id);
1 b, g% x$ E  r) h6 v%  i8 p1 ?" |0 d# j
% find nan. G2 F2 e8 ~: _- j' p
dtmp = find(diff(id)>1);
2 ]' [: T+ T- v- Jif isempty(dtmp)
2 v& c" `" r& j7 Z6 z7 F    disp('no change')
. u- v7 Q) F: }7 |3 a8 Celseif length(dtmp)==1/ a( `5 x) X' d, p3 g
    idnew = [id(1:dtmp); id(dtmp+1)-1;id(dtmp+1:end)];
! \! W. G. m- ?$ {else3 B- i+ [* f- q/ _5 a0 S
    for j=1:length(dtmp)
7 W! X- ^: j# L" G5 M  {& N        idnew = [id(1:dtmp(j)+j-1); id(dtmp(j)+1)+j-1; id(dtmp(j)+j+1:end)];        % 未试验,可能有误
( E0 H2 U3 D% s4 P0 y* f) d) ^( z    end; Q2 f3 X# u& x8 C: Q+ ~
end# W2 z4 s$ u. w
longd = x(idnew);
0 d/ G+ e& M; B- Flatd  = y(idnew);7 B- c( `  ]( _

+ t0 B9 ~3 h4 L& Ls.lat = [s.lat; NaN; latd];' Z  N# I6 D, v( b: e; Y' U0 \! e+ d( }
s.long= [s.long; NaN; longd];& a9 J7 V' A1 a" X% b

: m* n2 V% p4 m# Aworldmap china
5 n3 h6 V5 n* ?: f# v! M& nh = displaym(s);& \$ @6 T2 V# n0 u
polcmap; s) h0 n( A! g7 Y  g: B: M0 `

1 B0 ?$ j0 m4 _5 K2 s+ K2 FOK!!!!!!!!!!!!!!!

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 13:29 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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