爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: MeteoInfo

站点降水数据绘制等值线图新脚本

[复制链接]

新浪微博达人勋

发表于 2014-10-13 13:38:09 | 显示全部楼层
本帖最后由 zhksoft 于 2014-10-13 13:43 编辑

我修改的脚本如下 :
  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.Data.MapData import *
  13. from MeteoInfoC.Data.MeteoData import *
  14. from MeteoInfoC.Layout import *
  15. from MeteoInfoC.Legend import *
  16. from MeteoInfoC.Projections import *
  17. from MeteoInfoC.Shape import *

  18. #---- 设置路径变量
  19. BaseDir = "e:\\Program Files\\MeteoInfo\"
  20. MapDir = BaseDir + "Map\"
  21. LegendDir = BaseDir + "Legend\"
  22. #DataDir = BaseDir + "Sample\\MICAPS\"
  23. DataDir="T:\\surface\\r6-p\"

  24. #---- 打开图层
  25. bou2Layer = MapDataManage.OpenLayer(MapDir + "bou2_4p.shp")
  26. lb = bou2Layer.LegendScheme.LegendBreaks[0]
  27. lb.Color = Color.Yellow
  28. lb.OutlineColor = Color.Gray
  29. lb.OutlineSize = 1
  30. lb.DrawFill = False
  31. bou1Layer = MapDataManage.OpenLayer(MapDir + "bou1_4l.shp")
  32. lb = bou1Layer.LegendScheme.LegendBreaks[0]
  33. lb.Color = Color.Blue
  34. chinaLayer = MapDataManage.OpenLayer(MapDir + "china.shp")
  35. chinaLayer.Visible = False
  36. res1Layer = MapDataManage.OpenLayer(MapDir + "res1_4m.shp")
  37. lb = res1Layer.LegendScheme.LegendBreaks[0]
  38. lb.Color = Color.Red
  39. lb.OutlineColor = Color.Black
  40. lb.Size = 5
  41. res1Layer.LabelSet.FieldName = "NAME";
  42. res1Layer.LabelSet.LabelFont = Font("楷体", 10);
  43. res1Layer.LabelSet.YOffset = 15;
  44. res1Layer.AddLabels();

  45. #---- 创建MIApp类的对象
  46. myApp = MIApp()
  47. mapLayout = myApp.MapLayout
  48. layoutMap = mapLayout.ActiveLayoutMap
  49. mapFrame = layoutMap.MapFrame
  50. mapView = mapFrame.MapView

  51. #---- 添加图层
  52. mapFrame.AddLayer(bou2Layer)
  53. mapFrame.AddLayer(bou1Layer)
  54. mapFrame.AddLayer(chinaLayer)
  55. mapFrame.AddLayer(res1Layer)

  56. #---- Lambert投影
  57. projInfo = ProjectionInfo("+proj=lcc+lat_1=25+lat_2=47+lon_0=105")
  58. mapView.ProjectLayers(projInfo)

  59. #---- 按照经纬度范围缩放地图
  60. mapView.ZoomToExtentLonLat(78,130,15,53)

  61. #---- 设置屏蔽图层(只绘制中国境内图形)
  62. mapView.MaskOut.SetMaskLayer = True
  63. mapView.MaskOut.MaskLayer = chinaLayer.LayerName

  64. #---- 设置ActiveLayoutMap(图层显示)
  65. layoutMap.DrawGridLine = False
  66. layoutMap.DrawNeatLine = False
  67. layoutMap.DrawGridLabel = False
  68. layoutMap.DrawGridTickLine = False
  69. layoutMap.Left = 10
  70. layoutMap.Top = 10
  71. layoutMap.Width = 620
  72. layoutMap.Height = 450

  73. #---- 设置南海脚图(添加Map Frame)
  74. aMapFrame = MapFrame()
  75. aMapFrame.IsFireMapViewUpdate = True
  76. aLayoutMap = LayoutMap(aMapFrame)
  77. aLayoutMap.DrawGridLabel = False
  78. aLayoutMap.DrawGridTickLine = False
  79. aLayoutMap.Left = 40
  80. aLayoutMap.Top = 350
  81. aLayoutMap.Width = 85
  82. aLayoutMap.Height = 109
  83. mapLayout.AddElement(aLayoutMap)
  84. aMapFrame.AddLayer(bou1Layer)
  85. aProjInfo = ProjectionInfo("+proj=lcc+lat_1=25+lat_2=47+lon_0=105")
  86. aMapFrame.MapView.ProjectLayers(aProjInfo)
  87. aMapFrame.MapView.ZoomToExtentLonLat(106.5,122.5,1,23)

  88. #---- 设置图形标题
  89. aText = mapLayout.AddText("Temp",220,50,"黑体",12)

  90. #---- 设置图例
  91. aLegend = mapLayout.AddLegend(550,220)
  92. aLegend.LegendStyle = LegendStyles.Normal               
  93. aLegend.DrawNeatLine = False
  94. aLegend.Title = "降水量(毫米)"
  95. aLegend.BackColor = Color.White
  96. aLegend.Font = Font("Arial", 8)

  97. #---- 设置起始结束时间
  98. sTime = DateTime.Parse("2014-10-12 14:00")
  99. eTime = DateTime.Parse("2014-10-12 20:00")

  100. #---- 站点数据插值为格点数据的设置
  101. interpSet = InterpolationSetting(60,140,-20,60,160,160,"IDW_Radius",2,1)

  102. #---- 设置图例
  103. ls = LegendScheme(ShapeTypes.Polygon)
  104. ls.ImportFromXMLFile(LegendDir + "rain1.lgs")

  105. #---- 设置MeteoDataInfo
  106. mid = MeteoDataInfo()

  107. #---- 循环
  108. while sTime <= eTime:   
  109.   inFile = sTime.ToString("yyMMddHH") + ".000"
  110.   print inFile
  111.   #---- 打开MICAPS数据文件
  112.   mid.OpenMICAPSData(DataDir + inFile)  
  113.   #---- 获取6小时降水量站点数据
  114.   stData = mid.GetStationData("Precipitation6h")
  115.   #---- 将站点数据差值为格点数据
  116.   gData = DrawMeteoData.InterpolateData(stData, interpSet)
  117.   #---- 生成6小时降水量图层
  118.   rainLayer = DrawMeteoData.CreateShadedLayer(gData, ls, "Precipitation", "Rain")
  119.   rainLayer.IsMaskout = True
  120.   #---- 添加图层
  121.   mapFrame.AddLayer(rainLayer)
  122.   print "Display finished"  
  123.   #---- 调整图层顺序(以避免压盖)
  124.   mapFrame.MoveLayerToBottom(rainLayer)  
  125.   #---- 设置标题名称
  126.   title = "      全国降水量实况图\n6小时降水量 (" + sTime.ToString("yyyy-MM-dd HH:00") + ")"
  127.   aText.SetLabelText(title)     
  128.   #---- 设置图例名称
  129.   aLegend.Title = "降水量(毫米)"
  130.   #---- 绘制图形
  131.   mapLayout.PaintGraphics()
  132.   #---- 输出图形为文件
  133.   outFile = "Prec_" + sTime.ToString("yyyyMMddHH") + ".png"
  134.   print outFile
  135.   #mapLayout.ExportToPicture("E:\\Temp\" + outFile)  
  136.   #---- 删除6小时降水量图层
  137.   if sTime < eTime:
  138.           mapFrame.RemoveLayer(rainLayer)
  139.   #---- 时间加6小时
  140.   sTime = sTime.AddHours(6)

  141. #---- 显示程序窗体(只是为了看效果,自动运行时不需要)
  142. #Application.Run(myApp)
  143. myApp.Show()
