爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14206|回复: 14

MeteoInfo脚本示例:站点数据分析

[复制链接]

新浪微博达人勋

发表于 2012-10-27 14:08:39 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2012-10-27 16:43 编辑

和格点数据类似,MeteoInfo也可以对站点数据进行各种数学运算和分析。之前讲过利用MICAPS 1数据(站点数据)绘制累计降水量的脚本,这里用新版的脚本程序再说明一下。程序演示了读取两个时次的MICAPS 1数据中的6小时降水量站点数据,并进行相加获得12小时累计降水量的站点数据。为了绘制降水量等值线图需要将站点数据插值为格点数据,在脚本中设置插值方法和参数即可。 需要将软件更新为最新文件(见置顶帖子)。

Image00937.png

脚本代码如下:
  1. # This Python file uses the following encoding: GB2312
  2. #---- 引入类库
  3. import clr
  4. clr.AddReferenceByPartialName("System")
  5. clr.AddReferenceByPartialName("System.Windows.Forms")
  6. clr.AddReferenceByPartialName("System.Drawing")
  7. from System import *
  8. from System.Windows.Forms import *
  9. from System.Drawing import *
  10. clr.AddReference("MeteoInfoC.dll")
  11. from MeteoInfoC import *
  12. from MeteoInfoC.Layout import *
  13. from MeteoInfoC.Data import *
  14. from MeteoInfoC.Data.MeteoData import *
  15. from MeteoInfoC.Legend import *
  16. from MeteoInfoC.Global import *
  17. from MeteoInfoC.Shape import *

  18. #---- 设置路径变量
  19. BaseDir = "C:\\Program Files (x86)\\MeteoInfo\"
  20. MapDir = BaseDir + "Map\"
  21. LegendDir = BaseDir + "Legend\"
  22. DataDir = BaseDir + "Sample\\MICAPS\"

  23. #---- 设置屏蔽图层(只绘制中国境内图形)
  24. mipy.MapDocument.ActiveMapFrame.MapView.MaskOut.SetMaskLayer = True
  25. mipy.MapDocument.ActiveMapFrame.MapView.MaskOut.MaskLayer = "china.shp"

  26. #---- 设置绘图类型为shaded
  27. mipy.MeteoDataset.SetDrawType("shaded")

  28. #---- 站点数据插值为格点数据的设置
  29. gDataSet = GridDataSetting()
  30. gDataSet.DataExtent = Extent(60, 140, -20, 60)
  31. gDataSet.XNum = 160
  32. gDataSet.YNum = 160
  33. interpSet = InterpolationSetting()
  34. interpSet.GridDataSet = gDataSet
  35. interpSet.InterpolationMethod = InterpolationMethods.IDW_Radius
  36. interpSet.Radius = 2
  37. interpSet.MinPointNum = 1
  38. mipy.MeteoDataset.InterpolationSet = interpSet;
  39. mipy.MeteoDataset.UseDefaultInterpSet = True

  40. #---- 设置图例文件
  41. mipy.MeteoDataset.LegendScheme = LegendScheme(ShapeTypes.Polygon)
  42. mipy.MeteoDataset.LegendScheme.ImportFromXMLFile(LegendDir + "rain1.lgs")
  43. mipy.MeteoDataset.UseDefaultLegendScheme = True

  44. #---- 设置起始结束时间
  45. sTime = DateTime.Parse("2010-10-14 14:00")
  46. eTime = DateTime.Parse("2010-10-14 20:00")
  47. aTime = sTime.AddHours(-6)

  48. dataInfo = MeteoDataInfo()
  49. stData = StationData()
  50. i = 1
  51. #---- 循环
  52. while sTime <= eTime:  
  53.   inFile = sTime.ToString("yyMMddHH") + ".000"
  54.   print inFile
  55.   #---- 打开MICAPS数据文件
  56.   dataInfo.OpenMICAPSData(DataDir + inFile)  
  57.   #---- 获取累计降水站点数据
  58.   if i == 1:
  59.           stData = dataInfo.GetStationData("Precipitation6h")
  60.   else:
  61.           stData = stData + dataInfo.GetStationData("Precipitation6h")
  62.   
  63.   #---- 时间加6小时
  64.   sTime = sTime.AddHours(6)
  65.   i = i + 1

  66. #---- 绘制累计降水图层
  67. aLayer = mipy.MeteoDataset.Display(stData)
  68. aLayer.LayerName = "累计降水"
  69. mipy.MapDocument.ActiveMapFrame.UpdateLayerNode(aLayer)
  70. mipy.MapDocument.ActiveMapFrame.MoveLayer(aLayer, 0)

  71. print "Finished!"
复制代码


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

新浪微博达人勋

