爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3579|回复: 1

MeteoInfo脚本教程(十九):miapp

[复制链接]

新浪微博达人勋

发表于 2014-12-22 22:14:59 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2014-12-22 22:29 编辑

从MeteoInfo软件界面中打开脚本编辑器,在其中运行脚本时有一个内置对象(miapp),该对象其实就是MeteoInfo软件的主界面,通过该对象可以对MeteoInfo软件进行控制。在很多情况下,我们写脚本程序并不是为了日常定时后台运行,这时候可以将从数据中创建的图层直接加入到MeteoInfo软件界面中,从而简化脚本程序。

还是以上两讲的例子来进行示例,脚本程序中无需再创建MapLayout对象,而是通过:
    miapp.getMapDocument()    #获取MeteoInfo的图形控制对象(LayersLegend类)
    miapp.getMapDocument().getActiveMapFrame()    #获取当前活动的MapFrame对象
    miapp.getMapDocument().getActiveMapFrame().getMapView()    #获取当前活动的MapFrame对象中的MapView对象
    miapp.getMapDocument().getMapLayout()    #获取MapLayout对象

脚本程序:
  1. # encoding=utf-8
  2. #-----------------------------------------------------
  3. # Author: Yaqiang Wang
  4. # Date: 2014-12-6
  5. # Purpose: Interpolate station data to grid data
  6. # Note: Sample
  7. #-----------------------------------------------------
  8. #---- Import classes
  9. print 'Import classes...'
  10. from org.meteoinfo.data import StationData
  11. from org.meteoinfo.data.meteodata import MeteoDataInfo, DrawMeteoData
  12. from org.meteoinfo.legend import LegendScheme, LegendType, PolygonBreak, MapFrame
  13. from org.meteoinfo.shape import ShapeTypes
  14. from org.meteoinfo.layout import LayerUpdateTypes
  15. from org.meteoinfo.geoprocess.analysis import InterpolationSetting
  16. import os
  17. from datetime import datetime
  18. from datetime import timedelta

  19. #---- Set directories
  20. print 'Set directories...'
  21. baseDir = 'D:/MyProgram/Distribution/java/MeteoInfo/MeteoInfo'
  22. dataDir = os.path.join(baseDir, 'sample/MICAPS')
  23. mapDir = os.path.join(baseDir, 'map')

  24. #---- Create MeteoDataInfo object
  25. mdi = MeteoDataInfo()

  26. #---- Set start/end time
  27. stime = datetime(2010,10,14,14)
  28. etime = datetime(2010,10,14,20)

  29. #---- Loop
  30. print 'Get sum station data...'
  31. sdata = StationData()
  32. atime = stime
  33. i = 0
  34. while atime < etime:
  35.   #---- Open a MICAPS data file
  36.   fn = os.path.join(dataDir, stime.strftime('%y%m%d%H') + '.000')
  37.   mdi.openMICAPSData(fn)

  38.   #---- Sum precipitation station data
  39.   if i == 0:
  40.     sdata = mdi.getStationData('Precipitation6h')
  41.   else:
  42.     sdata = sdata.add(mdi.getStationData('Precipitation6h'))

  43.   atime = atime + timedelta(hours=6)
  44.   
  45. #---- Interpolate station data to grid data
  46. print 'Interpolate station data to grid data...'
  47. interpSet = InterpolationSetting(60,140,-20,60,160,160,"IDW_Radius",2,1)
  48. #radList = [10.0, 8.0, 6.0, 4.0]
  49. #interpSet = InterpolationSetting(60,140,-20,60,160,160,"Cressman",radList)
  50. gdata = sdata.interpolateData(interpSet)

  51. #---- Set legend scheme
  52. ls = LegendScheme(ShapeTypes.Polygon)
  53. lsfn = 'D:/Temp/rain1.lgs'
  54. ls.importFromXMLFile(lsfn)

  55. #---- Create shaded layer
  56. print 'Create shaded layer...'  
  57. layer = DrawMeteoData.createShadedLayer(gdata, ls, 'Rain_shaded', 'Rain', True)
  58. layer.setMaskout(True)

  59. #---- miapp object
  60. mapFrame = miapp.getMapDocument().getActiveMapFrame()
  61. mapLayout = miapp.getMapDocument().getMapLayout()

  62. #---- Add layer
  63. mapFrame.addLayer(layer)
  64. mapFrame.moveLayer(layer, 0)

  65. #---- Set sub title
  66. stime = stime + timedelta(hours=-6)
  67. subTitle = mapLayout.getTexts().get(1)
  68. subTitle.setLabelText(u'(' + stime.strftime('%Y-%m-%d %H:00') +
  69.   u' 至 ' + etime.strftime('%Y-%m-%d %H:00') + u')')

  70. #---- Set legend
  71. legend = mapLayout.getLegends().get(0)
  72. legend.setLegendLayer(layer)
  73. legend.setTitle(u'降水量(毫米)')
  74. legend.setLayerUpdateType(LayerUpdateTypes.NotUpdate)

  75. mapLayout.paintGraphics()

  76. print 'Finished!'


运行结果:
Image00101.png

本帖被以下淘专辑推荐:

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

新浪微博达人勋

发表于 2014-12-25 10:39:37 | 显示全部楼层
感谢王老师无私分享大作。 你在研发,我照抄,我都跟不上你的步伐,惭愧啊。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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