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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

- y# M: N( R6 ^- {% ]/ Q: W1、用matlab画世界地图7 S0 Y* D/ }: L" ~5 [
- ^) M% O5 H+ h9 C8 @! X
[matlab自带的例子]
3 I8 x. y! @$ C/ `( K: J) P( Y+ S
9 Q  G- B; v4 O/ n) h) r9 Wax = 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')
8 A$ B" y6 X9 r  D( P- S用matlab画世界地图
$ H# x2 ^8 i, o8 _1 d 3 ^$ H- h; J( I+ c/ i

1 l( G0 F! i, o+ o# [- U0 V8 F
. {. H3 j' ^7 q! B, Z* [( H" G0 y7 {: D7 ^
2、matlab的m_map工具箱及添加行政边界底图
& a! ^* |' m- M- r$ z9 P
" u, S0 V( t' }' [2 j对习惯使用matlab的人来说,m_map是一个很好的绘制地图的免费工具箱。可以选择的投影种类近20种,包括常用的Lambert、Mercator、UTM等。可以测量距离( m_lldist, m_xydist ),绘制等值线(m_contour),等值线填充图(m_contouRF),矢量图(m_quiver),栅格图(m_pcolor)等,并与相应的matlab函数语法类似,很容易使用。5 F+ e$ F) R4 i9 m8 I" `

$ H7 p1 m* ?" w; }4 z- ~7 ?      m_map通过m_coast提供1/4 degree分辨率的全球海岸线,通过下载GSHHS可以得到更高分辨率的海岸线数据。
% |& N8 M3 c* J3 h
: B3 J' P, V$ ^% |2 ]. N     除海岸线外,还可以利用已有的GIS行政边界资料,在地图上添加行政边界底图。具体作法为:下载.shp格式的行政边界文件( 国家基础地理信息系统的下载服务),将下载的.shp文件通过mapinfo转换成.dxf文件,利用已编译好的fortran程序,读取经纬度信息,输出.dat文件。导入matlab空间,可以直接m_plot,也可以调用m_plotbndry()。
6 i% z" Z% v# k' L/ f/ ^' A8 l5 G0 [4 T9 }  h' _) C3 [
通过以上方法可以实现.shp在matlab绘图中的应用。" Z# S  ]: }( |3 c: h

7 N) k/ r+ j4 H& O7 R$ T5 ^- \7 j" N, s1 M9 ^) d
3、[原创ZHOU Feng]在matlab中利用worldmap画中国区域图时加上台湾和钓鱼岛' U" G) A. `1 i2 J

. `2 |4 M$ f& p8 \7 K
: J) l: }+ e* f9 gMatlab是我们常用的一个画图和计算、仿真工具,在我们海洋科研中,经常在画图时需要加上底图(譬如海岸线,国界、省界线等等)。常用的一个工具包是M_map。但这里我要讲的是利用matlab自带的一个画图工具包话底图,这个工具包就是worldmap.+ f0 v6 c  i8 t7 x
0 x, a6 x, m3 d; }7 d
& b# A7 @/ b1 \3 {3 D3 [& z
    worldmap的一般用法约为:
8 i7 k# U( {" ?4 X8 r5 {   >> figure; worldmap('china'); polcmap;! q- R& G2 }: A9 f6 b: [
    或者
; c3 k) E/ _- A4 o% e5 O    >> figure; worldmap china; polcmap;
. Z; A+ s0 ~, Y, }0 \# e    如果要加入颜色的画,一般可以这样:8 \- d# Q3 j' |7 m
    >> figure
0 ~1 Z" N$ Q( G% M0 Z! m1 I        worldmap('china','patch')
) ^: I% f  u; h9 V        scaleruler
4 U9 Q/ w2 \; n: X4 A
5 B3 _9 l) R  y4 @7 [    这时候问题就出来了。因为鬼子偷偷的讲台湾和大陆用两种颜色表示;甚至,如果你放大图片的画,会发现钓鱼岛也是不同颜色。这个是我们不能忍受的!!!!!
* L# r: L- m4 `. ?% q+ u    于是我就费了一点时间,琢磨这个画图,然后修改。下面是这个脚本程序,在matlab中执行就可,这时候台湾和钓鱼岛和大陆就是一个颜色了^_^。' L  `- |2 V/ N# e% }9 V
1 o6 ]& z9 f% c; x8 S3 b

