爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: MeteoInfo

MeteoInfo脚本示例:GRIB to ARL

[复制链接]

新浪微博达人勋

 楼主| 发表于 2015-1-13 15:08:55 | 显示全部楼层
llg2002 发表于 2015-1-13 15:06
配上ctl,用aDataInfo = GrADSDataInfo(),aDataInfo.ReadDataInfo(infile)应该能读取数据

嗯,可以不用GRADSDataInfo类,如下:
mydata = MeteoDataInfo()
mydata.openGrADSData(infile)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-1-15 09:55:34 | 显示全部楼层
llg2002 发表于 2015-1-13 15:06
配上ctl,用aDataInfo = GrADSDataInfo(),aDataInfo.ReadDataInfo(infile)应该能读取数据

收到了你的Email,解决方案如下:
1、你的数据是GRIB1格式,不需要配ctl和idx文件,MeteoInfo可以直接读GRIB1和GRIB2格式数据。
2、请下载最新的MeteoInfo Java 1.1.9R3版本。
3、可以用MeteoInfo软件打开你的数据,看到所有的变量名和相关说明。示例脚本程序:
  1. #--------------------------------------------------------        
  2. # Author: Yaqiang Wang                                          
  3. # Date: 2014-10-24                                               
  4. # Purpose: Convert GRIB data to ARL data  
  5. # Note: Sample                                                   
  6. #-----------------------------------------------------------
  7. from org.meteoinfo.data.meteodata import MeteoDataInfo
  8. from org.meteoinfo.data.meteodata.arl import ARLDataInfo
  9. from org.meteoinfo.data.meteodata.arl import DataLabel
  10. import os

  11. #---- Set directories
  12. dataDir = "D:/Temp/test/data"

  13. #---- Set output data file
  14. outFile = os.path.join(dataDir, 'fnl.arl')

  15. #---- Read a GRIB data file
  16. mydata = MeteoDataInfo()
  17. infile = os.path.join(dataDir, 'fnl_20110101_00_00_c')
  18. print infile
  19. mydata.openNetCDFData(infile)
  20. print 'GRIB file has been opened...'

  21. #---- Set output ARL data info
  22. arlDI = ARLDataInfo()

  23. #---- Set variable and level list
  24. gvars = ['Pressure_surface','Temperature_height_above_ground',\
  25.     'u-component_of_wind_height_above_ground','v-component_of_wind_height_above_ground',\
  26.     'Geopotential_height_isobaric','Temperature_isobaric',\
  27.     'u-component_of_wind_isobaric','v-component_of_wind_isobaric','Vertical_velocity_pressure_isobaric',\
  28.     'Relative_humidity_isobaric']
  29. avars = ['PRSS','T02M','U10M','V10M','HGTS','TEMP','UWND','VWND','WWND','RELH']
  30. levels = [0,200,300,400,500,600,700,800,\
  31.     850,900,925,950,975,1000]
  32. for l in levels:
  33.     arlDI.levels.add(l)
  34.     if l == 0:
  35.         arlDI.LevelVarList.add(['PRSS','T02M','U10M','V10M'])
  36.     else:
  37.         arlDI.LevelVarList.add(['HGTS','TEMP','UWND','VWND','WWND','RELH'])

  38. #---- Write ARL data file
  39. dataInfo = mydata.getDataInfo()
  40. arlDI.createDataFile(outFile)
  41. arlDI.X = dataInfo.getXDimension().getValues()
  42. arlDI.Y = dataInfo.getYDimension().getValues()
  43. variables = dataInfo.getVariables()
  44. tNum = dataInfo.getTimeNum()
  45. for t in range(0, tNum):
  46.     mydata.setTimeIndex(t)
  47.     atime = dataInfo.getTimes().get(t)
  48.     aDH = arlDI.getDataHead(mydata.getProjectionInfo(), 'FNL1', 2)
  49.     arlDI.writeIndexRecord(atime, aDH)
  50.     lidx = 0
  51.     for l in arlDI.levels:
  52.         print l
  53.         for v in arlDI.LevelVarList[lidx]:
  54.             vName = gvars[avars.index(v)]
  55.             print vName
  56.             if lidx == 0:
  57.                 mydata.setLevelIndex(lidx)
  58.             else:
  59.                 variable = dataInfo.getVariable(vName)
  60.                 nlidx = variable.getZDimension().getDimValue().indexOf(l*1.0)
  61.                 mydata.setLevelIndex(nlidx)
  62.             gData = mydata.getGridData(vName)
  63.             if v == 'PRSS' or v == 'WWND':
  64.                 gData = gData.div(100)      
  65.             aDL = DataLabel(atime)
  66.             aDL.setLevel(lidx)
  67.             aDL.setVarName(v)
  68.             aDL.setGrid(99)
  69.             aDL.setForecast(0)
  70.             arlDI.writeGridData(aDL, gData)
  71.         lidx += 1

  72. arlDI.closeDataFile()

  73. print 'Finished!'


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

