爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: MeteoInfo

MeteoInfo脚本示例:台风

[复制链接]

新浪微博达人勋

发表于 2012-9-26 19:34:07 | 显示全部楼层
王老师,如果能和wrf模式运算结果wrfout直接衔接的话真是太好了,比如像ncl那样,有官网的脚本示例
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-26 22:29:10 | 显示全部楼层

MarkerType是在MeteoInfoC.Drawing命名空间里,在前面加上:
from MeteoInfoC.Drawing import *
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-26 22:39:02 | 显示全部楼层
随缘 发表于 2012-9-26 19:34
王老师,如果能和wrf模式运算结果wrfout直接衔接的话真是太好了,比如像ncl那样,有官网的脚本示例

能具体说说“直接衔接”指的什么吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-9-27 08:27:50 | 显示全部楼层
MeteoInfo 发表于 2012-9-26 22:39
能具体说说“直接衔接”指的什么吗?

哦,我的意思也就是像ncl那样开设一个官网的脚本例子,里面有针对wrf模式的部分,大多数人还对meteoinfo的脚本不是很熟悉,通过一些常用的降水啊,台风路径啊这样脚本示例,可以让一些水平较低的同学很快运用meteoinfo,对其脚本多一些了解
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-27 08:58:09 | 显示全部楼层
随缘 发表于 2012-9-27 08:27
哦,我的意思也就是像ncl那样开设一个官网的脚本例子,里面有针对wrf模式的部分,大多数人还对meteoinfo的 ...

很好的建议,一直也想在www.meteothinker.com上做类似的例子。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-9-27 09:43:59 | 显示全部楼层
本帖最后由 良辰 于 2012-9-27 09:51 编辑

2112.jpg 王老师,您看我画出来的为什么和您画的不一样那?标志是字母a。不是台风的标志!呜呜呜
还有批处理的没有实现,代码我给您发出来,麻烦你看一下!
批处理代码如下:

aPolyline = PolylineShape()
plist = List[PointD]()
for aline in tf:
        print aline
        datalist = aline.split()
        lat = float(datalist[1])
        lon = float(datalist[2])
        t = datalist[3]
        wind = int(datalist[4])
        stat = datalist[6]
        if len(datalist) == 8:
                stat = stat + ' ' + datalist[7]
        aPS = PointShape()
        aPoint = PointD(lon, lat)
        aPS.Point = aPoint
        plist.Add(aPoint)
        shapeNum = pLayer.ShapeNum
        if pLayer.EditInsertShape(aPS, shapeNum):
                pLayer.EditCellValue("Time", shapeNum, t)
                pLayer.EditCellValue("Wind", shapeNum, wind)
                pLayer.EditCellValue("Status", shapeNum, stat)
pLayer.UpdateLegendScheme(LegendType.GraduatedColor, "Wind")
for legend in pLayer.LegendScheme.LegendBreaks:
        legend.MarkerType = MarkerType.Character
        legend.FontName = "weather_symbol"
        legend.CharIndex = 170
        legend.Size = 12
        
aPolyline.Points = plist
shapeNum = lLayer.ShapeNum
if lLayer.EditInsertShape(aPolyline, shapeNum):
        lLayer.EditCellValue("ID", shapeNum, id)
lLayer.UpdateLegendScheme(LegendType.SingleSymbol, "ID")
lLayer.LegendScheme.LegendBreaks[0].Size = 2
mipy.MapDocument.ActiveMapFrame.AddLayer(lLayer)
mipy.MapDocument.ActiveMapFrame.AddLayer(pLayer)   
print 'Finished!'

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

新浪微博达人勋

发表于 2012-9-27 09:52:28 | 显示全部楼层

  1. aPolyline = PolylineShape()
  2. plist = List[PointD]()
  3. for aline in tf:
  4.         print aline
  5.         datalist = aline.split()
  6.         lat = float(datalist[1])
  7.         lon = float(datalist[2])
  8.         t = datalist[3]
  9.         wind = int(datalist[4])
  10.         stat = datalist[6]
  11.         if len(datalist) == 8:
  12.                 stat = stat + ' ' + datalist[7]
  13.         aPS = PointShape()
  14.         aPoint = PointD(lon, lat)
  15.         aPS.Point = aPoint
  16.         plist.Add(aPoint)
  17.         shapeNum = pLayer.ShapeNum
  18.         if pLayer.EditInsertShape(aPS, shapeNum):
  19.                 pLayer.EditCellValue("Time", shapeNum, t)
  20.                 pLayer.EditCellValue("Wind", shapeNum, wind)
  21.                 pLayer.EditCellValue("Status", shapeNum, stat)

  22. pLayer.UpdateLegendScheme(LegendType.GraduatedColor, "Wind")
  23. for legend in pLayer.LegendScheme.LegendBreaks:
  24.         legend.MarkerType = MarkerType.Character
  25.         legend.FontName = "weather_symbol"
  26.         legend.CharIndex = 170
  27.         legend.Size = 12
  28.         
  29. aPolyline.Points = plist
  30. shapeNum = lLayer.ShapeNum
  31. if lLayer.EditInsertShape(aPolyline, shapeNum):
  32.         lLayer.EditCellValue("ID", shapeNum, id)
  33. lLayer.UpdateLegendScheme(LegendType.SingleSymbol, "ID")
  34. lLayer.LegendScheme.LegendBreaks[0].Size = 2

  35. mipy.MapDocument.ActiveMapFrame.AddLayer(lLayer)
  36. mipy.MapDocument.ActiveMapFrame.AddLayer(pLayer)   
  37. print 'Finished!'