发表于 2012-10-27 18:07:41 | 显示全部楼层
顶               
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-29 10:49:16 | 显示全部楼层
接着顶起来
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-29 18:46:03 | 显示全部楼层
又学习了,好东西啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-21 19:46:43 | 显示全部楼层
本帖最后由 weiguangjian 于 2012-11-21 20:16 编辑
  1. # This Python file uses the following encoding: GB2312

  2. #---- 引入类库

  3. import clr

  4. clr.AddReferenceByPartialName("System")

  5. clr.AddReferenceByPartialName("System.Windows.Forms")

  6. clr.AddReferenceByPartialName("System.Drawing")

  7. from System import *

  8. from System.Windows.Forms import *

  9. from System.Drawing import *

  10. clr.AddReference("MeteoInfoC.dll")

  11. from MeteoInfoC import *

  12. from MeteoInfoC.Layout import *

  13. from MeteoInfoC.Data import *

  14. from MeteoInfoC.Data.MeteoData import *

  15. from MeteoInfoC.Legend import *

  16. from MeteoInfoC.Global import *

  17. from MeteoInfoC.Shape import *


  18. #---- 设置路径变量

  19. BaseDir = "C:\\Program Files (x86)\\MeteoInfo\"

  20. MapDir = BaseDir + "Map\"

  21. LegendDir = BaseDir + "Legend\"

  22. DataDir = BaseDir + "Sample\\MICAPS\"


  23. #---- 设置屏蔽图层(只绘制中国境内图形)

  24. mipy.MapDocument.ActiveMapFrame.MapView.MaskOut.SetMaskLayer = True

  25. mipy.MapDocument.ActiveMapFrame.MapView.MaskOut.MaskLayer = "china.shp"


  26. #---- 设置绘图类型为shaded

  27. mipy.MeteoDataset.SetDrawType("shaded")

  28. #---- 站点数据插值为格点数据的设置

  29. gDataSet = GridDataSetting()

  30. gDataSet.DataExtent = Extent(110, 130, 30, 45)

  31. gDataSet.XNum = 130

  32. gDataSet.YNum = 130

  33. interpSet = InterpolationSetting()

  34. interpSet.GridDataSet = gDataSet

  35. interpSet.InterpolationMethod = InterpolationMethods.IDW_Radius

  36. interpSet.Radius = 1

  37. interpSet.MinPointNum = 1

  38. mipy.MeteoDataset.InterpolationSet = interpSet;

  39. mipy.MeteoDataset.UseDefaultInterpSet = True


  40. #---- 设置图例文件

  41. mipy.MeteoDataset.LegendScheme = LegendScheme(ShapeTypes.Polygon)

  42. mipy.MeteoDataset.LegendScheme.ImportFromXMLFile(LegendDir + "rain1.lgs")

  43. mipy.MeteoDataset.UseDefaultLegendScheme = True


  44. #---- 设置起始结束时间

  45. sTime = DateTime.Parse("2012-09-21 14:00")

  46. eTime = DateTime.Parse("2012-09-22 08:00")

  47. aTime = sTime.AddHours(-6)


  48. dataInfo = MeteoDataInfo()

  49. stData = StationData()

  50. i = 1

  51. #---- 循环

  52. while sTime <= eTime:  

  53.   inFile = sTime.ToString("yyMMddHH") + ".sfc"

  54.   print inFile

  55.   #---- 打开MICAPS数据文件

  56.   dataInfo.OpenMICAPSData(DataDir + inFile)  

  57.   #---- 获取累计降水站点数据

  58.   if i == 1:

  59.           stData = dataInfo.GetStationData("Precipitation6h")

  60.   else:

  61.           stData = stData + dataInfo.GetStationData("Precipitation6h")

  62.   

  63.   #---- 时间加6小时

  64.   sTime = sTime.AddHours(6)

  65.   i = i + 1


  66. #---- 绘制累计降水图层

  67. aLayer = mipy.MeteoDataset.Display(stData)

  68. aLayer.LayerName = "累计降水"

  69. mipy.MapDocument.ActiveMapFrame.UpdateLayerNode(aLayer)

  70. mipy.MapDocument.ActiveMapFrame.MoveLayer(aLayer, 0)


  71. print "Finished!"
复制代码
你好!我想用此脚本绘制24小时的累计雨量(2012092108-2012092208),修改执行出现如下错误(这只是出现的第一个错误,后面应该还有错):
Traceback (most recent call last):
  File "<string>", line 60, in <module>
NameError: name 'GridDataSetting' is not defined
初次接触,除了简单的参数设置外,不知道脚本里面还应做哪些设置。以下是简单设置后的代码:还请赐教,不胜感激!所用数据为micaps一类数据
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-21 20:28:12 | 显示全部楼层

需要将软件更新为最新文件(见置顶帖子)。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-21 21:03:35 | 显示全部楼层
MeteoInfo 发表于 2012-11-21 20:28
需要将软件更新为最新文件(见置顶帖子)。

仍然报错:
Traceback (most recent call last):
  File "<string>", line 87, in <module>
IOError: [Errno 2] Could not find a part of the path 'C:\Program Files (x86)\MeteoInfo\Legend\rain1.lgs'.
我看了,在这个路径没有错啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-21 21:28:12 | 显示全部楼层
weiguangjian 发表于 2012-11-21 21:03
仍然报错:
Traceback (most recent call last):
  File "", line 87, in

你再仔细查查路径,如果报错肯定是路径有问题。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-21 22:16:02 | 显示全部楼层
MeteoInfo 发表于 2012-11-21 21:28
你再仔细查查路径,如果报错肯定是路径有问题。

画出图来了,把BaseDir = "C:\\Program Files (x86)\\MeteoInfo\\"中的(x86)去掉就好了。但是在中国区域外的值怎么没去掉,海上不应该有值的啊?并且没有中国底图呢?!
1.gif

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

新浪微博达人勋

 楼主| 发表于 2012-11-21 23:09:43 | 显示全部楼层
weiguangjian 发表于 2012-11-21 22:16
画出图来了,把BaseDir = "C:\\Program Files (x86)\\MeteoInfo\\"中的(x86)去掉就好了。但是在中国区域 ...

你看看MeteoInfo软件的帮助文档以及之前的一些帖子,把软件的基本操作弄清楚。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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