爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
12
返回列表 发新帖
楼主: 孤蓝et

脚本如何实现MICAPS第一类多要素的叠加显示?【已解决】

[复制链接]

新浪微博达人勋

发表于 2011-12-1 22:08:12 | 显示全部楼层

下载最新的MeteoInfo 1.0.1版,脚本中加入:
myApp.SetDrawType("barb")
myApp.MeteoDataInfo.MeteoUVStr.IsUV = Flase
myApp.Display("WindDirection","WindSpeed")
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-12-2 11:10:59 | 显示全部楼层
MeteoInfo 发表于 2011-12-1 22:08
下载最新的MeteoInfo 1.0.1版,脚本中加入:
myApp.SetDrawType("barb")
myApp.MeteoDataInfo.MeteoUVS ...

感谢版主啊,辛苦您了。问题解决。
成功实现Micaps第一类数据的多要素叠加。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-12-2 11:12:17 | 显示全部楼层
效果图如下,脚本程序同样附上。
tem_2011080318.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. #---- 创建MIApp类的对象
  15. myApp = MIApp()
  16. #---- 添加图层
  17. myApp.OpenLayer("..\\Map\\bou2_4p.shp")
  18. #---- 设置图层渲染
  19. myApp.SetLegendBreak("bou2_4p.shp",0,Color.Yellow,Color.Gray,1,True,False,True)
  20. #myApp.OpenLayer("..\\Map\\bou1_4l.shp")
  21. #myApp.SetLegendBreak("bou1_4l.shp",0,Color.Blue)
  22. myApp.OpenLayer("..\\Map\\china.shp")
  23. myApp.SetLayerVisible("china.shp", False)
  24. myApp.OpenLayer("..\\Map\\res1_4m.shp")
  25. myApp.SetLegendBreak("res1_4m.shp",0,5,Color.Red,Color.Black,True,True,True)
  26. #---- 获取矢量图层对象,并设置标注
  27. aLayer = myApp.GetVectorLayer("res1_4m.shp")
  28. aLayer.LabelSet.FieldName = "NAME";
  29. aLayer.LabelSet.LabelFont = Font("楷体", 10);
  30. aLayer.LabelSet.Offset = 15;
  31. aLayer.AddLabels();

  32. #---- Lambert投影
  33. myApp.ProjectLayers("+proj=lcc+lat_1=25+lat_2=47+lon_0=84")

  34. #---- 按照经纬度范围缩放地图
  35. myApp.ZoomLonLat(76,94,35,50)

  36. #---- 设置屏蔽图层(只绘制中国境内图形)
  37. myApp.SetMaskout("china.shp")

  38. #---- 站点数据插值为格点数据的设置
  39. myApp.SetInterpolation(60,140,-20,60,160,160,"IDW_Radius",1,1)
  40. #---- 设置图例文件
  41. #myApp.SetLegendScheme("..\\Legend\\tem.lgs")

  42. #---- 设置DefalutLayoutMap(图层显示)
  43. myApp.MapLayout.DefaultLayoutMap.DrawGridLine = True
  44. myApp.MapLayout.DefaultLayoutMap.DrawNeatLine = True
  45. myApp.MapLayout.DefaultLayoutMap.Left = 10
  46. myApp.MapLayout.DefaultLayoutMap.Top = 10
  47. myApp.MapLayout.DefaultLayoutMap.Width = 620
  48. myApp.MapLayout.DefaultLayoutMap.Height = 450



  49. #---- 设置DefaultTitle(图形标题)
  50. myApp.MapLayout.DefaultTitle.SetFont("黑体", 12)
  51. myApp.MapLayout.DefaultTitle.Top = 30
  52. myApp.MapLayout.DefaultTitle.Left = 80

  53. #---- 设置DefaultLegend(图例)
  54. myApp.MapLayout.DefaultLegend.LegendStyle = LegendStyleEnum.Normal               
  55. myApp.MapLayout.DefaultLegend.DrawNeatLine = False
  56. myApp.MapLayout.DefaultLegend.Title = "温度"
  57. myApp.MapLayout.DefaultLegend.BackColor = Color.White
  58. myApp.MapLayout.DefaultLegend.Font = Font("Arial", 8)
  59. myApp.MapLayout.DefaultLegend.Left = 640
  60. myApp.MapLayout.DefaultLegend.Top = 150


  61. #---- 设置起始结束时间
  62. sTime = DateTime.Parse("2011-8-3 18:00")
  63. eTime = DateTime.Parse("2011-8-3 18:00")



  64. #---- 循环
  65. while sTime <= eTime:
  66.   myApp.RemoveDataLayers()
  67.   inFile = sTime.ToString("yyMMddHH") + ".000"
  68.   print inFile
  69.   #---- 打开MICAPS数据文件
  70.   myApp.OpenMICAPSData("..\\Sample\\aws\" + inFile)  

  71.   #---- 设置绘图类型为shaded
  72.   myApp.SetDrawType("Shaded")
  73.   myApp.Display("Temperature")

  74.   myApp.SetDrawType("Barb")
  75.   myApp.MeteoDataInfo.MeteoUVStr.IsUV = False
  76.   myApp.Display("WindDirection","WindSpeed")

  77.   print "Display finished"  
  78.   #---- 调整图层顺序(以避免压盖)
  79.   myApp.MoveLayerToTop("bou2_4p.shp")  
  80.   #myApp.MoveLayerToTop("bou1_4l.shp")
  81.   myApp.MoveLayerToTop("res1_4m.shp")
  82.   #---- 设置标题名称
  83.   title = "                     新疆区域温度分布图 (" + sTime.ToString("yyyy-MM-dd HH:00") + ")"
  84.   myApp.SetTitle(title)     
  85.   #---- 设置图例名称
  86.   myApp.MapLayout.DefaultLegend.Title = "温度(℃)"
  87.   #---- 绘制图形
  88.   myApp.MapLayout.PaintGraphics()
  89.   #---- 输出图形为文件
  90.   outFile = "tem_" + sTime.ToString("yyyyMMddHH") + ".png"
  91.   print outFile
  92.   myApp.SaveFigure("E:\" + outFile)  
  93.   #---- 删除6小时降水量图层
  94.   if sTime < eTime:
  95.           myApp.RemoveLastLayer()
  96.   #---- 时间加6小时
  97.   sTime = sTime.AddHours(1)

  98. #---- 显示程序窗体(只是为了看效果,自动运行时不需要)
  99. Application.Run(myApp)
复制代码
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-12-2 11:17:13 | 显示全部楼层
    刚好需要用一个软件自动批量生成常用的天气图或者综合图,MICAPS3的做天气图的还是需要人工干预,用楼主的这个就无敌啦,做好脚本,自动执行出图,然后我再用程序批量得到天气讲解的PPT。完美了。

赞楼主一个。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-2 11:44:58 | 显示全部楼层
楼主和版主真厉害,此方法我也想学用。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-12-2 12:19:51 | 显示全部楼层
喜上眉梢 发表于 2011-12-2 11:44
楼主和版主真厉害,此方法我也想学用。

我那VB写交互界面,自动生成、执行meteoinfo Script,批量得到图形文件,而后使用VB自动将图形、标题等信息导入PPT,而后提供给预报员。
现在只有个思路。等我花点时间,写好好给大家分享。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-2 13:46:08 | 显示全部楼层
孤蓝et 发表于 2011-12-2 12:19
我那VB写交互界面,自动生成、执行meteoinfo Script,批量得到图形文件,而后使用VB自动将图形、标题等信 ...

既然是想自动运行,似乎没必要再写交互界面,用IronPython应该能完成所有工作
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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