复制代码



使用的是micaps地面降水数据
diamond 3 14年10月12日14时6小时降水量
14 10 12 14   -1
      6
      1      5     10     25     50    100
      1     25     39
  122.7   37.3  122.5   36.7  120.8   36.2  119.3   35.0  120.4   34.3
  121.1   32.7  122.3   30.9  122.5   30.1  121.5   28.0  119.8   25.0
  116.1   22.6  111.0   21.0  111.0   18.6  109.6   18.1  108.3   18.5
  108.9   19.9  109.3   21.0  106.4   21.6  104.1   22.2  101.6   20.8
   98.7   22.0   97.1   24.1   97.7   27.0   91.7   26.6   85.7   27.7
   78.9   30.6   73.3   37.1   74.1   40.7   87.6   49.8   98.5   43.9
  110.4   44.3  122.0   54.7  135.7   48.3  131.5   42.2  125.2   39.4
  121.3   38.5  121.2   40.3  118.5   38.6  120.8   38.1
    1   1123
50468  127.45   50.25  166      0
50953  126.77   45.75  143      0
52533   98.48   39.77 1478      0
52652  100.43   38.93 1483      0
52866  101.77   36.62 2262      0
52983  104.15   35.86 1875      0
53463  111.68   40.82 1065      0
53513  107.40   40.77 1041      0
53588  113.53   39.03 2898    0.8
53772  112.55   37.78  779    0.6
53915  106.67   35.55 1348    0.5
54218  118.97   42.27  572      0
54337  121.12   41.13   70      0
54342  123.43   41.77   43      0
54471  122.20   40.67    4      0
54497  124.33   40.05   14      0
54823  116.98   36.68   58   0.01

