爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6681|回复: 8

MeteoInfo脚本示例:格点数据平均

[复制链接]

新浪微博达人勋

发表于 2012-10-22 11:47:33 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2012-10-22 12:38 编辑

MeteoInfo中计算多个格点数据的平均值有两种方法:一种是将所有的格点数据累加,然后再除以格点数据个数;另一种方法是将所有格点数据添加到一个列表中,然后用DataMath.Average(List(GridData), Boolean)方法对该列表进行平均计算。如果格点数据有缺测值,两种方法计算的结果可能不同。第二种方法的第二个参数表示是否忽略缺测值,如果为True,则和第一种方法是一样的。

第二种方法的第二个参数为False时,某个格点只有在所有格点场均为缺测值时其平均值才为缺测值,否则会按有效值个数来计算平均,这样可以获得尽可能多的有效数据。比如计算三个月的格点场的平均,三个月的数据中格点(2, 2)都是有效值,那么该格点的平均值为(m1(2, 2) + m2(2, 2) + m3(2, 2)) / 3。如果其中一个月该格点的数据是缺测值(比如m2为缺测值),那么该格点的平均值为(m1(2, 2) + m3(2, 2) ) / 2,缺测数据不参与平均计算。但在第一种平均方法或第二种平均方法中第二个参数为True时该格点的平均值为缺测值。

讲起来有点绕,仔细体会一下应该能理解。这里给出一个脚本示例,打开model.ctl文件,将所有时次的U变量格点数据进行平均,使用两种方法来看结果的不同。
Image00263.png

第一种方法的平均结果,有效值较少:
Image00264.png

第二种方法的平均结果,有效值较多:
Image00265.png

完整的脚本程序如下:
  1. #--------------------------------------------------------        
  2. # Author: Yaqiang Wang                                          
  3. # Date: 2012-10-22                                                
  4. # Purpose: Calculate average grid data - tow methods  
  5. # Note: Sample                                                   
  6. #-----------------------------------------------------------
  7. import clr
  8. from System.Collections.Generic import *
  9. clr.AddReference("MeteoInfoC.dll")
  10. from MeteoInfoC import *
  11. from MeteoInfoC.Data import *
  12. from MeteoInfoC.Data.MeteoData import *

  13. #---- Set directories
  14. BaseDir = "C:\\Program Files (x86)\\MeteoInfo\"
  15. DataDir = BaseDir + "Sample\\GrADS\"

  16. #---- Average grid data
  17. mydata = MeteoDataInfo()
  18. mydata.OpenGrADSData(DataDir + "model.ctl")
  19. tnum = mydata.GetTimeNumber()
  20. datagrid = GridData()
  21. datalist = List[GridData]()
  22. for i in range(0, tnum):
  23.         mydata.TimeIndex = i
  24.         gdata = mydata.GetGridData("U")
  25.         if i == 0:
  26.                 datagrid = gdata
  27.         else:
  28.                 datagrid = datagrid + gdata
  29.         
  30.         datalist.Add(gdata)

  31. avedata1 = datagrid / tnum
  32. avedata2 = DataMath.Average(datalist, False)
  33.         
  34. mipy.MeteoDataset.SetDrawType("shaded")
  35. avelayer1 = mipy.MeteoDataset.Display(avedata1)
  36. avelayer1.LayerName = "Ave_Method1"
  37. avelayer2 = mipy.MeteoDataset.Display(avedata2)
  38. avelayer2.LayerName = "Ave_Method2"
  39. mipy.MapDocument.ActiveMapFrame.UpdateLayerNode(avelayer1)
  40. mipy.MapDocument.ActiveMapFrame.UpdateLayerNode(avelayer2)

  41. print 'Finished!'
复制代码



评分

参与人数 1金钱 +2 收起 理由
开始起飞1 + 2 赞一个!

查看全部评分

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

新浪微博达人勋

发表于 2012-10-22 21:05:29 | 显示全部楼层
端板凳过来学习~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-25 22:03:43 | 显示全部楼层

错误提示

错误提示
请问楼主,我把脚本文件中的model.ctl 改成我要用的1978data.ctl,然后把U改成了a,把路径(X86)去掉了改成我需要的路径,但为什么就出现这个错误呢?不知道怎么改,麻烦指点下吧

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

新浪微博达人勋

 楼主| 发表于 2013-4-25 23:18:19 | 显示全部楼层

错误提示被打上了水印,看不清楚。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-26 08:06:41 | 显示全部楼层
MeteoInfo 发表于 2013-4-25 23:18
错误提示被打上了水印,看不清楚。

file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/617039055/QQ/WinTemp/RichOle/ETY~D6B(B_62B5]A~TMWJCL.jpg 这样行了吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-26 08:07:23 | 显示全部楼层
本帖最后由 开始起飞1 于 2013-4-26 08:09 编辑
开始起飞1 发表于 2013-4-26 08:06
这样行了吗?


1111.png
Traceback (most recent call last)
  File"<string>",line 38,in <module>
ValueError: 列“” 不属于表
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-26 08:10:21 | 显示全部楼层
MeteoInfo 发表于 2013-4-25 23:18
错误提示被打上了水印,看不清楚。

Traceback (most recent call last)
  File"<string>",line 38,in <module>
ValueError: 列“” 不属于表
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-26 09:05:19 | 显示全部楼层
开始起飞1 发表于 2013-4-26 08:10
Traceback (most recent call last)
  File"",line 38,in
ValueError: 列“” 不属于表

你更新一下MeteoInfo的最新文件试试,见置顶帖子:MeteoInfo最新文件
http://bbs.06climate.com/forum.p ... 126&fromuid=106
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-19 18:04:06 | 显示全部楼层
谢谢您,这个方法可以不用做庞大的编程工作
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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