- 积分
- 35970
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-7-26
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最近用matlab画的水深等值线图,在此分享一下~
水深的数据很少(我找的时候),可能现在有两个:一个是海图(没用过),一个是ETOPO1的数据(ETOPO2和ETOPO5不推荐使用)。下面介绍ETOPO1数据下载及绘图过程,有需要的请往下看。
ETOPO1数据下载链接:http://www.ngdc.noaa.gov/mgg/gdas/gd_designagrid.html?dbase=GRDET2
ETOPO1官方介绍:http://www.ngdc.noaa.gov/mgg/global/global.html
海岸线数据(coastline extractor):http://www.ngdc.noaa.gov/mgg/coast/
M_Map工具箱地址:http://www.eos.ubc.ca/~rich/map.html
1.先介绍海岸线数据:
NOAA提供了全球海岸线数据集,进入网站后,中间是选取经纬度。
在coastline database里选取你想要的数据集,如:它默认的World Vector Shoreline(designed for 1:250,000)。
再下面,在coast format options里面选取数据格式,如用matlab,选取matlab。选取matlab下载的数据为两列数据,一列是经度,一列是纬度数据,这样就可以在matlab里面用plot或m_plot(M_Map toolbox)绘制海岸线了。
你也可以选择GMT,预览你想要的海岸线的图形。
如选取渤海范围的经纬度,预览图像:
2.提取海岸线数据后,提取ETOPO1水深数据:
ETOPO1实际上是全球海拔+水深的数据。海拔的数据是正值,水深是负值。
链接到上面的网址后,grid database选择ETOPO1,选择你的经纬度。之后说一下数据格式。
在grid format里面,提供了三种数据,二进制,ascii码和xyz。我用的是xyz的数据,它是个十进制的。在matlab里,直接importdata就可以载入数据了。第一列是经度,第二列是纬度,第三列是水深。有了数据,如何把水深数据转成一个矩阵绘制等值线图呢?
仔细看经纬度数据是有规律的。纬度固定不变时,经度从低到高排列,所以对于一维的水深数据来说,用reshape函数,转成你想要的二维矩阵。矩阵的列是纬度数,行是经度数,再转置就是最后我们要用的矩阵形式了。但是由于我们要画水深,所以把>=0的数设为NaN,你也可以把水深数据变为正数(乘以-1)。这样有了数据再用contour或contourf画等值线图。
下面是我的m文件:
%绘制渤海水深图,由于近岸水深不准确,水深数据小于等于9m的设为NaN,只画10m,20m,30,等值线图
clear all
load bohai.mat %载入海岸线数据,变量名为data,第一列为经度数据,第二列为纬度数据
load depth.mat %载入已处理过的经度,纬度,水深数据
m_proj('miller','lon',[117 123],'lat',[37 41]);
m_grid('linestyle','none','box','fancy');
hold on
m_plot(data(:,1),data(:,2),'k','linewidth',1.5);
[c h]=m_contour(lon,lat,depth,10:10:30,'k');
clabel(c,h,'rotation',0,'linewidth',1);
title('Water depth of Bohai (meter)');
print -dpng -r300 bohai.png
上面的程序用到了M_Map工具箱,用于投影和画地图等使用。
最后的图像:
PS:NOAA(NGDC)有官方的软件——GEODAS,下载数据后,可直接用这个软件打开,直接出图,而且图形美观。软件下载也在上面链接中,大家可自行查找下载。
下面是用GEODAS画的中国海的海拔和水深图:
PS:希望大家有关海洋科学画图好的经验及时分享~
|
评分
-
查看全部评分
|