爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6632|回复: 7

MeteoInfo脚本教程(十):天气符号、站点填图

[复制链接]

新浪微博达人勋

发表于 2014-12-1 23:16:13 | 显示全部楼层 |阅读模式

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

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

x
如果获取的是天气现象站点数据(天气现象对应的数字代码),还可以生成天气现象符号图层。从MICAPS第1类数据中还可以获取站点填图数据StationModelData类,生成站点填图图层。

    DrawMeteoData.createWeatherSymbolLayer(StationData weatherData, String weatherType, String layerName)
    DrawMeteoData.createWeatherSymbolLayer(StationData weatherData, List<Integer> weathers, String layerName)
    DrawMeteoData.createStationModelLayer(StationModelData smData, String layerName)

可以通过天气类型生成天气符号图层,如果是"All Weather"则生成所有天气现象符号。也可以通过设定天气代码列表来创建特定天气现象符号图层。
  1. #-----------------------------------------------------
  2. # Author: Yaqiang Wang
  3. # Date: 2014-12-1
  4. # Purpose: Get and plot station weather phenomenon
  5. # Note: Sample
  6. #-----------------------------------------------------
  7. #---- Import classes
  8. print 'Import classes...'
  9. from org.meteoinfo.layout import MapLayout
  10. from org.meteoinfo.data.mapdata import MapDataManage
  11. from org.meteoinfo.data.meteodata import MeteoDataInfo, DrawMeteoData
  12. from org.meteoinfo.layout import LegendStyles
  13. from org.meteoinfo.layout import PaperSize
  14. from org.meteoinfo.global import Extent
  15. import os
  16. from java.awt import Color
  17. from javax.swing import JFrame

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

  23. #---- Create MapLayout object
  24. mapLayout = MapLayout()
  25. mapFrame = mapLayout.getActiveMapFrame()
  26. ps = PaperSize('Custum', 500, 1000)
  27. mapLayout.setPaperSize(ps)

  28. #---- Load country layer
  29. print 'Load country layer...'
  30. countryLayer = MapDataManage.loadLayer(os.path.join(mapDir, 'country1.shp'))
  31. lb = countryLayer.getLegendScheme().getLegendBreaks().get(0)
  32. lb.setDrawFill(False)
  33. lb.setOutlineColor(Color.black)
  34. mapFrame.addLayer(countryLayer)

  35. #---- Create MeteoDataInfo object
  36. mdi = MeteoDataInfo()

  37. #---- Open a MICAPS data file
  38. fn = os.path.join(dataDir, 'MICAPS/10101414.000')
  39. mdi.openMICAPSData(fn)

  40. #---- Get station data
  41. sdata = mdi.getStationData('WeatherNow')

  42. #---- Create station weather layer from the station data
  43. layer = DrawMeteoData.createWeatherSymbolLayer(sdata, 'All Weather', 'WeatherSymbole')
  44. #weathers = [5,10,11,12,40,41,42,43,44,45,46,47,48,49]
  45. #layer = DrawMeteoData.createWeatherSymbolLayer(sdata, weathers, 'WeatherSymbole')

  46. #---- Add layer
  47. mapFrame.addLayer(layer)

  48. #--- Move layer to bottom
  49. mapFrame.moveLayer(layer, 0)

  50. #---- Add title
  51. title = mapLayout.addText('MeteoInfo script demo', 350, 30, 'Arial', 16)

  52. #---- Set layout map
  53. print 'Set layout map...'
  54. mapLayout.getActiveLayoutMap().setWidth(580)
  55. mapLayout.getActiveLayoutMap().zoomToExtentLonLatEx(Extent(70, 140, 15, 55))

  56. #---- Set mapframe
  57. mapFrame.setGridXDelt(10)
  58. mapFrame.setGridYDelt(10)

  59. #---- Add legend
  60. legend = mapLayout.addLegend(628, 10)
  61. legend.setLegendStyle(LegendStyles.Normal)
  62. legend.setLegendLayer(layer)
  63. legend.setColumnNumber(4)
  64. legend.setTitle('Weather')

  65. frame = JFrame('MeteoInfo Script Sample', size = (990, 530))
  66. frame.add(mapLayout)
  67. frame.visible = True
  68. print 'Finished!'



全部天气现象:
Image00073.png


雾霾天气:
Image00074.png