新浪微博达人勋

发表于 2015-1-15 11:08:59 | 显示全部楼层
谢谢王老师,gvars的命名方式和ctl的不一致,要用MeteoInfo软件查看变量名
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-3-31 12:43:27 | 显示全部楼层
你好,王老师,我的任务是在把GRADS数据转为ARL数据,但是在运行程序过程中(MeteoInfo Java版),出现下面提示,不知是哪里出了问题。烦请王老师指点。
Traceback (most recent call last):
  File "<iostream>", line 71, in <module>
        at org.meteoinfo.data.meteodata.arl.ARLDataInfo.packARLGridData(ARLDataInfo.java:1505)
        at org.meteoinfo.data.meteodata.arl.ARLDataInfo.writeGridData(ARLDataInfo.java:1457)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)

  1. #--------------------------------------------------------        
  2. # Author: Yaqiang Wang                                          
  3. # Date: 2014-10-24                                               
  4. # Purpose: Convert GRAD data to ARL data  
  5. # Note: Sample                                                   
  6. #-----------------------------------------------------------
  7. from org.meteoinfo.data.meteodata import MeteoDataInfo
  8. from org.meteoinfo.data.meteodata.arl import ARLDataInfo
  9. from org.meteoinfo.data.meteodata.arl import DataLabel
  10. import os

  11. #---- Set directories
  12. dataDir = "D:/Temp"

  13. #---- Set output data file
  14. outFile = os.path.join(dataDir, 'arl/test.arl')

  15. #---- Read a GRADS data file
  16. mydata = MeteoDataInfo()
  17. infile = os.path.join(dataDir, 'grads/gzmm15021412.ctl')
  18. print infile
  19. mydata.openGrADSData(infile)
  20. print 'GRADS file has been opened...'

  21. #---- Set output ARL data info
  22. arlDI = ARLDataInfo()

  23. #---- Set variable and level list
  24. gvars = ['u','v','t','h','Qv','t2m','q2m','u10m','v10m','psl','rain']
  25. avars = ['UWND','VWND','TEMP','HGTS','RELH','T02M','RH2M','U10M','V10M','MSLP','TPP1']
  26. levels = [0,10,20,30,50,70,100,150,200,250,300,400,500,600,700,850,925,1000]
  27. for l in levels:
  28.   arlDI.levels.add(l)
  29.   if l == 0:
  30.     arlDI.LevelVarList.add(['T02M','RH2M','U10M','V10M','MSLP','TPP1'])
  31.   else:
  32.     arlDI.LevelVarList.add(['UWND','VWND','TEMP','HGTS','RELH'])

  33. #---- Write ARL data file
  34. dataInfo = mydata.getDataInfo()
  35. arlDI.createDataFile(outFile)
  36. arlDI.X = dataInfo.getXDimension().getValues()
  37. arlDI.Y = dataInfo.getYDimension().getValues()
  38. variables = dataInfo.getVariables()
  39. tNum = dataInfo.getTimeNum()
  40. for t in range(0, tNum):
  41.   mydata.setTimeIndex(t)
  42.   atime = dataInfo.getTimes().get(t)
  43.   aDH = arlDI.getDataHead(mydata.getProjectionInfo(), 'GRPS', 2)
  44.   arlDI.writeIndexRecord(atime, aDH)
  45.   lidx = 0
  46.   for l in arlDI.levels:
  47.     print l
  48.     for v in arlDI.LevelVarList[lidx]:
  49.       vName = gvars[avars.index(v)]
  50.       print vName
  51.       if lidx == 0:
  52.         mydata.setLevelIndex(lidx)
  53.       else:
  54.         variable = dataInfo.getVariable(vName)
  55.         nlidx = variable.getZDimension().getDimValue().indexOf(l*100.0)
  56.         mydata.setLevelIndex(nlidx)
  57.       gData = mydata.getGridData(vName)
  58.       if v == 'TPP1':
  59.         gData = gData.div(1000)      
  60.       aDL = DataLabel(atime)
  61.       aDL.setLevel(lidx)
  62.       aDL.setVarName(v)
  63.       aDL.setGrid(99)
  64.       aDL.setForecast(0)
  65.       arlDI.writeGridData(aDL, gData)
  66.     lidx += 1

  67. arlDI.closeDataFile()

  68. print 'Finished!'