复制代码
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-27 10:07:09 | 显示全部楼层
良辰 发表于 2012-9-27 09:43
王老师,您看我画出来的为什么和您画的不一样那?标志是字母a。不是台风的标志!呜呜呜
还有批处理的没有实 ...

你的计算机里没有Weather这个字体吗?(可以在word里用插入符合功能看看字体)

请贴出全部代码及错误信息。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-9-27 10:13:56 | 显示全部楼层
  1. #--------------------------------------------------------        
  2. # Author: Yaqiang Wang                                          
  3. # Date: 2012-9-26                                                
  4. # Purpose: Read and plot typhoon data  
  5. # Note: Sample                                                   
  6. #-----------------------------------------------------------  
  7. #---- Import clr and classes
  8. import clr
  9. clr.AddReferenceByPartialName("System")
  10. clr.AddReferenceByPartialName("System.Drawing")
  11. from System import *
  12. from System.Drawing import *
  13. from System.Collections.Generic import *
  14. clr.AddReference("MeteoInfoC.dll")
  15. from MeteoInfoC import *
  16. from MeteoInfoC.Data.MapData import *
  17. from MeteoInfoC.Geoprocess import *
  18. from MeteoInfoC.Layer import *
  19. from MeteoInfoC.Shape import *
  20. from MeteoInfoC.Legend import *
  21. from MeteoInfoC.Drawing import *
  22. import os.path

  23. #---- Create a point and line layers to plot typhoon pathway
  24. print 'Create typhoon point layer...'
  25. pLayer = VectorLayer(ShapeTypes.Point)
  26. pLayer.LayerName = "Typhoon_Point"
  27. pLayer.Visible = True
  28. pLayer.EditAddField("Time", String)
  29. pLayer.EditAddField("Wind", Int32)
  30. pLayer.EditAddField("Status", String)

  31. print 'Create typhoon polyline layer...'
  32. lLayer = VectorLayer(ShapeTypes.Polyline)
  33. lLayer.LayerName = "Typhoon_Line"
  34. lLayer.Visible = True
  35. lLayer.EditAddField("ID", String)

  36. #---- Read typhoon data file
  37. print 'Read typhoon data file...'
  38. dir = 'F:\\taifeng\\his_typhoon_track'
  39. list = os.listdir(dir)  #列出目录下的所有文件和目录
  40. for line in list:
  41. fn = os.path.join(dir,line)
  42. tf = open(fn)
  43. tf.readline()
  44. aline = tf.readline()
  45. id = aline.split()[1]
  46. tf.readline()
  47. aPolyline = PolylineShape()
  48. plist = List[PointD]()
  49. for aline in tf:
  50.         print aline
  51.         datalist = aline.split()
  52.         lat = float(datalist[1])
  53.         lon = float(datalist[2])
  54.         t = datalist[3]
  55.         wind = int(datalist[4])
  56.         stat = datalist[6]
  57.         if len(datalist) == 8:
  58.                 stat = stat + ' ' + datalist[7]
  59.         aPS = PointShape()
  60.         aPoint = PointD(lon, lat)
  61.         aPS.Point = aPoint
  62.         plist.Add(aPoint)
  63.         shapeNum = pLayer.ShapeNum
  64.         if pLayer.EditInsertShape(aPS, shapeNum):
  65.                 pLayer.EditCellValue("Time", shapeNum, t)
  66.                 pLayer.EditCellValue("Wind", shapeNum, wind)
  67.                 pLayer.EditCellValue("Status", shapeNum, stat)

  68. pLayer.UpdateLegendScheme(LegendType.GraduatedColor, "Wind")
  69. for legend in pLayer.LegendScheme.LegendBreaks:
  70.         legend.MarkerType = MarkerType.Character
  71.         legend.FontName = "weather"
  72.         legend.CharIndex = 170
  73.         legend.Size = 12
  74.         
  75. aPolyline.Points = plist
  76. shapeNum = lLayer.ShapeNum
  77. if lLayer.EditInsertShape(aPolyline, shapeNum):
  78.         lLayer.EditCellValue("ID", shapeNum, id)
  79. lLayer.UpdateLegendScheme(LegendType.SingleSymbol, "ID")
  80. lLayer.LegendScheme.LegendBreaks[0].Size = 2

  81. mipy.MapDocument.ActiveMapFrame.AddLayer(lLayer)
  82. mipy.MapDocument.ActiveMapFrame.AddLayer(pLayer)   
  83. print 'Finished!'
复制代码
错误提示:
Create typhoon point layer...
Create typhoon polyline layer...
Read typhoon data file...
Traceback (most recent call last):
  File "<string>", line 48, in <module>
发现的我计算机里真没有weather这个字体!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-27 10:30:07 | 显示全部楼层
良辰 发表于 2012-9-27 10:13
错误提示:
Create typhoon point layer...
Create typhoon polyline layer...

安装MeteoInfo应该会注册上这个字体的。你可以在MeteoInfo的安装目录下找到WeatherSymbol.ttf这个字体文件,把它复制到Windows的字体目录中即可(通常是C:\Windows\Font),如果还有问题请在网上搜索如何在Windows中安装字体。

写MeteoInfo脚本需要了解Python的一些基本语法,这个论坛里也有Python板块,可以去看看,补充一些基本知识,循环体里的代码一定要正确缩进。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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