# d2 a' l% F/ C( Z    用兴趣的朋友可以把这个用法举一反三((ZHOU Feng)zhoufeng@sio.org.cn。matlab版本是6.5)。
/ }9 X4 I9 O$ _. {' W不过老实说,我不太用matlab自带的这个画图包,用M_map比较多一点。试验一下,感觉还可以用用。
. Z$ ?! R+ K2 l# p3 R& M- }, s画上述图的代码如下:; f4 S, r* g$ V  S" o  _
3 z7 g9 B0 I% ]3 x, Q+ I9 y7 R# O8 S
% 把台湾和大陆合成一个文件保存起来,这样画图用patch就是一种颜色(Zhou Feng, 2008-06-30, SOED, Hangzhou)。0 R/ m) x  o3 U$ V/ Y
%
% S) g+ V; h3 w7 p2 o% by ZHOU Feng
" ]) ~5 \& o1 J3 x3 g# L, E% zhoufeng@sio.org.cn
4 G( o  c+ R1 d, Y# b; n! e9 f% SOED, 2nd Institute of Oceanography
( q" l) A* b  V# L% 2008-06-302 `3 ^0 t/ r+ h0 ]) H

% P1 \% s8 s+ e# A/ us1 = worldhi('china');. I$ X4 H9 J- x6 M  C0 h
s2 = worldhi('taiwan');
5 W% P& M8 H% S+ j- k+ udisp(s1);' e( ]2 ]6 \8 _
# S; z) O# u) P/ U$ C: s# J3 X: v' T
% add Taiwan together (ZHOU Feng)zhoufeng@sio.org.cn
3 u8 k6 h% @8 g& }5 K- S2 P! ds = s1;5 k4 z6 B; {& @) w
s.lat = [s1.lat;NaN; s2.lat];# R  d; z" S9 @& Y
s.long= [s1.long; NaN;s2.long];6 w1 y4 h9 D" B2 o1 M) V/ ^
" B) y4 z4 \/ R% C
% add the Diaoyu Island (钓鱼岛)- V0 ?# a6 s& H% l6 g& @) x
% 钓鱼岛群岛由钓鱼岛、黄尾岛、赤尾岛、南小岛、北小岛、大南小岛、大北小岛和飞濑岛等岛屿组成,总面积约7平方公里。% {# y, [2 N+ j, g' r
% 地理位置:东经123°-124°34′北纬25°40′-26°。
1 ?+ @! C! b; }- J- p/ c% r8 P* `%$ F& _: k6 O- @3 Z
% ---这里的分辨率只有两块 --
, ]" V( \9 r% E- Vs3 = worldhi('japan');  %(ZHOU Feng)zhoufeng@sio.org.cn
$ f! x- ]& s3 J0 ]% f# ^8 \9 Mx = s3.long;
( ^* l2 V, w; M4 N" ky = s3.lat;1 h0 u+ y0 J0 a( }
idx = find(x>123.0 & x<124.5);' n+ m2 \# A% r0 U) @7 L" `
idy = find(y> 25.5 & y< 26.0);# D1 F, O  |0 W& _5 t+ K
m = length(idy);  V$ n3 c/ _/ b8 r5 p# ^: Q
id=[];
  U6 E. L9 \- U  C& g: Wfor i=1:m: A  y- b, B$ b  O
    tmp=find(idx == idy(i));. @% L0 K( [. H& g# C) W
    if isempty(tmp)
0 e* O; }: L5 x  o+ d    else
: G0 m  d' _8 B  T        id = [id; idx(tmp)];    %(ZHOU Feng)zhoufeng@sio.org.cn/ p4 n2 g3 J0 A
    end6 k0 U- z8 o/ {( M" g" E2 u& k6 P
end
  t, }% @- X; e! D' x%%longd = x(id);% h* j: Y9 B4 N2 Q6 X  u
%%latd  = y(id);, d$ H  [2 ]0 L( \. x" h
%4 P$ o& |, X7 h- d" O. D
% find nan
/ w; M; k% F# O$ S( ]dtmp = find(diff(id)>1);
5 B9 A, Z! O# ^( d8 p& Uif isempty(dtmp)
" Z5 v( ^6 v) d) c8 j    disp('no change')
' u+ c7 k2 J9 n3 P) @6 Jelseif length(dtmp)==1. G" g( E1 |" J3 ?6 X
    idnew = [id(1:dtmp); id(dtmp+1)-1;id(dtmp+1:end)];* g7 r  j$ g  A3 @0 r
else9 U" f4 v. _  V
    for j=1:length(dtmp)
6 [* I* J' ^4 Y7 M* y7 s        idnew = [id(1:dtmp(j)+j-1); id(dtmp(j)+1)+j-1; id(dtmp(j)+j+1:end)];        % 未试验,可能有误
  a2 w  y8 g5 l    end
- h7 [9 ]1 S/ Y0 S3 \end# ~. k. p1 J. P4 x! z
longd = x(idnew);
" I( H; u0 r! V7 d( [: f; x" Y, {latd  = y(idnew);" O* P' A; L' O7 S

0 @+ V. T4 E( ^) M1 }' G. b9 Ys.lat = [s.lat; NaN; latd];
7 S: B! O& _/ p, i6 Us.long= [s.long; NaN; longd];
5 D  Z+ [( n2 S9 k
+ R2 x7 ~( t9 m# c  r* Iworldmap china' M8 z- z9 y; r9 Y
h = displaym(s);- u3 {% ]$ U* }4 X" u6 P
polcmap! O: r0 E. k: E! ^2 h

: Z2 @; @/ I4 s- hOK!!!!!!!!!!!!!!!

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-1 14:02 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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