爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8054|回复: 15

MeteoInfo脚本示例:格点数据提取、扩展、合并

[复制链接]

新浪微博达人勋

发表于 2012-10-27 17:06:11 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2012-10-27 17:21 编辑

这个脚本程序示例了格点数据提取(Extract,从一个格点数据中提取更小区域的格点数据)、扩展(Extand,将格点数据扩大到更大的空间范围,扩大 部分用缺测值)、合并(Union,两个格点数据合并为一个格点数据,合并后的格点数据以第二个格点数据为准,但如果第二个格点数据中某些格点为缺测值则以一个格点数据为准,此操作要求两个格点数据的空间范围和格点数一致)。 需要更新为最新文件(见置顶帖子)。

提取数据:GridData.Extract(int sXIdx, int sYIdx, int xNum, int yNum) ,前两个参数是x、y方向起始位置,后两个参数是提取的x、y方向的格点数

扩展数据:GridData.Extend(int leftNum, int rightNum, int topNum, int bottomNum) ,四个参数分别是左右上下扩展的格点数。

以model.ctl数据为例,获取全球气压格点数据,用Extract提取左右两个子格点数据,将左右两个格点数据分布扩展(Extand)到全球范围,再将扩展后的两个格点数据合并(Union)成全球数据。

提取的左边格点数据:
Image00933.png

提取的右边格点数据:
Image00934.png

合并后的全球数据:
Image00935.png

脚本代码如下:
  1. #--------------------------------------------------------        
  2. # Author: Yaqiang Wang                                          
  3. # Date: 2012-10-26                                                
  4. # Purpose: Extract, extent and union grid data  
  5. # Note: Sample                                                   
  6. #-----------------------------------------------------------
  7. import clr
  8. from System.Collections.Generic import *
  9. clr.AddReference("MeteoInfoC.dll")
  10. from MeteoInfoC import *
  11. from MeteoInfoC.Data import *
  12. from MeteoInfoC.Data.MeteoData import *

  13. #---- Set directories
  14. BaseDir = "C:\\Program Files (x86)\\MeteoInfo\"
  15. DataDir = BaseDir + "Sample\\GrADS\"

  16. #---- Extract grid data
  17. mydata = MeteoDataInfo()
  18. mydata.OpenGrADSData(DataDir + "model.ctl")
  19. tnum = mydata.GetTimeNumber()
  20. datagrid = mydata.GetGridData("PS")
  21. leftgrid = datagrid.Extract(0, 0, 36, 46)
  22. rightgrid = datagrid.Extract(35, 0, 37, 46)        
  23. mipy.MeteoDataset.SetDrawType("shaded")
  24. leftlayer = mipy.MeteoDataset.Display(leftgrid)
  25. leftlayer.LayerName = "Left_Grid"
  26. rightlayer = mipy.MeteoDataset.Display(rightgrid)
  27. rightlayer.LayerName = "Right_Grid"
  28. mipy.MapDocument.ActiveMapFrame.UpdateLayerNode(leftlayer)
  29. mipy.MapDocument.ActiveMapFrame.UpdateLayerNode(rightlayer)
  30. mipy.MapDocument.ActiveMapFrame.MoveLayer(leftlayer, 0)
  31. mipy.MapDocument.ActiveMapFrame.MoveLayer(rightlayer, 0)

  32. #----Extend and Union grid data
  33. leftgrid.Extend(0, 36, 0, 0)
  34. rightgrid.Extend(35, 0, 0, 0)
  35. leftgrid.Union(rightgrid)
  36. unionlayer = mipy.MeteoDataset.Display(leftgrid)
  37. unionlayer.LayerName = "Union_Grid"
  38. mipy.MapDocument.ActiveMapFrame.UpdateLayerNode(unionlayer)
  39. mipy.MapDocument.ActiveMapFrame.MoveLayer(unionlayer, 0)

  40. print 'Finished!'
复制代码




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

新浪微博达人勋

发表于 2012-10-27 20:04:29 | 显示全部楼层
抢个沙发,老师辛苦了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-28 13:39:34 | 显示全部楼层
辛苦啦王老师~
前段时间读micaps4类数据,由于格点数较多,用Shaded绘等值线图速度太慢,您建议使用Raster,速度是快了,但是图像不是很清晰,有了提取格点方法,应该能够解决Shaded绘等值线图速度太慢的问题吧?但是我简单试了下:
MICAPS4DataInfo aDataInfo = new MICAPS4DataInfo();
aDataInfo.ReadDataInfo(openFileDialog.FileName);
GridData rainTemp = aDataInfo.GetGridData();
GridData rain = rainTemp.Extract(0, 0, 400, 400);//提取格点
调试结果显示rain的值为Null,这样使用对吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-28 18:44:43 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-28 21:26:47 | 显示全部楼层
MeteoInfo 发表于 2012-10-28 18:44
使用应该没问题。

看到您的帖子一激动,没仔细看,原来二次开发中的Extract和脚本文件稍有不一样,GridData Extract(double sX, double eX, double sY, double eY),其中参数sX、SY是x、y方向起始位置,参数eX、eY是x、y方向结束位置。。。现在搞定了,不再畏惧Shaded绘等值线图了!
还有个小问题,在使用maskout剪裁边界外数据时,若使用Raster时,剪裁可以,但是使用Shaded时,剪裁失效?请问王老师这是为啥呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-28 23:32:53 | 显示全部楼层
本帖最后由 MeteoInfo 于 2012-10-29 10:37 编辑
wbriver 发表于 2012-10-28 21:26
看到您的帖子一激动,没仔细看,原来二次开发中的Extract和脚本文件稍有不一样,GridData Extract(double ...

脚本用的最新的库文件,Extract方法有几种重载方式,你用的库文件可能不是最新的。

MapLayer有个IsMaskout属性,设为true即可。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-29 19:12:27 | 显示全部楼层
王老师,这个有没有对站点数据的提取呢?比如指定经纬度范围,然后进行站点数据提取?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-29 22:35:31 | 显示全部楼层
♂雨已~○ 发表于 2012-10-29 19:12
王老师,这个有没有对站点数据的提取呢?比如指定经纬度范围,然后进行站点数据提取?

有。StationData的Extract(double sX, double eX, double sY, double eY)方法。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-29 22:57:45 | 显示全部楼层
MeteoInfo 发表于 2012-10-29 22:35
有。StationData的Extract(double sX, double eX, double sY, double eY)方法。

这个参数里面的sX ,eX 都是经纬度哇?还是就是按照点来做的啊?希望都是经纬度的呢,有这个功能函数没?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-29 23:06:14 | 显示全部楼层
♂雨已~○ 发表于 2012-10-29 22:57
这个参数里面的sX ,eX 都是经纬度哇?还是就是按照点来做的啊?希望都是经纬度的呢,有这个功能函数没?

是经纬度,你试试就知道了。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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