站点填图脚本:
  1. #-----------------------------------------------------
  2. # Author: Yaqiang Wang
  3. # Date: 2014-12-1
  4. # Purpose: Get and plot station model data
  5. # Note: Sample
  6. #-----------------------------------------------------
  7. #---- Import classes
  8. print 'Import classes...'
  9. from org.meteoinfo.layout import MapLayout
  10. from org.meteoinfo.data.mapdata import MapDataManage
  11. from org.meteoinfo.data.meteodata import MeteoDataInfo, DrawMeteoData
  12. from org.meteoinfo.layout import LegendStyles
  13. from org.meteoinfo.global import Extent
  14. import os
  15. from java.awt import Color
  16. from java.awt import Font
  17. from javax.swing import JFrame

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

  23. #---- Create MapLayout object
  24. mapLayout = MapLayout()
  25. mapFrame = mapLayout.getActiveMapFrame()

  26. #---- Load country layer
  27. print 'Load country layer...'
  28. countryLayer = MapDataManage.loadLayer(os.path.join(mapDir, 'country1.shp'))
  29. lb = countryLayer.getLegendScheme().getLegendBreaks().get(0)
  30. lb.setDrawFill(False)
  31. lb.setOutlineColor(Color.blue)
  32. mapFrame.addLayer(countryLayer)

  33. #---- Create MeteoDataInfo object
  34. mdi = MeteoDataInfo()

  35. #---- Open a MICAPS data file
  36. fn = os.path.join(dataDir, 'MICAPS/10101414.000')
  37. mdi.openMICAPSData(fn)

  38. #---- Get station model data
  39. smdata = mdi.getStationModelData()

  40. #---- Create station info layer from the station model data
  41. layer = DrawMeteoData.createStationModelLayer(smdata, 'StationModel')

  42. #---- Add layer
  43. mapFrame.addLayer(layer)

  44. #--- Move layer to bottom
  45. mapFrame.moveLayer(layer, 0)

  46. #---- Add title
  47. title = mapLayout.addText('MeteoInfo script demo', 350, 30, 'Arial', 16)

  48. #---- Set layout map
  49. print 'Set layout map...'
  50. mapLayout.getActiveLayoutMap().setWidth(580)
  51. mapLayout.getActiveLayoutMap().zoomToExtentLonLatEx(Extent(70, 140, 15, 55))

  52. #---- Set mapframe
  53. mapFrame.setGridXDelt(10)
  54. mapFrame.setGridYDelt(10)

  55. frame = JFrame('MeteoInfo Script Sample', size = (750, 540))
  56. frame.add(mapLayout)
  57. frame.visible = True
  58. print 'Finished!'



Image00075.png

本帖被以下淘专辑推荐:

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

新浪微博达人勋

 成长值: 19710
发表于 2014-12-2 08:27:32 | 显示全部楼层
王老师,如果再附上一个这样的文档会不会更好点?

MeteoInfo脚本教程(十)-天气符号、站点填图.pdf

454.79 KB, 下载次数: 25, 下载积分: 金钱 -5

教程(十)

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

新浪微博达人勋

 成长值: 32430
发表于 2014-12-2 08:29:43 | 显示全部楼层
兰溪之水 发表于 2014-12-2 08:27
王老师,如果再附上一个这样的文档会不会更好点?

一起要求王老师出书吧……
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-12-2 22:50:52 | 显示全部楼层
兰溪之水 发表于 2014-12-2 08:27
王老师,如果再附上一个这样的文档会不会更好点?

等系列教程写完会考虑汇总成一个脚本教程。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-9-14 08:37:24 | 显示全部楼层
谢谢老师在另一个帖子了的回复。我是根据这个帖子写的脚本,图形都ok了,但是最后使用savefig()语句保存图片时报错:
Traceback (most recent call last):
  File "<iostream>", line 144, in <module>
  File "D:\MeteoInfo\pylib\mipylib\plotlib\miplot.py", line 2415, in savefig
    chartpanel.saveImage(fname, sleep)  
AttributeError: 'NoneType' object has no attribute 'saveImage'



                               
登录/注册后可看大图
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-9-14 08:46:18 | 显示全部楼层
Sunnystone24 发表于 2017-9-14 08:37
谢谢老师在另一个帖子了的回复。我是根据这个帖子写的脚本,图形都ok了,但是最后使用savefig()语句保存图 ...

参考这里:http://bbs.06climate.com/forum.php?mod=viewthread&tid=30699
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-9-14 09:01:32 | 显示全部楼层
MeteoInfo 发表于 2017-9-14 08:46
参考这里:http://bbs.06climate.com/forum.php?mod=viewthread&tid=30699

谢谢老师指导,已经实现了{:eb511:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-3-16 22:48:10 | 显示全部楼层
本帖最后由 hhzhaoheng 于 2020-3-16 22:49 编辑

不错不错,看了挺有收益
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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