爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10482|回复: 21

netCDF数据转为GrADS数据

[复制链接]

新浪微博达人勋

发表于 2012-5-29 15:53:29 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2014-4-6 17:57 编辑

写了一个将netCDF数据转为GrADS数据的脚本程序,需要MeteoInfo最新文件的支持(见置顶帖子)。GrADS的二进制格式数据比较简单,容易用Fortran等程序读取,而netCDF数据格式比较复杂,用程序读取有些难度。这个脚本程序需要定义一些GrADSDataInfo的参数,然后就按照这些参数自动生成control文件。
  1. #--------------------------------------------------------        
  2. # Author: Yaqiang Wang                                          
  3. # Date: 2012-5-28                                                
  4. # Purpose: Convert NetCDF data to GrADS binary data  
  5. # Note: Sample                                                   
  6. #-----------------------------------------------------------     
  7. import clr
  8. from System import *
  9. clr.AddReference("MeteoInfoC.dll")
  10. from MeteoInfoC import *
  11. from MeteoInfoC.Data import *
  12. from MeteoInfoC.Data.MeteoData import *

  13. #---- Set data folders
  14. dataDir = 'D:\\Temp\\nc\\'

  15. #---- Set input/output data files
  16. inFile = dataDir + 'HadISST_SST_update.nc'
  17. outCtlFile = dataDir + 'HadISST_SST_update.ctl'
  18. outDataFile = dataDir + 'HadISST_SST_update.dat'

  19. #---- Define data info
  20. ncDataInfo = MeteoDataInfo()
  21. gDataInfo = GrADSDataInfo()

  22. #---- Open NetCDF data file
  23. ncDataInfo.OpenNCData(inFile)
  24. xArray = ncDataInfo.GetX()
  25. yArray = ncDataInfo.GetY()
  26. tNum = ncDataInfo.GetTimeNumber()
  27. sTime = ncDataInfo.GetTime(0)

  28. #---- Set output GrADS data info
  29. gDataInfo.FileName = outCtlFile
  30. gDataInfo.DSET = outDataFile
  31. gDataInfo.TITLE = 'HadISST data'
  32. gDataInfo.DTYPE = 'GRIDDED'
  33. gDataInfo.XDEF.Type = 'LINEAR'
  34. gDataInfo.XDEF.XNum = xArray.Length
  35. gDataInfo.XDEF.XMin = xArray[0]
  36. gDataInfo.XDEF.XDelt = xArray[1] - xArray[0]
  37. gDataInfo.YDEF.Type = 'LINEAR'
  38. gDataInfo.YDEF.YNum = yArray.Length
  39. gDataInfo.YDEF.YMin = yArray[0]
  40. gDataInfo.YDEF.YDelt = yArray[1] - yArray[0]
  41. gDataInfo.ZDEF.Type = 'LINEAR'
  42. gDataInfo.ZDEF.ZNum = 1
  43. gDataInfo.ZDEF.SLevel = 1
  44. gDataInfo.ZDEF.ZDelt = 1
  45. gDataInfo.TDEF.Type = 'LINEAR'
  46. gDataInfo.TDEF.TNum = tNum
  47. gDataInfo.TDEF.STime = sTime
  48. gDataInfo.TDEF.TDelt = '1mo'
  49. aVar = Variable()
  50. aVar.Name = 'sst'
  51. aVar.Units = '99'
  52. aVar.Description = 'Sea Surface Temporature'
  53. gDataInfo.VARDEF.AddVar(aVar)
  54. gDataInfo.MissingValue = ncDataInfo.MissingValue

  55. #---- Write GrADS data file
  56. gDataInfo.CreateDataFile(outDataFile)
  57. for t in range(0, tNum):
  58.         ncDataInfo.TimeIndex = t
  59.         print t
  60.         sst = ncDataInfo.GetGridData('sst')
  61.         if t == 0:
  62.                 gDataInfo.MissingValue = sst.MissingValue
  63.                 print gDataInfo.MissingValue
  64.         gDataInfo.WriteGridData(sst)

  65. gDataInfo.CloseDataFile()

  66. #---- Write GrADS control file
  67. gDataInfo.WriteGrADSCTLFile()

  68. print 'Finished...'



netCDF数据sst等值线图:
Image00154.png

转为GrADS格点数据sst等值线图:
Image00155.png



评分

参与人数 1金钱 +18 贡献 +2 体力 +20 收起 理由
言深深 + 18 + 2 + 20 v5

查看全部评分

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

新浪微博达人勋

发表于 2012-5-29 16:46:16 | 显示全部楼层
来顶王老师咯....身边用meteoinfo的人越来越多了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-29 20:48:26 | 显示全部楼层
好东西,来学习下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-6-11 14:36:13 | 显示全部楼层
继续学习
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-1-24 12:33:34 | 显示全部楼层
求助: 利用ArcGis  处理netcdf 出问题了。怎么处理啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-1-24 15:09:38 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-3 21:53:47 | 显示全部楼层
请问王老师,MeteoInfo怎么打开grd文件啊?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-3 22:08:36 | 显示全部楼层
不是用MeteoInfo直接打开grd文件对应的ctl文件吗?打开什么都不显示,但是“数据信息”和“显示数据”都正常
QQ截图20130303220353.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-3-4 08:35:33 | 显示全部楼层
HZK 发表于 2013-3-3 22:08
不是用MeteoInfo直接打开grd文件对应的ctl文件吗?打开什么都不显示,但是“数据信息”和“显示数据”都正常 ...

也许是因为你的数据范围太小了,你选择生成的图层名,在工具栏中点击“缩放至图层范围”按钮试试。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-4 11:29:38 | 显示全部楼层
MeteoInfo 发表于 2013-3-4 08:35
也许是因为你的数据范围太小了,你选择生成的图层名,在工具栏中点击“缩放至图层范围”按钮试试。

出图了,不过没在设定的经纬度上,都跑到地图外了。。这个grd是grads生成的,ctl自己写的
dset e:\grads\surft.grd
undef -9.99e33
xdef 6 linear 27.5 2.5
ydef 6 linear 110 2.5
tdef 11689 linear jan1981 1dy
zdef 1 levels 0
vars 1
air 1 0 t surfaceair
endvars


应该没错啊
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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