数字地球-Matlab的map工具箱的应用
在美国副总统戈尔提出数字地球概念后,中国也随之掀起了一场数字地球的热潮。前一段时间听了中科院地理所的刘纪远所长作的报告,他们建立了一个一公里像元的各种地理属性的综合数据库,并且以此为依托给国务院作了几份图文并茂、有凭有据的论文,讨论了西部大开发及沙暴现象等重要问题。
在matlab中也有一个很出色的工具箱map能够处理各种地图地理信息。下面我介绍一个利用它制作的地球仪。数据来至map工具箱中的topo.mat文件,这里有一个关于地球各点海拔高度的数据的数组topo,大小是180*360,表示的是180个纬线和360个经线的交叉网格。
imagesc(flipud(topo))
可以看出该数据的摆放次序是,在纵向1到180表示从南极到北极,而横向是从格林威治0度经线开始向东。
知道了这些情况后,就可以设计我们的地球仪了。我决定在一个球体上同时用起伏和颜色来表示陆地,而根据我们的一般看法,把海洋的地方设置成光滑的,而只用颜色来表现深浅。另外陆地表面的起伏相对于地球的半径来说实在是太小了,所以为了有很好的视觉效果,做了一些比例的放大。
源程序如下
function []=solidearth()
load topo; %DEM of the earth
ptopo = topo; ptopo(topo<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([180 38]); %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工具箱中的投影函数,源程序中作了简要的说明,要想真正理解它们请认真阅读帮助文件。
既然是地球仪就应该让它转起来,下面再简单的生成一个movie。
先用camzoom把地球调整到在figure中占一个合适的大小,然后把整个figure缩小到较小的尺寸(画面越大就需要越多的内存)。
for i=1:20; camorbit(360/20,0); M(:,i)=getframe(gcf); end;
其中camorbit是让视角绕球心旋转,getframe是采集画面的函数。
接着用movie(M)就可以观看旋转的地球了!当然你还可以把这些画面输出到标准的图形文件中,用其他的图像工具把它们转换成动画gif或avi文件。 |