|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
& }" W# P- l# ? _4 F0 Z$ f2 }7 A% h
1、用matlab画世界地图
; J, ~" ^6 g3 P7 W
8 G/ A# z) f$ a/ [" G[matlab自带的例子]
; v& T$ ? p8 a0 ]+ z4 Y: Y
( J( ?" @ o+ `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'); f5 r3 v& C$ d X1 x
用matlab画世界地图 c* p9 }$ M! m9 X% p7 k
1 {% R! B6 s7 T! r0 R
) r( d' g$ C! N+ T! A
8 C; n& V( _3 C$ [! B+ @% P$ {* A/ H! e
2、matlab的m_map工具箱及添加行政边界底图
0 x3 k- E4 Q; H3 `5 w9 d: H
. I9 D7 e, Q: M& J1 }9 u+ q5 n对习惯使用matlab的人来说,m_map是一个很好的绘制地图的免费工具箱。可以选择的投影种类近20种,包括常用的Lambert、Mercator、UTM等。可以测量距离( m_lldist, m_xydist ),绘制等值线(m_contour),等值线填充图(m_contouRF),矢量图(m_quiver),栅格图(m_pcolor)等,并与相应的matlab函数语法类似,很容易使用。
7 ]! }! ^( k7 Q6 W }
! h6 D" }+ [0 {3 u( i: k) Y m_map通过m_coast提供1/4 degree分辨率的全球海岸线,通过下载GSHHS可以得到更高分辨率的海岸线数据。" E# F6 v2 F% z m- C3 ]
( S# W( I- y; T; Z0 l0 p
除海岸线外,还可以利用已有的GIS行政边界资料,在地图上添加行政边界底图。具体作法为:下载.shp格式的行政边界文件( 国家基础地理信息系统的下载服务),将下载的.shp文件通过mapinfo转换成.dxf文件,利用已编译好的fortran程序,读取经纬度信息,输出.dat文件。导入matlab空间,可以直接m_plot,也可以调用m_plotbndry()。/ j$ o6 I9 L7 C7 r6 m
" U1 ^/ |3 G& Q6 t
通过以上方法可以实现.shp在matlab绘图中的应用。
( \1 i6 q& b7 u/ W
4 l6 o, v4 p& ~
) `+ a! ?; ^* r3、[原创ZHOU Feng]在matlab中利用worldmap画中国区域图时加上台湾和钓鱼岛$ a: K6 H( Z) |7 L% p" X+ z
( ]8 ~. P6 U) k: t) u
3 Y; e9 p9 V# n. r) Q3 i
Matlab是我们常用的一个画图和计算、仿真工具,在我们海洋科研中,经常在画图时需要加上底图(譬如海岸线,国界、省界线等等)。常用的一个工具包是M_map。但这里我要讲的是利用matlab自带的一个画图工具包话底图,这个工具包就是worldmap.4 |; ^+ Y+ H; N2 Q3 P/ B% e
$ f+ x7 r$ H! _ S, N* f2 ^, m5 ~ ]" J* H- C" o
worldmap的一般用法约为:
0 F6 m9 q) ^1 D) C& u) ? >> figure; worldmap('china'); polcmap; O1 Z5 |1 @; K0 [$ p) e$ p# Q' i
或者
9 l% L! a4 v R. R+ C( c& Y >> figure; worldmap china; polcmap;
7 c v9 U$ ^7 I: \8 S. ^) o- X4 Y. s 如果要加入颜色的画,一般可以这样:
4 M9 a% p _( i >> figure* k( d+ [% p. k ?0 L
worldmap('china','patch')! W$ l0 b3 {) V6 V
scaleruler0 C: b- M4 b4 S6 u
9 d' s4 s1 N' h. ] 这时候问题就出来了。因为鬼子偷偷的讲台湾和大陆用两种颜色表示;甚至,如果你放大图片的画,会发现钓鱼岛也是不同颜色。这个是我们不能忍受的!!!!!3 I+ N, d+ |+ P& ]0 K. ]. F4 _( `
于是我就费了一点时间,琢磨这个画图,然后修改。下面是这个脚本程序,在matlab中执行就可,这时候台湾和钓鱼岛和大陆就是一个颜色了^_^。& {& o% E; b- y, i4 l
, q; X( n7 C9 Z( n& |6 y1 P5 G8 b7 R4 G# \$ S* S' m. F+ I
用兴趣的朋友可以把这个用法举一反三((ZHOU Feng)zhoufeng@sio.org.cn。matlab版本是6.5)。
" y. M4 `3 A! t不过老实说,我不太用matlab自带的这个画图包,用M_map比较多一点。试验一下,感觉还可以用用。
4 h5 T K6 {9 L) W" t5 F2 e7 a$ a画上述图的代码如下:
, T+ ~4 S1 K" |7 }, O o/ B! }* [' S3 m
% 把台湾和大陆合成一个文件保存起来,这样画图用patch就是一种颜色(Zhou Feng, 2008-06-30, SOED, Hangzhou)。
R! H7 \- ?& U: U: M%
9 h! w6 j! Y5 f2 R D" u% by ZHOU Feng
5 H# e8 v9 H% ~. y1 H& b% zhoufeng@sio.org.cn
8 q3 P% @+ [( T% u0 Q, P% SOED, 2nd Institute of Oceanography# U- a* w$ G+ B! |9 L
% 2008-06-30
& ^0 m: x- e) I4 t, I0 f8 l2 W; q+ c% p- q' k7 C. M7 d) m$ w' j' \9 R
s1 = worldhi('china');
6 ?7 j+ k6 |- A& B# v$ bs2 = worldhi('taiwan');% P# s: ?' ?. V* k/ g& |
disp(s1);
, d! L8 B( g/ l0 B" g* R* T: D- k i- ^& n, H2 W# \0 K! D
% add Taiwan together (ZHOU Feng)zhoufeng@sio.org.cn
d0 E# m( o. B, c! P: g: os = s1;2 [6 Q6 n8 @0 Z( J! N5 G( y
s.lat = [s1.lat;NaN; s2.lat];
( U. Y% d& g6 G1 Q4 x3 @% Ds.long= [s1.long; NaN;s2.long];
" U- h! Y/ T9 S
" V6 M. x7 v0 R |% add the Diaoyu Island (钓鱼岛)
9 ]% _: M% X0 A' ] i0 i% 钓鱼岛群岛由钓鱼岛、黄尾岛、赤尾岛、南小岛、北小岛、大南小岛、大北小岛和飞濑岛等岛屿组成,总面积约7平方公里。
- E! v) D' s8 s# g/ D7 a3 L2 M% 地理位置:东经123°-124°34′北纬25°40′-26°。
8 V4 R4 ?5 B# c+ j) v; {( g/ @%! f4 ?4 K, U" [0 S: p2 ]8 z# C
% ---这里的分辨率只有两块 --2 w; h3 F( d q1 b$ X: L3 o! @! S
s3 = worldhi('japan'); %(ZHOU Feng)zhoufeng@sio.org.cn
7 T3 M8 c' H) Sx = s3.long;+ J# y/ _5 B) P( t2 N
y = s3.lat;
5 M/ }' K6 O/ w& k/ f! y* Qidx = find(x>123.0 & x<124.5); y6 l# R; h! |9 p
idy = find(y> 25.5 & y< 26.0);1 |( M1 |# C. S% m* Z4 n% }4 [2 U
m = length(idy);
: T0 n& s' J0 }3 [4 Q) lid=[];
: j* [( x o" G# ^for i=1:m, ]( P+ _4 R% ~9 e2 G4 a% k& W. |! d
tmp=find(idx == idy(i));
' T1 N4 o! `0 q0 U6 _1 m3 V: B if isempty(tmp)
4 e* x1 ~) P2 L8 W7 C4 o) o else6 u8 V) Y$ g4 u. o; i
id = [id; idx(tmp)]; %(ZHOU Feng)zhoufeng@sio.org.cn
7 `) N0 t4 |' N* P6 Q end) h5 u7 y* M8 l
end
; N( |; ?& N: j" Y%%longd = x(id);6 V% F- M9 J8 j- H3 {7 Z
%%latd = y(id);
* p4 b6 N% {1 P9 C8 k- t9 S! r- O%! l/ X+ l P2 h( j7 f
% find nan. a& ~- s3 {) U) R, B+ n
dtmp = find(diff(id)>1);
1 U1 q( R8 f/ U+ r% D! b+ jif isempty(dtmp)& x; y' N- ?2 T$ c7 ~ _
disp('no change')) K% {8 x- C6 j" J
elseif length(dtmp)==1
/ }& X, d( B# N- S. M idnew = [id(1:dtmp); id(dtmp+1)-1;id(dtmp+1:end)];$ T# s, D! p m' r, w4 @- u
else: T5 E, a. e: ~! J6 Z% h9 A
for j=1:length(dtmp)& y" g, ] n# \
idnew = [id(1:dtmp(j)+j-1); id(dtmp(j)+1)+j-1; id(dtmp(j)+j+1:end)]; % 未试验,可能有误2 J1 k0 K+ f# t; `! ]" H6 @
end
& \2 F9 p3 z5 U+ r+ H2 lend$ T( l G5 `3 w; q i1 L A
longd = x(idnew);6 r. m( M8 j$ J3 w5 i
latd = y(idnew);
# Q5 |8 E' @3 {: F% ]2 _6 O: O* P5 m+ J- j
s.lat = [s.lat; NaN; latd];6 P7 C) L: t3 U2 x; ^- ` c- j
s.long= [s.long; NaN; longd];7 C, [) o1 ^4 [. W4 n3 ]4 c
( Q; t- y; V8 ?8 X# d% u$ m
worldmap china
) n! C% l. ~8 {4 Vh = displaym(s);. k* ~3 Z I/ ^" z8 h2 p* I2 F
polcmap
7 @4 r, i5 ?2 A' n7 _) I9 F x2 V" h+ t9 p+ G
OK!!!!!!!!!!!!!!! |
|