爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4105|回复: 3

MeteoInfo脚本教程(十八):项目文件

[复制链接]

新浪微博达人勋

发表于 2014-12-22 21:19:06 | 显示全部楼层 |阅读模式

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

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

x
在MeteoInfo中图层、地图、版面等的各种设置可以保存在一个项目文件中(.mip)。可以通过打开该项目文件还原项目的各种设置。项目文件也可以在脚本程序中使用,会很大程度降低脚本程序的复杂性(其实脚本程序中最复杂的部分主要是图形的各种设置)。比如上一讲中站点数据分析绘图的例子可以利用项目文件降低复杂性,并在某些方面提升图形质量。前面还提到了图例文件(.lgs),使用它也能是脚本中图例设置部分更加简洁。

1、首先在MeteoInfo桌面软件中根据需要编辑一个项目文件(这里是rain.mip),能更方便地控制图形中各要素,尤其是对省会城市标志位置的编辑能够提升图形质量(如果在脚本中控制每个标注的位置是非常繁琐的)。同时编辑出降水图层的图例(rain1.lgs)。
Image00099.png

2、利用项目文件和图例文件简化上一讲的脚本程序。
  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.layout import MapLayout
  11. from org.meteoinfo.data import StationData
  12. from org.meteoinfo.data.mapdata import MapDataManage
  13. from org.meteoinfo.data.meteodata import MeteoDataInfo, DrawMeteoData
  14. from org.meteoinfo.legend import LegendScheme, LegendType, PolygonBreak, MapFrame
  15. from org.meteoinfo.shape import ShapeTypes
  16. from org.meteoinfo.layout import LegendStyles, LayoutMap
  17. from org.meteoinfo.global import Extent
  18. from org.meteoinfo.projection import ProjectionInfo
  19. from org.meteoinfo.geoprocess.analysis import InterpolationSetting
  20. import os
  21. from datetime import datetime
  22. from datetime import timedelta
  23. from java.awt import Color
  24. from java.awt import Font
  25. from javax.swing import JFrame

  26. #---- Set directories
  27. print 'Set directories...'
  28. baseDir = 'D:/MyProgram/Distribution/java/MeteoInfo/MeteoInfo'
  29. dataDir = os.path.join(baseDir, 'sample/MICAPS')
  30. mapDir = os.path.join(baseDir, 'map')

  31. #---- Create MapLayout object
  32. mapLayout = MapLayout()

  33. #---- Load project file (*.mip)
  34. pfn = 'D:/Temp/mip/rain.mip'
  35. mapLayout.loadProjectFile(pfn)
  36. mapFrame = mapLayout.getActiveMapFrame()

  37. #---- Create MeteoDataInfo object
  38. mdi = MeteoDataInfo()

  39. #---- Set start/end time
  40. stime = datetime(2010,10,14,14)
  41. etime = datetime(2010,10,14,20)

  42. #---- Loop
  43. print 'Get sum station data...'
  44. sdata = StationData()
  45. atime = stime
  46. i = 0
  47. while atime < etime:
  48.   #---- Open a MICAPS data file
  49.   fn = os.path.join(dataDir, stime.strftime('%y%m%d%H') + '.000')
  50.   mdi.openMICAPSData(fn)

  51.   #---- Sum precipitation station data
  52.   if i == 0:
  53.     sdata = mdi.getStationData('Precipitation6h')
  54.   else:
  55.     sdata = sdata.add(mdi.getStationData('Precipitation6h'))

  56.   atime = atime + timedelta(hours=6)
  57.   
  58. #---- Interpolate station data to grid data
  59. print 'Interpolate station data to grid data...'
  60. interpSet = InterpolationSetting(60,140,-20,60,160,160,"IDW_Radius",2,1)
  61. #radList = [10.0, 8.0, 6.0, 4.0]
  62. #interpSet = InterpolationSetting(60,140,-20,60,160,160,"Cressman",radList)
  63. gdata = sdata.interpolateData(interpSet)

  64. #---- Set legend scheme
  65. ls = LegendScheme(ShapeTypes.Polygon)
  66. lsfn = 'D:/Temp/rain1.lgs'
  67. ls.importFromXMLFile(lsfn)

  68. #---- Create shaded layer
  69. print 'Create shaded layer...'  
  70. layer = DrawMeteoData.createShadedLayer(gdata, ls, 'Rain_shaded', 'Rain', True)
  71. layer.setMaskout(True)

  72. #---- Add layer
  73. mapFrame.addLayer(layer)
  74. mapFrame.moveLayer(layer, 0)

  75. #---- Set sub title
  76. stime = stime + timedelta(hours=-6)
  77. subTitle = mapLayout.getTexts().get(1)
  78. subTitle.setLabelText(u'(' + stime.strftime('%Y-%m-%d %H:00') +
  79.   u' 至 ' + etime.strftime('%Y-%m-%d %H:00') + u')')

  80. #---- Set legend
  81. legend = mapLayout.getLegends().get(0)
  82. legend.setLegendLayer(layer)
  83. legend.setTitle(u'降水量(毫米)')

  84. frame = JFrame('MeteoInfo Script Sample', size = (750, 530))
  85. frame.add(mapLayout)
  86. frame.visible = True
  87. print 'Finished!'


从运行结果图中可以看出省会城市标注的改进。
Image00098.png

本帖被以下淘专辑推荐:

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

新浪微博达人勋

发表于 2014-12-22 22:24:20 | 显示全部楼层
支持楼主,先收藏,日后再看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-1-3 06:05:06 | 显示全部楼层
果断要学习啊。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-12 08:55:11 | 显示全部楼层
二次开发的时候怎么设置项目保存、打开项目等一些菜单栏呢?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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