海岩秋沙 发表于 2005-3-10 13:25

数字地球-Matlab的map工具箱的应用

<H2  align=center><FONT face=宋体>数字地球-Matlab的map工具箱的应用 </FONT></H2>
<P><FONT face=宋体 size=3>  在美国副总统戈尔提出数字地球概念后,中国也随之掀起了一场数字地球的热潮。前一段时间听了中科院地理所的刘纪远所长作的报告,他们建立了一个<st1:chmetcnv w:st="on" UnitName="公里" SourceValue="1" HasSpace="False" Negative="False" NumberType="3" TCSC="1">一公里</st1:chmetcnv>像元的各种地理属性的综合数据库,并且以此为依托给国务院作了几份图文并茂、有凭有据的论文,讨论了西部大开发及沙暴现象等重要问题。</FONT></P>
<P><FONT face=宋体 size=3>  在matlab中也有一个很出色的工具箱map能够处理各种地图地理信息。下面我介绍一个利用它制作的地球仪。数据来至map工具箱中的topo.mat文件,这里有一个关于地球各点海拔高度的数据的数组topo,大小是180*360,表示的是180个纬线和360个经线的交叉网格。</FONT></P>
<P><FONT face=宋体 size=3>imagesc(flipud(topo))</FONT></P>
<P><v:shapetype><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path connecttype="rect" gradientshapeok="t" extrusionok="f"></v:path><lock aspectratio="t" v:ext="edit"></lock></v:shapetype><v:shape><v:imagedata><FONT face=宋体 size=3></FONT></v:imagedata></v:shape></P>
<P><FONT face=宋体 size=3>可以看出该数据的摆放次序是,在纵向1到180表示从南极到北极,而横向是从格林威治0度经线开始向东。</FONT></P>
<P><FONT face=宋体 size=3>知道了这些情况后,就可以设计我们的地球仪了。我决定在一个球体上同时用起伏和颜色来表示陆地,而根据我们的一般看法,把海洋的地方设置成光滑的,而只用颜色来表现深浅。另外陆地表面的起伏相对于地球的半径来说实在是太小了,所以为了有很好的视觉效果,做了一些比例的放大。</FONT></P>
<P><FONT face=宋体 size=3>源程序如下</FONT></P>
<P><FONT size=3><FONT face=宋体>function []=solidearth()
load topo; %DEM of the earth
ptopo = topo; ptopo(topo&lt;0) = 0; %Erase the water to zero
ptopo = 100*ptopo/(almanac('earth','radius')*1000); %scale the surface updown against the earth's radius
axesm globe; %use the project tool provided by map toolbox
view(); %turn it to the side that we see China in center
axis off;
meshm(topo,topolegend,size(topo),ptopo); %cast a mesh grid to axis
demcmap(topo) %show it with color
shading interp
lightm(23.5,71,'Color','y') %a remote light
material([.5 .7 1.5]); lighting phong %add material
camzoom(2); %zoom

这里重要的是几个map工具箱中的投影函数,源程序中作了简要的说明,要想真正理解它们请认真阅读帮助文件。</FONT></FONT></P>
<P><v:shape><v:imagedata><FONT face=宋体 size=3></FONT></v:imagedata></v:shape></P>
<P><FONT face=宋体 size=3>既然是地球仪就应该让它转起来,下面再简单的生成一个movie。</FONT></P>
<P><FONT face=宋体 size=3>先用camzoom把地球调整到在figure中占一个合适的大小,然后把整个figure缩小到较小的尺寸(画面越大就需要越多的内存)。</FONT></P>
<P><FONT face=宋体 size=3>for i=1:20; camorbit(360/20,0); M(:,i)=getframe(gcf); end;</FONT></P>
<P><FONT face=宋体 size=3>其中camorbit是让视角绕球心旋转,getframe是采集画面的函数。</FONT></P>
<P><FONT face=宋体 size=3>接着用movie(M)就可以观看旋转的地球了!当然你还可以把这些画面输出到标准的图形文件中,用其他的图像工具把它们转换成动画gif或avi文件。</FONT></P>

liwenhui 发表于 2007-11-8 18:31

wonderful!

wwciso 发表于 2007-11-11 12:19

工具箱怎么用?
[此贴子已经被作者于2007-11-11 12:19:35编辑过]

xashili 发表于 2009-2-20 18:02

如何应用呀?

cxdneoplan 发表于 2010-6-15 12:15

