- 积分
- 9442
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-11-18
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 冬日的阳光 于 2014-4-24 21:48 编辑
NOAA全球sst海温资料.nc格式转化.grd或.txt步骤 By@冬日的阳光
以下内容主要是为基础比较薄弱的本科毕业生写的,内容也比较混乱,本人刚刚加入论坛属于菜鸟级别,希望各位大神包涵,谅解。
主要内容介绍:
近来很多师弟在做本科毕业论文的时候经常问到如何将nc文件数据读取出来,然后转换成十进制文件。这个问题其实不太难,但是需要大家有基本的grads语法知识和fortran语法知识,然后修改下面的程序就行了,基本原理是一样的,也许有些人处理的是海温资料,有些人处理的高度场,还有些人处理的是风场资料,这么多我就不一一论述了,下面我就以全球海温数据从.nc转化为.grd二进制格式为例,然后将grd二进制格式文件通过fortran程序转换成为十进制的txt文件,如下在数据转换过程中遇到作图不对称不符合常理或者数据缺测值不对的问题可以参考另一篇博文《NOAA全球sst资料.nc格式转化.grd或.txt问题解决方法》http://bbs.06climate.com/forum.php?mod=viewthread&tid=21430&extra=
第一步:.nc格式转化为.grd格式
1、首先是下载到自己所需要的资料:我下载的是月海温距平:sst.mon.anom.nc
新建一个gs文件,然后run一下就行了,详细命令如下:
gs程序:
*本程序提取(1951年-2012年)1月nc格式的全球海温距平值
'reinit'
'sdfopen C:\eof_sst_lijianping\data\sst.mon.anom.nc'
'set gxout fwrite'
'set fwrite C:\eof_sst_lijianping\data\sst1.grd'
tt=1151
t=1
while(t<=62)
'set t 'tt+2
*选取冬季1月份的海温距平值
'set x 1 72'
'set y 1 36'
*这个必须设定,x方向的格点数;
*这个必须设定,y方向的格点数;
'd sst'
t=t+1
tt=tt+12
endwhile
'disable fwrite'
;
该命令可以根据个人需求修改,有些人只需要某一个月的数据,那就可以不用while循环过程了,有语法不懂的要自己加班修炼了,通过读懂别人的程序,然后再做修改。如果完成了以上步骤,run一下gs文件成功,也许你就会生成了grd格式文件:
第二步:如果生成了grd二进制文件,需要数据进一步处理,也许需要用到fortran程序了,下面命令时将数据转化成为十进制.txt文件
fortran程序如下:
! 在学习过程中我们必须引导自己养成良好的编程习惯,注意注释,注意格式!
!!!!!!!!!!!这是一个分别读取每一个格点数值,然后求平均的程序!!!!!!!
! m 纬向个点数72个与经向格点数36个,即:某一个时次全球共72*36=2592个格点;
! n 代表样本大小,也就是样本总年份;
!--------------------------------------------------------------------
program main
integer i,j,m,n
parameter(m=2592,n=62)
real sst1(m,n),sst(m,n)
!--------------------------------------------------------------------
!读取1951—2012年冬季(12—2月)全球海表温度各月的距平值
open(2,file='sst1.grd',form='binary')
read(2) ((sst1(i,j),i=1,m),j=1,n)
close(2)
!--------------------------------------------------------------------
!--------------------------------------------------------------------
!do循环求1951—2012年冬季距平值,外循环是样本数,内循环是格点数;
!然后将所求的冬季距平值输出到一个二进制格式和txt格式;
!总体而言数据是按照自南向北,自东向西的排列,同时按年份
!注意:对于二进制格式文件,write(14)命令不能加*要求输出格式,即:write(14,*)会出现错误!
!注意:对于文本格式的文件,此处要求输出格式,即:write(15,*)要加'*'。
!--------------------------------------------------------------------
open(4,file='sst.grd',form='binary')
open(5,file='sst.txt')
do j=1,n
do i=1,m
sst(i,j)=sst1(i,j)
write(*,*) 1950+j,"年冬季(12-2月)第",i,"个格点的海表温度值:",sst(i,j)
write(4) sst(i,j)
write(5,*) sst(i,j)
enddo
enddo
close(4)
close(5)
!--------------------------------------------------------------------
print*,'Hello,you do a good job !'
end program
在程序运行过程中最后将grd文件和f90程序放在同一目录下,以防处理路径错误;
如果能够将以上程序代码调试修改并且运行成功,并且生成如下sst.txt文件;
恭喜你,说明你的数据转化处理过程圆满完成了。
|
评分
-
查看全部评分
|