|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
9 u- [6 U/ ?& t4 j9 G) A
1、用matlab画世界地图7 |+ D" m! S1 `3 }1 l2 ?
+ W1 }' _5 J1 Z) ]
[matlab自带的例子]
" `7 W( w r9 S: P) j( J, X ~8 k
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')- m; r+ u4 s( u+ P* t0 M! b( B" Y
用matlab画世界地图2 N7 Z$ H/ q/ B, C
8 v( m1 w0 B" y! A6 X9 ~7 S2 W) U- F
) |: b3 X- v7 {; S' S
1 |! C; v. r& W! `0 \- P: v, ^7 K2、matlab的m_map工具箱及添加行政边界底图3 E1 |7 Q. c; q6 M
0 w }( Y" a8 r+ X对习惯使用matlab的人来说,m_map是一个很好的绘制地图的免费工具箱。可以选择的投影种类近20种,包括常用的Lambert、Mercator、UTM等。可以测量距离( m_lldist, m_xydist ),绘制等值线(m_contour),等值线填充图(m_contouRF),矢量图(m_quiver),栅格图(m_pcolor)等,并与相应的matlab函数语法类似,很容易使用。& a: G! _" m+ o$ c H/ n0 A
4 h6 F" ?9 A; j, u/ n/ O- x6 p: x
m_map通过m_coast提供1/4 degree分辨率的全球海岸线,通过下载GSHHS可以得到更高分辨率的海岸线数据。0 ]# Z4 F' Z! S2 O: B# z4 w4 ~# W
9 `% W$ b3 D, ?. ~8 N/ ~3 p5 f
除海岸线外,还可以利用已有的GIS行政边界资料,在地图上添加行政边界底图。具体作法为:下载.shp格式的行政边界文件( 国家基础地理信息系统的下载服务),将下载的.shp文件通过mapinfo转换成.dxf文件,利用已编译好的fortran程序,读取经纬度信息,输出.dat文件。导入matlab空间,可以直接m_plot,也可以调用m_plotbndry()。& @( j3 B' C1 d) o( u6 ^6 F4 q
3 c8 k! i' W: m1 S7 q! M/ c
通过以上方法可以实现.shp在matlab绘图中的应用。! R3 j0 H* y# y2 t
0 O. l4 r6 j: S5 ^: `7 Z
0 L) x" c. l! p" I0 Q: V
3、[原创ZHOU Feng]在matlab中利用worldmap画中国区域图时加上台湾和钓鱼岛
2 g2 M6 A: \$ u0 R4 c* X. I" E* V# x" j, r& Z6 G/ G
. J7 R9 v: [/ W3 ^4 uMatlab是我们常用的一个画图和计算、仿真工具,在我们海洋科研中,经常在画图时需要加上底图(譬如海岸线,国界、省界线等等)。常用的一个工具包是M_map。但这里我要讲的是利用matlab自带的一个画图工具包话底图,这个工具包就是worldmap.* a2 K2 a+ M$ R/ s* i8 B9 j( z
& {; R4 \& _! f/ i: ~
: w! B) N7 e7 E+ u worldmap的一般用法约为:" Z) `1 i- K+ T* U5 V% x
>> figure; worldmap('china'); polcmap;7 [1 J% q0 g7 ^( d7 K
或者8 S# b; J' {$ ]$ N0 K5 D
>> figure; worldmap china; polcmap;& A7 x4 a1 p9 R$ r
如果要加入颜色的画,一般可以这样:
3 g% Z7 h1 p4 J7 S) S >> figure( f4 b z, V; p& E
worldmap('china','patch') b- f& { p, {6 j0 Q
scaleruler
" N1 z/ m# P# \3 P0 y" y6 {: Q) @) M- V# D' V1 Y
这时候问题就出来了。因为鬼子偷偷的讲台湾和大陆用两种颜色表示;甚至,如果你放大图片的画,会发现钓鱼岛也是不同颜色。这个是我们不能忍受的!!!!!7 i; u4 m+ d7 y" b, Z2 N7 ?1 W
于是我就费了一点时间,琢磨这个画图,然后修改。下面是这个脚本程序,在matlab中执行就可,这时候台湾和钓鱼岛和大陆就是一个颜色了^_^。: N% Y D$ U) A2 V0 R( H
4 V' h2 A/ a+ X: b, ~. d: F0 m- O/ p! h( f1 d+ D; ^ {
用兴趣的朋友可以把这个用法举一反三((ZHOU Feng)zhoufeng@sio.org.cn。matlab版本是6.5)。
" w/ n" G+ H& n% N6 w! y7 q不过老实说,我不太用matlab自带的这个画图包,用M_map比较多一点。试验一下,感觉还可以用用。
7 b! X& i* X3 D6 a0 L- |6 _; j画上述图的代码如下:
" ~2 H6 O( F# y9 ^% k( z4 b) I* [9 O* F3 ?
% 把台湾和大陆合成一个文件保存起来,这样画图用patch就是一种颜色(Zhou Feng, 2008-06-30, SOED, Hangzhou)。
( ]$ j& \* B* e%
) v" B. d! ]" u, o* [ U( Y* C/ ~% by ZHOU Feng
2 P p& B% t6 B; E% zhoufeng@sio.org.cn
6 ~: w; V( B# t7 {8 T9 P% C1 Y' y- l' @% SOED, 2nd Institute of Oceanography, |1 ?! ]4 `0 X! b. _ W
% 2008-06-30
8 H6 s' s: p( ~7 O5 F0 v# I" r9 g' k$ p
s1 = worldhi('china');* ?9 k) d9 @" V8 ~- M! T) F+ {
s2 = worldhi('taiwan');
! ?0 B9 V" m4 P9 \& w7 Y [. j& p- ndisp(s1);
^3 y& o: B. M0 ^' p
. a( I' E5 h& z1 m8 E/ N% add Taiwan together (ZHOU Feng)zhoufeng@sio.org.cn' ?: T) N P; x
s = s1;
& B+ G& r8 W, Ls.lat = [s1.lat;NaN; s2.lat];
: b" l% N4 t/ w8 D- s% Ys.long= [s1.long; NaN;s2.long];, m7 R0 j2 x5 i
& c$ z& J+ t. I5 [
% add the Diaoyu Island (钓鱼岛)
% t) z" S8 F" D) N9 N6 H8 F8 W% 钓鱼岛群岛由钓鱼岛、黄尾岛、赤尾岛、南小岛、北小岛、大南小岛、大北小岛和飞濑岛等岛屿组成,总面积约7平方公里。* |. v% M5 h% ^
% 地理位置:东经123°-124°34′北纬25°40′-26°。; N; _ ^- Q3 _$ Y
%" _+ ]+ D: |. T e+ V/ i4 W* H3 h
% ---这里的分辨率只有两块 --; V- l& s" Y" j- W) I) v
s3 = worldhi('japan'); %(ZHOU Feng)zhoufeng@sio.org.cn
5 D7 v7 Y, {1 b7 \9 q, gx = s3.long;) c9 s+ Z: e. v
y = s3.lat;
8 [% }" m$ s* C9 Cidx = find(x>123.0 & x<124.5);
V8 A, ]$ e: e' B8 hidy = find(y> 25.5 & y< 26.0);8 B. G( q- x( }' n8 p
m = length(idy);
3 K/ A9 h9 R2 y7 s: hid=[];
L) S8 i: I$ ? y5 o" Q6 ]for i=1:m
8 `5 X* l& s1 q5 N3 U# F tmp=find(idx == idy(i));; a$ r1 A# U: m8 K1 s+ ?) ^
if isempty(tmp)
9 o6 ^" R4 Z0 ` else0 X! M9 N6 p. q6 r
id = [id; idx(tmp)]; %(ZHOU Feng)zhoufeng@sio.org.cn
/ M, H2 r$ v) i5 M! @ end
) Q5 q' `9 X0 h5 A! a! S! C$ zend8 A t u- r- f# Y# j3 C6 N1 Q) {
%%longd = x(id);
1 f& ~6 m% J6 F# H1 m%%latd = y(id);' c- S' t% \% M4 l/ U6 q
%: ~; M3 r5 w1 ~% {6 I4 ^
% find nan
+ U3 h- Q, _" M' Bdtmp = find(diff(id)>1);8 h$ |( f: g# \: _! ^$ Z
if isempty(dtmp)
% |+ A2 M3 o& w' m2 l disp('no change')
5 v" M5 i6 t: |6 P& o& Lelseif length(dtmp)==18 @- E+ x1 C' @3 ^! O. g4 \% a
idnew = [id(1:dtmp); id(dtmp+1)-1;id(dtmp+1:end)];- g- f9 l! }1 N; I I( [% _8 H
else
/ r: `- V3 O* a! d, X! S for j=1:length(dtmp)- @) D3 a2 s4 b) x2 r
idnew = [id(1:dtmp(j)+j-1); id(dtmp(j)+1)+j-1; id(dtmp(j)+j+1:end)]; % 未试验,可能有误
# i$ |% {+ \9 O9 f$ o3 f end- ?+ s& z* Z7 {& b1 ^+ Z Z; X
end, N' X2 `2 T' a4 N
longd = x(idnew);4 Y! f! X) i, s" f
latd = y(idnew);
[+ B' t" F! e, A: T: ^8 j
3 h# d/ d6 k; V7 S$ Q# F' ts.lat = [s.lat; NaN; latd];
A$ ]4 q: [1 Ls.long= [s.long; NaN; longd];
) L: k( ^$ T' {
9 }+ a( z' E e. q2 [worldmap china
9 V4 @2 s: o! q8 N( {2 j& \8 N. L( vh = displaym(s);
7 m7 V; o4 o" k }/ f4 E3 I5 J" Bpolcmap
4 e2 a3 }8 ]) I0 P) M; m" Y5 P
# [0 l/ q+ y" v$ I/ b8 TOK!!!!!!!!!!!!!!! |
|