工具箱怎么用?

cxdneoplan 发表于 2010-6-15 12:15

如何应用呀?wonderful!

cxdneoplan 发表于 2010-6-15 12:16

数字地球-Matlab的map工具箱的应用
4 a& N3 l8 F) \, I
  在美国副总统戈尔提出数字地球概念后,中国也随之掀起了一场数字地球的热潮。前一段时间听了中科院地理所的刘纪远所长作的报告,他们建立了一个一公里像元的各种地理属性的综合数据库,并且以此为依托给国务院作了几份图文并茂、有凭有据的论文,讨论了西部大开发及沙暴现象等重要问题。

3 p& i+ T. y9 L
  在matlab中也有一个很出色的工具箱map能够处理各种地图地理信息。下面我介绍一个利用它制作的地球仪。数据来至map工具箱中的topo.mat文件,这里有一个关于地球各点海拔高度的数据的数组topo,大小是180*360,表示的是180个纬线和360个经线的交叉网格。

! O8 X& |0 i% |/ F
imagesc(flipud(topo))

% G/ C, }3 ]& |7 a% t$ p' K4 g

% U0 |8 b+ B5 E
可以看出该数据的摆放次序是,在纵向1到180表示从南极到北极,而横向是从格林威治0度经线开始向东。

* x1 j" W$ v9 M5 v8 V/ c$ [( F
知道了这些情况后,就可以设计我们的地球仪了。我决定在一个球体上同时用起伏和颜色来表示陆地,而根据我们的一般看法,把海洋的地方设置成光滑的,而只用颜色来表现深浅。另外陆地表面的起伏相对于地球的半径来说实在是太小了,所以为了有很好的视觉效果,做了一些比例的放大。

" N( y, R+ o+ B; v% `
源程序如下

3 T2 u: K z& r
function []=solidearth()0 g5 l- O! _! A7 C: ^. r) D6 z load topo; %DEM of the earth $ E5 w. C* S, h' optopo = topo; ptopo(topo<0) = 0; %Erase the water to zero$ ?( k% p; p* C _& _$ m' K ptopo = 100*ptopo/(almanac('earth','radius')*1000); %scale the su**ce updown against the earth's radius 2 S% `8 f2 V8 |axesm globe; %use the project tool provided by map toolbox 5 X5 h- [( v0 h c8 X) W( a1 Lview(); %turn it to the side that we see China in center $ c& u6 l1 D3 c( B( ~/ vaxis off; 1 x2 l5 k; j. V5 T1 n) xmeshm(topo,topolegend,size(topo),ptopo); %cast a mesh grid to axis ' k2 R7 ?4 @( R$ s6 f5 Ndemcmap(topo) %show it with color; U* ^' }7 J3 D- J shading interp, A( ~) i- | r/ X" {9 w lightm(23.5,71,'Color','y') %a remote light& X0 Q0 [, }2 G9 B6 i' j. X; L material([.5 .7 1.5]); lighting phong %add material % k( w' a+ T. }7 o) t; d9 ocamzoom(2); %zoom) i; i1 \9 E5 f* t6 N5 ?. ^ 5 p! c% k9 [+ @- w7 z8 @+ w 这里重要的是几个map工具箱中的投影函数,源程序中作了简要的说明,要想真正理解它们请认真阅读帮助文件。

! l( y/ S4 ~5 V5 o# Z) q. a

! z# X8 s* z( U l, ^
既然是地球仪就应该让它转起来,下面再简单的生成一个movie。

- H3 q: }# Z9 [2 o. w
先用camzoom把地球调整到在figure中占一个合适的大小,然后把整个figure缩小到较小的尺寸(画面越大就需要越多的内存)。

* @6 a; |$ Q) I" v( H+ N
for i=1:20; camorbit(360/20,0); M(:,i)=getframe(gcf); end;

! G3 G) S+ w/ ~2 D
其中camorbit是让视角绕球心旋转,getframe是采集画面的函数。

8 P) l" `2 Y# q( y% P/ L, V8 h( z+ l
接着用movie(M)就可以观看旋转的地球了!当然你还可以把这些画面输出到标准的图形文件中,用其他的图像工具把它们转换成动画gif或avi文件。

舞情_Dong 发表于 2013-1-19 09:46

有系统的教程资料么?
页: [1]
查看完整版本: 数字地球-Matlab的map工具箱的应用