错误代码如下:
  1. 14101214.000
  2. Traceback (most recent call last):
  3.   File "<string>", line 130, in <module>
  4. Exception: Invalid variable: Precipitation6h
复制代码




另:我运行另一个贴子的的程序
  1. #---- 相对湿度
  2. myApp.SetAntiAlias(True)
  3. myApp.SetLegendScheme("D:\micaps2ppt\\LGS\\RH.lgs")
  4. myApp.OpenMICAPSData("t:\\ecmwf\\RH\\700\" + inFile)  
  5. myApp.SetDrawType("Shaded")
  6. myApp.Display("Var")
复制代码


也会出现如下错误:

  1. <div>14100920.096</div><div>Traceback (most recent call last):</div><div>  File "<string>", line 80, in <module></div><div>Exception: Invalid variable: Var</div>
复制代码

14101214.000 (39.08 KB, 下载次数: 0)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-10-13 14:07:00 | 显示全部楼层
zhksoft 发表于 2014-10-13 13:38
我修改的脚本如下 :

用MeteoInfo桌面软件打开数据,看变量名,然后将变量名用在脚本程序中
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-10-13 17:22:31 | 显示全部楼层
MeteoInfo 发表于 2014-10-13 14:07
用MeteoInfo桌面软件打开数据,看变量名,然后将变量名用在脚本程序中

嗯,嗯,谢谢王老师,已经搞定了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-10-13 21:37:04 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-10-15 11:26:03 来自手机 | 显示全部楼层
写论文貌似用得着
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-28 23:17:31 | 显示全部楼层
王老师牛啊~~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-8-7 16:01:12 | 显示全部楼层
正准备 用 basemap 来实现,学习了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-6 16:13:54 | 显示全部楼层
再来学习一下王老师大作吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-7 13:17:58 来自手机 | 显示全部楼层
好东西哈,过来赞一个………………………………(ω)hiahiahia
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-25 10:35:58 | 显示全部楼层
王老师,第一次用Meteoinfo运行脚本,直接复制了您的代码,只修改了Meteoinfo的安装路径,运行时出现了错误提示:
run script...
  File "<string>", line None
SyntaxError: Illegal character in file '<iostream>' for encoding 'GB2312'
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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