爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3383|回复: 9

求教,用meteinfo脚本画水汽通量图遇到的问题,谢谢

[复制链接]

新浪微博达人勋

发表于 2014-4-24 16:24:06 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 123木头兔 于 2014-4-24 16:26 编辑

王老师,您好,我参考这个帖子http://bbs.06climate.com/forum.php?mod=viewthread&tid=1127脚本计算水汽通量时总是有如下问题。脚本我只改了资料和软件路径其他没动。

Traceback (most recent call last):
  File "<string>", line 65, in <module>
ValueError: 索引超出范围。必须为非负值并小于集合大小。
参数名: index
经查第65行是脚本里的倒数第四行(aTime = DataAir.GetTime())。这一行不是太懂,一直画不出来,求教。。改版后代码真心不好贴,和那个帖子里的脚本一样就是改了路径。多谢王老师了

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

新浪微博达人勋

发表于 2014-4-25 15:35:56 | 显示全部楼层
123木头兔 发表于 2014-4-25 15:29
多谢王老师的细心指导。4个NC文件时次 一样。我把tidx改小错误还是一样。如果注释掉那两行,错误变成如下 ...

把最后一句改为:
myApp.Show()
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-4-24 16:44:10 | 显示全部楼层
我会抽空看看的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-24 20:36:15 | 显示全部楼层
MeteoInfo 发表于 2014-4-24 16:44
我会抽空看看的。

多谢王老师
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-24 22:12:06 | 显示全部楼层

应该是tIdx设置得太大,超出了数据时次范围,把tIdx改小一些试试。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-25 11:52:07 | 显示全部楼层
MeteoInfo 发表于 2014-4-24 22:12
应该是tIdx设置得太大,超出了数据时次范围,把tIdx改小一些试试。

王老师,我用的是2.5*2.5每六小时一次的2011年整年NC资料。有1460个数据。tIdx设置的是872也就是8月7日00时的。850hpa  lIdx设置的为2.。我这个设法有问题么
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-25 12:49:28 | 显示全部楼层
123木头兔 发表于 2014-4-25 11:52
王老师,我用的是2.5*2.5每六小时一次的2011年整年NC资料。有1460个数据。tIdx设置的是872也就是8月7日00 ...

应该没问题,你可以试着把tIdx设小看会不会出现同样的问题,来判断是不是tIdx的问题。

还有看一看是不是4个nc文件都是1460个时次。

或者把倒数第3和4行注释掉(代码签名加#号)运行试试:
#---- Plot data
myApp.SetDrawType("shaded")
myApp.Display(qhdivg)
myApp.MoveLayerToTop("country1.shp")
myApp.ZoomLonLatEx(0,360,-90.1,90.1)
#aTime = DataAir.GetTime()
#myApp.SetTitle("Water Vapor Flux Divergence - " + aTime.ToString("yyyy-MM-dd"))
myApp.MapLayout.PaintGraphics()
Application.Run(myApp)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-25 15:24:01 | 显示全部楼层
本帖最后由 123木头兔 于 2014-4-25 15:26 编辑

1 QQ图片20140425151310.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-25 15:29:12 | 显示全部楼层
MeteoInfo 发表于 2014-4-25 12:49
应该没问题,你可以试着把tIdx设小看会不会出现同样的问题,来判断是不是tIdx的问题。

还有看一看是不 ...

多谢王老师的细心指导。4个NC文件时次 一样。我把tidx改小错误还是一样。如果注释掉那两行,错误变成如下
QQ图片20140425151310.jpg
全部代码如下:
#---- Import class libraries
import clr
clr.AddReferenceByPartialName("System.Windows.Forms")
clr.AddReferenceByPartialName("System.Drawing")
from System.Windows.Forms import *
from System.Drawing import *
clr.AddReference("MeteoInfoC.dll")
from MeteoInfoC import *
from MeteoInfoC.Data import *
from MeteoInfoC.Data.MeteoData import *

#---- Define variables
BaseDir = "F:\\meteoInfo\\"
MapDir = BaseDir + "Map\\"
DataDir = "F:\\97111109\\nc\\"

#---- Create MIApp object
myApp = MIApp()
#---- Open layers
myApp.OpenLayer(MapDir + "country1.shp")
myApp.SetLegendBreak("country1.shp",0,Color.Yellow,Color.Black,1,True,False,True)
#---- Open data
DataAir = MeteoDataInfo()
DataUwnd = MeteoDataInfo()
DataVwnd = MeteoDataInfo()
DataRhum = MeteoDataInfo()
DataAir.OpenNCData(DataDir + "air.2011.nc")
DataUwnd.OpenNCData(DataDir + "uwnd.2011.nc")
DataVwnd.OpenNCData(DataDir + "vwnd.2011.nc")
DataRhum.OpenNCData(DataDir + "rhum.2011.nc")
#---- Calculation
#---- Set date to June 23
tIdx = 872
DataAir.TimeIndex = tIdx;
DataUwnd.TimeIndex = tIdx;
DataVwnd.TimeIndex = tIdx;
DataRhum.TimeIndex = tIdx;
#---- Set level to 700hPa
lIdx = 2
DataAir.LevelIndex = lIdx;
DataUwnd.LevelIndex = lIdx;
DataVwnd.LevelIndex = lIdx;
DataRhum.LevelIndex = lIdx;
#---- Get grid data
air = DataAir.GetGridData("air")
uwnd = DataUwnd.GetGridData("uwnd")
vwnd = DataVwnd.GetGridData("vwnd")
rhum = DataRhum.GetGridData("rhum")
#---- Calculate
prs = 850
g = 9.8
es = 6.112*DataMath.Exp(17.67*(air-273.16)/(air-29.65))
qs = 0.62197*es/(prs-0.378*es)
q = qs*rhum/100
qhdivg = DataMath.Hdivg(q*uwnd/g,q*vwnd/g)
qv = rhum*es/100
uv = DataMath.Magnitude(uwnd, vwnd)
uvq = uv*qv/(9.8*1000)

#---- Plot data
myApp.SetDrawType("shaded")
myApp.Display(qhdivg)
myApp.MoveLayerToTop("country1.shp")
myApp.ZoomLonLatEx(0,360,-90.1,90.1)
#aTime = DataAir.GetTime()
#myApp.SetTitle("Water Vapor Flux Divergence - " + aTime.ToString("yyyy-MM-dd"))
myApp.MapLayout.PaintGraphics()
Application.Run(myApp)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-25 16:13:02 | 显示全部楼层
MeteoInfo 发表于 2014-4-25 15:35
把最后一句改为:
myApp.Show()

可以了,多谢王老师的指导。太感谢了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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