- 积分
- 55946
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2015-7-1 22:22:51
|
显示全部楼层
本帖最后由 MeteoInfo 于 2015-7-1 22:24 编辑
首先你的ctl文件中需要加上options yrev,因为你的数据是Y轴反向的,从PRSS变量的图形很容易看出来。
修改后的脚本程序如下:
- #--------------------------------------------------------
- # Author: Yaqiang Wang
- # Date: 2014-10-24
- # Purpose: Convert Grads data to ARL data
- # Note: Sample
- #-----------------------------------------------------------
- from org.meteoinfo.data.meteodata import MeteoDataInfo
- from org.meteoinfo.data.meteodata.arl import ARLDataInfo
- from org.meteoinfo.data.meteodata.arl import DataLabel
- import os
- #---- Set directories
- dataDir = "D:/Temp/test"
- #---- Set output data file
- outFile = os.path.join(dataDir, 'test.arl')
- #---- Read a GRADS data file
- mydata = MeteoDataInfo()
- infile = os.path.join(dataDir, 'griball.ctl')
- print infile
- mydata.openGrADSData(infile)
- print 'GRADS file has been opened...'
- #---- Set output ARL data info
- arlDI = ARLDataInfo()
- #---- Set variable and level list
- gvars = ['PRSS','T02M','U10M','V10M','HGTS','TEMP','UWND','VWND','WWND','RELH']
- avars = ['PRSS','T02M','U10M','V10M','HGTS','TEMP','UWND','VWND','WWND','RELH']
- levels = [0,1000,925,850,700,600,500,400,300,250,200,150,100,70,50,30,20,10]
- for l in levels:
- arlDI.levels.add(l)
- if l == 0:
- arlDI.LevelVarList.add(['PRSS','T02M','U10M','V10M'])
- elif l >= 300:
- arlDI.LevelVarList.add(['HGTS','TEMP','UWND','VWND','WWND','RELH'])
- else:
- arlDI.LevelVarList.add(['HGTS','TEMP','UWND','VWND','WWND'])
- #else:
- # arlDI.LevelVarList.add(['HGTS','TEMP','UWND','VWND','WWND','RELH'])
- #---- Write ARL data file
- dataInfo = mydata.getDataInfo()
- arlDI.createDataFile(outFile)
- arlDI.X = dataInfo.getXDimension().getValues()
- arlDI.Y = dataInfo.getYDimension().getValues()
- variables = dataInfo.getVariables()
- tNum = dataInfo.getTimeNum()
- for t in range(0, tNum):
- mydata.setTimeIndex(t)
- atime = dataInfo.getTimes().get(t)
- aDH = arlDI.getDataHead(mydata.getProjectionInfo(), 'NCEP', 2)
- arlDI.writeIndexRecord(atime, aDH)
- lidx = 0
- for l in arlDI.levels:
- print l
- for v in arlDI.LevelVarList[lidx]:
- vName = gvars[avars.index(v)]
- print vName
- if lidx == 0:
- mydata.setLevelIndex(lidx)
- else:
- variable = dataInfo.getVariable(vName)
- nlidx = variable.getZDimension().getDimValue().indexOf(l*1.0)
- if nlidx < 0:
- print 'No level: ' + str(l)
- continue
- mydata.setLevelIndex(nlidx)
- gData = mydata.getGridData(vName)
- if v == 'PRSS' or v == 'WWND':
- gData = gData.div(100)
- aDL = DataLabel(atime)
- aDL.setLevel(lidx)
- aDL.setVarName(v)
- aDL.setGrid(99)
- aDL.setForecast(0)
- arlDI.writeGridData(aDL, gData)
- lidx += 1
- arlDI.closeDataFile()
- print 'Finished!'
|
|