爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8640|回复: 18

读取NSIDC binary数据并绘图

[复制链接]

新浪微博达人勋

发表于 2014-4-23 16:45:08 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
NSIDC网站上的数据格式主要有HDF5和binary两种,这个帖子讲讲如果用MeteoInfo Java版(需要下载最新版本:http://www.meteothinker.com/)来处理binary格式数据,这里以Sea Ice Concentrations数据为例(https://nsidc.org/data/docs/daac/nsidc0051_gsfc_seaice.gd.html),由于是海冰数据,通常关注高纬度地区,这种数据的投影是Ploar Stereographic projection,比较特殊的是此数据的投影和70度相切(通常是和90度相切),投影和格点参数详细的设置参见此网页:http://nsidc.org/data/polar_stereo/ps_grids.html

示例数据文件:nt_197810_n07_v01_n.bin

处理步骤:
1、修改文件名。讲文件后缀改为bil,修改后文件名:nt_197810_n07_v01_n.bil。专门写程序支持这种binary格式没有必要,可以利用已经支持的bil二进制格式,bil格式的详细信息见此网页:http://resources.arcgis.com/en/help/main/10.1/index.html#/BIL_BIP_and_BSQ_raster_files/009t00000010000000/

2、新建、编辑头文件。bil格式数据需要有一个头文件来描述格点和数据的具体信息,头文件为文本文件,文件名和bil文件名一致,后缀为.hdr,完整的头文件名为:nt_197810_n07_v01_n.hdr。用文本编辑器编辑头文件的内容如下:
nrows 448
ncols 304
nbands 1
nbits 8
layout bil
byteorder I
skipbytes 300
ulxmap -3737500
ulymap 5837500
xdim 25000
ydim 25000

3、打开MeteoInfo Java软件并设置投影。点击软件菜单“显示 -> 投影”,在弹出的投影设置对话框中设置投影参数如下:
Image00570.png


投影后的图形如下:
Image00571.png



4、打开数据并绘图。点击工具栏“添加图层”工具(第一个工具按钮),选中数据文件即可。数据图形如下:
Image00569.png

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-23 22:14:31 | 显示全部楼层
复杂呀,怎么能快快学会呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-24 16:48:46 | 显示全部楼层
更新了MeteoInfo Java软件以便正确处理NSIDC的netCDF格式数据,需要重新下载MeteoInfo Java软件(http://www.meteothinker.com/)。

Image00572.png

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-25 09:11:05 | 显示全部楼层
MeteoInfo 发表于 2014-4-24 16:48
更新了MeteoInfo Java软件以便正确处理NSIDC的netCDF格式数据,需要重新下载MeteoInfo Java软件(http://ww ...

不明觉厉!~这种网格的nc数据在设置投影参数和格点参数的时候和置顶帖子一样么?因为以前没用过MeteoInfo,初来乍到,麻烦您给出具体指导,不知可否?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-25 09:18:25 | 显示全部楼层
还有个小问题是:您是如何查看bin格式的数据的呢?尝试过很多方法,但出来的都是乱码,不知道这种格式的文件里面具体含哪些变量和参数,所以也不知道怎么处理其他类似文件。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-25 10:17:11 | 显示全部楼层
婉言默语 发表于 2014-4-25 09:18
还有个小问题是:您是如何查看bin格式的数据的呢?尝试过很多方法,但出来的都是乱码,不知道这种格式的文 ...

这个牵扯到数据格式的问题,简单的说可以把数据格式分为文本数据和二进制数据,文本数据可以用记事本等文本处理软件查看里面的具体内容,二进制数据用文本处理软件打开只能看到乱码。想要正确的读取某个二进制文件的内容必须知道该文件的详细格式说明,要具体到每一个bit存放的是什么内容。对二进制格式加上固定的约定读写方式就形成了千变万化的各种数据格式(比如这里涉及到的bil, netCDF等)。bil数据格式的说明我已经给出了网页链接地址。和bil数据不同,netCDF是一种自描述的二进制数据格式,无需额外的头文件,网上和论坛有很多关于netCDF格式的资料可以参考。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-6-6 20:55:44 | 显示全部楼层
非常感谢版主提供的详细的过程,我用NSIDC上的NC格式和bin格式的数据都试过了,很棒。但是我也有一些问题想请教一下版主。
我需要用这些海冰资料做一些进一步的计算处理,需要读入到fortran程序里面,假设以NSIDC上的NC格式数据为例,我可以通过MeteoInfo Java软件打开nc数据,并成功画图,通过点击数据上的显示数据可以显示出数据的信息,每个点上值为多少,点击保存按钮可以保存为.dat的数据,但是这个dat数据貌似用平时的读入语法读到fortran里面的数据是错误的。楼主可否指导一下如何将数据读入到fortran里面,或者直接读入bin格式的文件也可。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-6-6 21:26:41 | 显示全部楼层
ouc129 发表于 2015-6-6 20:55
非常感谢版主提供的详细的过程,我用NSIDC上的NC格式和bin格式的数据都试过了,很棒。但是我也有一些问题想 ...

保存的是surfer ASCII grid data数据格式,详见:http://www.gammadesign.com/GSWin ... on_output_files.htm

不知道你进行怎样的计算,如果不是很特殊,也许不需要用Fortran。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-6-6 22:02:21 | 显示全部楼层
MeteoInfo 发表于 2015-6-6 21:26
保存的是surfer ASCII grid data数据格式,详见:http://www.gammadesign.com/GSWinHelp/interpolation_o ...

感谢楼主的及时回复,其实我的想法很简单,就是想把bin或者转化过后的surfer ASCII grid data数据,按照304*448的格点概念读入fortran(就像ncep再分析资料.nc的数据,通过grads转换为dat数据后,直接读入fortran一样), 然后进行诸如回归,求空间趋势,求区域气候态的时间序列等分析,因为我需要分析年代际变化,还需要根据其他模态来合成海冰季节内尺度甚至daily的变化,因此,如果不读入fortran,恐怕处理起来就很局限了。
我目前手头有1979-2014年daily的bin格式和nc格式的数据。(nc格式的好像是v2版本的,也是daily的)。但是问题就是在它的投影方式是Ploar Stereographic projection,使得我用平常处理ncep数据的那套方法不起作用。通常下载ncep或者ERA的nc格式数据后,通过grads转化为dat,可以直接读入fortran。
不知楼主是否有方向可以指引一下。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-6-6 22:10:00 | 显示全部楼层
MeteoInfo 发表于 2015-6-6 21:26
保存的是surfer ASCII grid data数据格式,详见:http://www.gammadesign.com/GSWinHelp/interpolation_o ...

补充:我试着用grads按照以前的老方法,把NSIDC的nc格式的海冰数据,直接用grads转化为dat数据,结果数据是不行的。转化脚本如下:
'sdfopen D:\Data\1.nc'
'set fwrite D:\Data\1.dat'
'set gxout fwrite'
'set x 1 304'
'set y 1 448'
'd seaice_conc_mon'
'disable fwrite'
'reinit'
我的想法就是想把海冰的Nc或者bin数据能够转化为简单的304*448格点数据,数组就是一个304*448,然后fortran里面我可以自己识别区域经纬度等。然后进行各种计算。

或者简单点做,可否告知MeteoInfo Java保存出的surfer ASCII grid data数据如何读入fortran,我试着按照常规方式读入,没报错,但是数组的数据是错误的。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表