EDA365电子论坛网
标题:
利用matlab画地图的工具:worldmap和m_map
[打印本页]
作者:
uqHZau
时间:
2020-3-17 10:27
标题:
利用matlab画地图的工具:worldmap和m_map
4 u' V! {7 f, }3 @
1、用matlab画世界地图
" G% j, d1 G8 @, R
/ N ?9 `6 |) T3 a$ @/ M
[matlab自带的例子]
; a [& e$ l+ z! y* h
' R7 P: W7 P. b. t
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')
& v. T0 s( \ C1 v7 u8 N
用matlab画世界地图
3 T. L3 H" W2 O& \0 H. o
; p% a2 H; r* R6 q4 ?$ u
2 v6 n( x% A! O I1 E
17-2.png
(8.65 KB, 下载次数: 9)
下载附件
保存到相册
2020-3-17 10:26 上传
/ f4 N& n9 v& a) R
! `) }/ J" ?( A1 q d. _# Q
2、matlab的m_map工具箱及添加行政边界底图
5 O, h- \5 ^; a4 `
2 z. B' Q0 c7 }
对习惯使用matlab的人来说,m_map是一个很好的绘制地图的免费工具箱。可以选择的投影种类近20种,包括常用的Lambert、Mercator、UTM等。可以测量距离( m_lldist, m_xydist ),绘制等值线(m_contour),等值线填充图(m_contourf),矢量图(m_quiver),栅格图(m_pcolor)等,并与相应的matlab函数语法类似,很容易使用。
2 o0 j' \, P+ S
4 ]5 R" |9 c7 p8 g$ z; o
m_map通过m_coast提供1/4 degree分辨率的全球海岸线,通过下载GSHHS可以得到更高分辨率的海岸线数据。
! k2 @% r0 B- a/ l" v7 e
/ T c- E* b. U- J) @+ `1 y' y
除海岸线外,还可以利用已有的GIS行政边界资料,在地图上添加行政边界底图。具体作法为:下载.shp格式的行政边界文件( 国家基础地理信息系统的下载服务),将下载的.shp文件通过mapinfo转换成.dxf文件,利用已编译好的fortran程序,读取经纬度信息,输出.dat文件。导入matlab空间,可以直接m_plot,也可以调用m_plotbndry()。
/ _ q- I2 H' m- I' u, u9 d: @: p9 U
5 x& N8 n5 N; s4 Y
通过以上方法可以实现.shp在matlab绘图中的应用。
1 i; W8 _+ ~$ X* c$ j) i! P1 C
: `; i/ l9 J2 H* K* {. [& d
, U: Z# i* \8 n) P% ?5 d
3、[原创ZHOU Feng]在matlab中利用worldmap画中国区域图时加上台湾和钓鱼岛
; Z" Y6 J0 q9 v4 h' J+ O) [
4 j6 g. ^* r9 }& i, P- J
' [# D$ G5 z; F" j9 {5 e
Matlab是我们常用的一个画图和计算、仿真工具,在我们海洋科研中,经常在画图时需要加上底图(譬如海岸线,国界、省界线等等)。常用的一个工具包是M_map。但这里我要讲的是利用matlab自带的一个画图工具包话底图,这个工具包就是worldmap.
; ~' X) P' m3 S% }
$ q4 K8 g! e* Y- _5 i
% f6 H% l% Y! ~, S' c! G2 p& Z
worldmap的一般用法约为:
+ k/ J, f) c' M; y, ]6 @
>> figure; worldmap('china'); polcmap;
7 |+ G" S% p* n% F! p; L; [! F# }
或者
/ z( L* \' n- d6 T- z I7 `
>> figure; worldmap china; polcmap;
9 q3 h {& _; D" o& ]. N5 a- g
如果要加入颜色的画,一般可以这样:
* R9 b; J) Q: o9 x- q
>> figure
- ~: N6 T" @. j: ^2 ?- o3 l4 W
worldmap('china','patch')
I) n/ F- B+ I% v% \
scaleruler
$ w0 E5 v; |, o* q3 i2 `
# w& H- p. u3 h& K* C* w$ S
这时候问题就出来了。因为鬼子偷偷的讲台湾和大陆用两种颜色表示;甚至,如果你放大图片的画,会发现钓鱼岛也是不同颜色。这个是我们不能忍受的!!!!!
- N( C& n, p, @- R5 x
于是我就费了一点时间,琢磨这个画图,然后修改。下面是这个脚本程序,在matlab中执行就可,这时候台湾和钓鱼岛和大陆就是一个颜色了^_^。
& W0 K5 }! I, w- T
0 g/ Q* \: p- j' E. O
! A1 r7 S+ ?" u4 ` O r" Q# K
用兴趣的朋友可以把这个用法举一反三((ZHOU Feng)
zhoufeng@sio.org.cn
。matlab版本是6.5)。
8 H) K) }7 N2 w1 b; {7 D
不过老实说,我不太用matlab自带的这个画图包,用M_map比较多一点。试验一下,感觉还可以用用。
3 k6 f, ]2 m! j( V8 I. d5 T
画上述图的代码如下:
7 y! j8 n: W# q0 b0 G+ W
7 i B+ U+ B' j7 |- t6 c' A: ?
% 把台湾和大陆合成一个文件保存起来,这样画图用patch就是一种颜色(Zhou Feng, 2008-06-30, SOED, Hangzhou)。
) t5 z* x$ Y4 R3 N) k
%
O: L) p! U: Q2 J
% by ZHOU Feng
5 w& z, J4 Z0 ^7 B9 C
%
zhoufeng@sio.org.cn
5 H# A% s4 [# ]% y: M) d4 I1 } ^
% SOED, 2nd Institute of Oceanography
2 P( x$ w: C$ c# X4 i4 o
% 2008-06-30
7 t7 H$ b2 Y3 r _1 X
% L0 L F- v& @) H+ H3 q I9 K
s1 = worldhi('china');
- e- d! a8 p6 b
s2 = worldhi('taiwan');
8 H( }% b/ y& x, d/ R6 H
disp(s1);
* o8 n8 V4 `0 o+ ^
p5 {% Z$ u; @
% add Taiwan together (ZHOU Feng)
zhoufeng@sio.org.cn
) e5 l8 ~+ ^4 ]7 X1 O) o2 P
s = s1;
0 j, U/ i9 Z9 x' Q
s.lat = [s1.lat;NaN; s2.lat];
5 z+ T+ h! Q& S- `
s.long= [s1.long; NaN;s2.long];
9 V9 ?5 X( a3 k+ d6 |; N
- o1 E$ ^8 ]- j% r1 s
% add the Diaoyu Island (钓鱼岛)
& }0 ? H3 \9 M d2 j. t" r! a
% 钓鱼岛群岛由钓鱼岛、黄尾岛、赤尾岛、南小岛、北小岛、大南小岛、大北小岛和飞濑岛等岛屿组成,总面积约7平方公里。
% ^# j: f8 R, K+ V v
% 地理位置:东经123°-124°34′北纬25°40′-26°。
) O( c, ~. g. `/ ~8 a# v
%
4 T X. E& c. |+ f- h6 o0 X/ D
% ---这里的分辨率只有两块 --
2 F. s& {! i' H9 b
s3 = worldhi('japan'); %(ZHOU Feng)
zhoufeng@sio.org.cn
* X! S- U+ V4 N
x = s3.long;
2 H5 v( p7 w4 X4 l( k( S/ q) [/ W
y = s3.lat;
- u: _9 a" O# B7 g- s, T& O) ?1 A" i& D
idx = find(x>123.0 & x<124.5);
- r. b, {! B5 K/ P& y
idy = find(y> 25.5 & y< 26.0);
8 S9 i4 w2 r7 N3 }
m = length(idy);
8 G7 b z5 v: @, Y! { T3 c
id=[];
1 B! n- f8 K0 R6 L3 Z
for i=1:m
# c4 d5 V2 ?& z% C2 d9 ]! o; E
tmp=find(idx == idy(i));
" {, G1 o! x, f$ w, d2 o
if isempty(tmp)
$ D% q1 b: F' p: R7 l
else
5 @' N8 d; t6 j
id = [id; idx(tmp)]; %(ZHOU Feng)
zhoufeng@sio.org.cn
, r9 S4 E. @6 D; Z+ s9 S& p
end
& [' q9 s% Y) l5 G
end
4 U( h+ ?/ s$ j2 [
%%longd = x(id);
0 |8 M% u$ m! e; i
%%latd = y(id);
6 j3 `5 e- ]( ~: A
%
) G* c1 J& {+ o- A5 v( N9 \: z8 `$ |
% find nan
) r- @& M/ v$ g. r; |! J
dtmp = find(diff(id)>1);
- W6 J3 ~. x+ t: ~1 v
if isempty(dtmp)
j" e) {6 V( [! Q5 g) n
disp('no change')
- c3 D8 K& i! Y- H! [. |. ^" Y, D
elseif length(dtmp)==1
% r! s7 ?9 H9 Y; r3 I+ ]/ Q
idnew = [id(1:dtmp); id(dtmp+1)-1;id(dtmp+1:end)];
5 w) n7 g: E& b9 [3 z
else
, U9 N- U7 D0 V+ f- B
for j=1:length(dtmp)
8 a; b" j7 j! c8 v4 F* {
idnew = [id(1:dtmp(j)+j-1); id(dtmp(j)+1)+j-1; id(dtmp(j)+j+1:end)]; % 未试验,可能有误
' w. `9 Y4 Y8 r, l: b! t$ b8 s
end
6 f k2 N7 I+ c8 g1 P- N A
end
2 ]9 j- m4 r8 ?9 J2 Q |
longd = x(idnew);
1 D6 ^0 k$ t: H2 m3 r' H
latd = y(idnew);
' x/ ^+ ^8 y5 Z2 ]
" d3 H% Z( ]3 N9 l3 b
s.lat = [s.lat; NaN; latd];
2 I0 K9 P8 x6 \& ~* t% a6 }
s.long= [s.long; NaN; longd];
" i8 J7 ?! l0 |' m& B
: {$ o# A0 m0 _+ o Z
worldmap china
! T, i/ @& U0 X7 @8 }0 S: ~
h = displaym(s);
1 M& d1 M+ O, y+ I3 Z
polcmap
, U7 Z S9 @% h
! g/ l9 ?6 c+ `/ V
OK!!!!!!!!!!!!!!!
作者:
wu68aq
时间:
2020-3-17 17:38
看看楼主说的matlab画世界地图的工具。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2