复制代码
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-3-31 12:46:48 | 显示全部楼层
你好,王老师,我的任务是在把GRADS数据转为ARL数据,但是在运行程序过程中(MeteoInfo Java版),出现下面提示,不知是哪里出了问题。烦请王老师指点。
严重: null
java.io.IOException: Negative seek offset
at java.io.RandomAccessFile.seek(Unknown Source)
at org.meteoinfo.data.meteodata.grads.GrADSDataInfo.readGrADSData_Grid_LonLat(GrADSDataInfo.java:1179)
at org.meteoinfo.data.meteodata.grads.GrADSDataInfo.getGridData_LonLat(GrADSDataInfo.java:1135)
at org.meteoinfo.data.meteodata.MeteoDataInfo.getGridData(MeteoDataInfo.java:691)
at org.meteoinfo.data.meteodata.MeteoDataInfo.getGridData(MeteoDataInfo.java:671)
at sun.reflect.GeneratedMethodAccessor18.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:204)
at org.python.core.PyObject.__call__(PyObject.java:420)
at org.python.core.PyObject.__call__(PyObject.java:424)
at org.python.core.PyMethod.__call__(PyMethod.java:136)
at org.python.pycode._pyx7.f$0(<iostream>:76)
at org.python.pycode._pyx7.call_function(<iostream>)
at org.python.core.PyTableCode.call(PyTableCode.java:165)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1302)
at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:235)
at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:230)
at org.meteoinfo.desktop.forms.FrmTextEditor$22.doInBackground(FrmTextEditor.java:668)
at org.meteoinfo.desktop.forms.FrmTextEditor$22.doInBackground(FrmTextEditor.java:607)
at javax.swing.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at javax.swing.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Traceback (most recent call last):
  File "<iostream>", line 71, in <module>
at org.meteoinfo.data.meteodata.arl.ARLDataInfo.packARLGridData(ARLDataInfo.java:1505)
at org.meteoinfo.data.meteodata.arl.ARLDataInfo.writeGridData(ARLDataInfo.java:1457)
at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
java.lang.NullPointerException: java.lang.NullPointerException

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

新浪微博达人勋

发表于 2015-3-31 12:50:32 | 显示全部楼层
我的ctl文件如附件。

gzmm15021412.ctl

701 Bytes, 下载次数: 1, 下载积分: 金钱 -5

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

新浪微博达人勋

 楼主| 发表于 2015-4-7 13:01:20 | 显示全部楼层
sandytiny 发表于 2015-3-31 12:50
我的ctl文件如附件。

如果想让我帮你测试,需要提供ctl和数据文件以及Jython脚本。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-9 11:49:11 | 显示全部楼层
收藏{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-6-18 14:37:27 | 显示全部楼层
sandytiny 发表于 2015-3-31 12:46
你好,王老师,我的任务是在把GRADS数据转为ARL数据,但是在运行程序过程中(MeteoInfo Java版),出现下面 ...

大神,您的问题解决了吗?能指导一下吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-6-24 22:42:38 | 显示全部楼层
      王老师,我在进行grads转arl时,遇到输出结果hysplt不认识的问题。一开始提示需要地面气压和高度变量,我把输出的avars 修改为它要的名字,hyspit不报这个错误了,但是还是不能使用,想请教一下您,知道问题出在哪吗?hsplit需要的arl格式资料对 要素名 有要求吗?
    另外,我在进行nc转arl时,遇到nc的高度是地形跟随坐标,该作何处理那?输出的要素(hyslit需要使用的)是如何选取的哪?   给王老师添麻烦了,的确这两个问题困扰很久。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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