- 积分
- 55946
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2015-1-15 09:55:34
|
显示全部楼层
收到了你的Email,解决方案如下:
1、你的数据是GRIB1格式,不需要配ctl和idx文件,MeteoInfo可以直接读GRIB1和GRIB2格式数据。
2、请下载最新的MeteoInfo Java 1.1.9R3版本。
3、可以用MeteoInfo软件打开你的数据,看到所有的变量名和相关说明。示例脚本程序:
- #--------------------------------------------------------
- # Author: Yaqiang Wang
- # Date: 2014-10-24
- # Purpose: Convert GRIB 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/data"
- #---- Set output data file
- outFile = os.path.join(dataDir, 'fnl.arl')
- #---- Read a GRIB data file
- mydata = MeteoDataInfo()
- infile = os.path.join(dataDir, 'fnl_20110101_00_00_c')
- print infile
- mydata.openNetCDFData(infile)
- print 'GRIB file has been opened...'
- #---- Set output ARL data info
- arlDI = ARLDataInfo()
- #---- Set variable and level list
- gvars = ['Pressure_surface','Temperature_height_above_ground',\
- 'u-component_of_wind_height_above_ground','v-component_of_wind_height_above_ground',\
- 'Geopotential_height_isobaric','Temperature_isobaric',\
- 'u-component_of_wind_isobaric','v-component_of_wind_isobaric','Vertical_velocity_pressure_isobaric',\
- 'Relative_humidity_isobaric']
- avars = ['PRSS','T02M','U10M','V10M','HGTS','TEMP','UWND','VWND','WWND','RELH']
- levels = [0,200,300,400,500,600,700,800,\
- 850,900,925,950,975,1000]
- for l in levels:
- arlDI.levels.add(l)
- if l == 0:
- arlDI.LevelVarList.add(['PRSS','T02M','U10M','V10M'])
- 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(), 'FNL1', 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)
- 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!'
|
|