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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

5 u& p+ a# x2 J1、用matlab画世界地图! o9 R* S; ]+ `- @
5 x2 t7 V+ H! m, [& f# {; O$ ~
[matlab自带的例子]: f( O" E3 V6 |+ n* j( _# V

' n$ i0 K7 B6 t0 vax = 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 [8 k" M% I+ e2 O: W1 ^0 p6 F
用matlab画世界地图& H7 s5 U' E* \, G9 ]3 e8 [3 c

. Y* S& ~$ |& R7 B" J9 ~& D  i; \( z- T9 d6 {4 e' ~

  z( V3 [4 f1 E( z. v$ ]9 I- q
0 h0 Q" H, J/ ?9 [4 ?4 m2、matlab的m_map工具箱及添加行政边界底图+ L% s! l% h9 @
3 {7 g2 `: M( w* P. c+ ~" i
对习惯使用matlab的人来说,m_map是一个很好的绘制地图的免费工具箱。可以选择的投影种类近20种,包括常用的Lambert、Mercator、UTM等。可以测量距离( m_lldist, m_xydist ),绘制等值线(m_contour),等值线填充图(m_contouRF),矢量图(m_quiver),栅格图(m_pcolor)等,并与相应的matlab函数语法类似,很容易使用。+ v  @6 h0 S# c5 c: B4 y' R) N& q
0 W% m. J3 n0 {5 o
      m_map通过m_coast提供1/4 degree分辨率的全球海岸线,通过下载GSHHS可以得到更高分辨率的海岸线数据。1 b3 O5 G. f" G2 H6 U/ R8 A, K" |5 m
' V/ ]2 q5 ?$ f; {5 o
     除海岸线外,还可以利用已有的GIS行政边界资料,在地图上添加行政边界底图。具体作法为:下载.shp格式的行政边界文件( 国家基础地理信息系统的下载服务),将下载的.shp文件通过mapinfo转换成.dxf文件,利用已编译好的fortran程序,读取经纬度信息,输出.dat文件。导入matlab空间,可以直接m_plot,也可以调用m_plotbndry()。! B5 ^) ]( V( n( u* X4 X
' q0 B" d6 h! j& y' z. g8 [; }
通过以上方法可以实现.shp在matlab绘图中的应用。
. m0 U) a, K$ |  v
+ r, p; f; B, u: |% C, H, Q7 J
; D# S/ l  Q# _" }% F/ t3、[原创ZHOU Feng]在matlab中利用worldmap画中国区域图时加上台湾和钓鱼岛
! x, b: u# ^0 R# \" ~
9 U4 O( X$ |# p* n; `$ _! C/ L  T$ k' R; e
Matlab是我们常用的一个画图和计算、仿真工具,在我们海洋科研中,经常在画图时需要加上底图(譬如海岸线,国界、省界线等等)。常用的一个工具包是M_map。但这里我要讲的是利用matlab自带的一个画图工具包话底图,这个工具包就是worldmap.! `7 ?  z% c4 P5 }" |

4 u( c% D( \& ?- e7 X7 ^- E$ S( R; w
    worldmap的一般用法约为:
2 d2 B" t; k2 [, f. Y: i* w) B- u* I* \   >> figure; worldmap('china'); polcmap;# I2 I; E8 ~/ Q4 s5 S9 g
    或者
, @# c( ^4 x" g    >> figure; worldmap china; polcmap;1 w3 w- C# g! v. f4 d! d# f+ l
    如果要加入颜色的画,一般可以这样:9 ?7 r1 b7 O6 ]6 [2 k6 z
    >> figure5 S! H) |1 z( E3 i
        worldmap('china','patch')
) ]0 r& `  s, v: ^        scaleruler( i% @" W, ^* W3 \
6 @' [% r" e) z$ @( y3 v9 o
    这时候问题就出来了。因为鬼子偷偷的讲台湾和大陆用两种颜色表示;甚至,如果你放大图片的画,会发现钓鱼岛也是不同颜色。这个是我们不能忍受的!!!!!. z* j% T0 ^" D+ M5 g# }, u
    于是我就费了一点时间,琢磨这个画图,然后修改。下面是这个脚本程序,在matlab中执行就可,这时候台湾和钓鱼岛和大陆就是一个颜色了^_^。) v& W5 Z$ ?. c4 r. I: k
' e# X# @" _$ ~, ~. M5 z

& {- C# n9 C7 ^9 p6 x$ P8 j    用兴趣的朋友可以把这个用法举一反三((ZHOU Feng)zhoufeng@sio.org.cn。matlab版本是6.5)。
! b! H) D: \2 n9 N" @3 Z0 g: u不过老实说,我不太用matlab自带的这个画图包,用M_map比较多一点。试验一下,感觉还可以用用。/ K* G6 R  [; S/ C  r" Z) ~0 A7 V$ w
画上述图的代码如下:
' X9 Z7 _! Q8 J" x* ?/ h5 H: g  v0 M$ z. e" P9 {8 I
% 把台湾和大陆合成一个文件保存起来,这样画图用patch就是一种颜色(Zhou Feng, 2008-06-30, SOED, Hangzhou)。
9 z9 l) o; `3 W* ]1 z2 g%3 j1 o! K( T' n% x$ u, [" Z
% by ZHOU Feng% F2 V2 |1 |" Y! {6 d& G0 M
% zhoufeng@sio.org.cn
% P/ z5 ?& h% a' X) w% SOED, 2nd Institute of Oceanography) M8 e+ f. {  c2 T+ M
% 2008-06-30
( o" q, S$ ~5 [8 g8 a* q" ]
9 i( ?* Z/ q% m% J! {& P6 Z% U3 [* ns1 = worldhi('china');* q1 E" r0 D/ t) V3 w
s2 = worldhi('taiwan');1 K3 |$ A/ {4 T) V
disp(s1);
) O/ {7 |3 d* T" ]. K- |: |" \  M/ |: J  \  j7 ?0 `- X  A& n. q. D
% add Taiwan together (ZHOU Feng)zhoufeng@sio.org.cn9 h- m, v0 V8 o: I2 w
s = s1;( N$ J6 l  R; [8 t
s.lat = [s1.lat;NaN; s2.lat];
9 C) n, l1 a( r: e7 y6 r. c' Xs.long= [s1.long; NaN;s2.long];
- u7 z8 Q# v7 ?/ ]9 P: ?  v" c$ k! q; O
% add the Diaoyu Island (钓鱼岛)' X& s! E& _' ^2 A  ?# D4 |
% 钓鱼岛群岛由钓鱼岛、黄尾岛、赤尾岛、南小岛、北小岛、大南小岛、大北小岛和飞濑岛等岛屿组成,总面积约7平方公里。& R$ H! a* V# M0 `) j+ d% w! L# D
% 地理位置:东经123°-124°34′北纬25°40′-26°。2 H  ?' O: m9 |4 L/ c4 l
%& s5 a, g/ g1 @# g3 v
% ---这里的分辨率只有两块 --3 q; {% H/ {) w
s3 = worldhi('japan');  %(ZHOU Feng)zhoufeng@sio.org.cn
9 J4 C1 Q# T' Gx = s3.long;
5 z# u$ v. V8 ]& x9 Wy = s3.lat;
2 ~/ U! c$ J- R' S! q" A  Fidx = find(x>123.0 & x<124.5);( _, q, W7 Z. w8 H, r* w* o
idy = find(y> 25.5 & y< 26.0);2 T* o% @* o, \' c' d6 K
m = length(idy);* j' k! l, X/ Z$ s  l
id=[];
; ]& [+ h  V7 z- ~+ A$ U* L8 D6 tfor i=1:m4 B5 b( {$ L* k' K
    tmp=find(idx == idy(i));
# H, F& ^' u$ n' [    if isempty(tmp)
' B( ^- b: W* o    else% s$ E& r7 n* a$ h2 Y8 ~  m
        id = [id; idx(tmp)];    %(ZHOU Feng)zhoufeng@sio.org.cn
, [5 x- O" l( \( E; n    end+ K$ W8 m. P/ E% f' v
end
# W6 L' m  x& v%%longd = x(id);
) S) t7 R# N! y: M4 W7 s( r%%latd  = y(id);6 l7 q* V2 B$ d' ~! @! k3 A7 v
%
0 z9 n- ~3 t7 u" w- X" u4 Y" k% find nan5 O& c& b, H8 ]
dtmp = find(diff(id)>1);: R% c- B8 \3 N+ ?
if isempty(dtmp)
  |5 o1 O" x( ?' [0 G    disp('no change')  {9 {5 e- ]1 b* }$ B3 F
elseif length(dtmp)==1
3 v" I7 `# N) E/ e! Z* z! y0 }    idnew = [id(1:dtmp); id(dtmp+1)-1;id(dtmp+1:end)];
! ?7 p& g+ |+ v9 L4 Qelse
5 j! C( h/ G1 Z' O# [    for j=1:length(dtmp)2 f" |3 K% C. V& N. R
        idnew = [id(1:dtmp(j)+j-1); id(dtmp(j)+1)+j-1; id(dtmp(j)+j+1:end)];        % 未试验,可能有误
+ y- y& F# e8 _* D( \# `5 R    end8 W, S" F4 I3 ?$ T  ~- `1 h( a+ l& S8 F
end' b9 `3 ?! Y8 r
longd = x(idnew);4 ?0 M. D0 A- T3 S; c
latd  = y(idnew);
. W! q4 I. n( G  L4 Z0 R8 R3 Y" ~" |; x0 K% a1 V
s.lat = [s.lat; NaN; latd];
; U% [- c0 S# Gs.long= [s.long; NaN; longd];. r7 D! v1 c" K
6 x# [; j6 {$ e0 g/ y  I' ^! g
worldmap china' A6 V( ?7 ?/ F  Q  F+ J
h = displaym(s);
5 s& s  H/ z% X; Lpolcmap4 k+ j6 {3 ?! L

6 I+ m7 r) \* L( y; o( ^! O. xOK!!!!!!!!!!!!!!!

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 03:51 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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