爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6276|回复: 13

MeteoInfo脚本示例:改变格点数据分辨率

[复制链接]

新浪微博达人勋

发表于 2013-1-23 20:24:42 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2013-1-23 20:29 编辑

有时候原格点数据的分辨率不符合要求,需要改变网格大小,MeteoInfo库中的GridData类有个Regrid方法可以用来做这项工作。首先需要建立一个目标格点(GridData),可以用GridData的构造函数public GridData(double xStart, double xDelt, int xNum, double yStart, double yDelt, int yNum);然后用原GridData的方法:public void Regrid(GridData gridData),里面的参数是新建的GridData。从下面的示例程序中可以看得更明白,将原来4.5 × 4.5度的格点数据插值到2.5 × 2.5度,用的是双线性插值。

  1. #--------------------------------------------------------   # Author: Yaqiang Wang                                          
  2. # Date: 2013-1-23                                               
  3. # Purpose: Regrid grid data - Bilinear interpolation  
  4. # Note: Sample                                                   
  5. #-----------------------------------------------------------
  6. import clr
  7. from System.Collections.Generic import *
  8. clr.AddReference("MeteoInfoC.dll")
  9. from MeteoInfoC import *
  10. from MeteoInfoC.Data import *
  11. from MeteoInfoC.Data.MeteoData import *

  12. #---- Set directories
  13. dataDir = "D:\\Temp\\grads\\"

  14. #---- Average grid data
  15. mydata = MeteoDataInfo()
  16. mydata.OpenGrADSData(dataDir + "model.ctl")
  17. tnum = mydata.GetTimeNumber()
  18. datagrid = mydata.GetGridData("PS")
  19. newgrid = GridData(0, 2.5, 146, -90, 2.5, 73)
  20. datagrid.Regrid(newgrid)
  21. newgrid.UNDEF = datagrid.UNDEF

  22. mipy.MeteoDataset.SetDrawType("grid_point")
  23. alayer = mipy.MeteoDataset.Display(newgrid)
  24. alayer.LayerName = "Regrid"
  25. mipy.MapDocument.ActiveMapFrame.UpdateLayerNode(alayer)

  26. print 'Finished!'



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

新浪微博达人勋

发表于 2013-1-31 18:05:59 | 显示全部楼层
好久不来了,先顶一下。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-16 10:56:44 | 显示全部楼层
好久不来了,先顶一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-7-1 22:45:47 | 显示全部楼层
明天试一哈
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-30 20:06:53 | 显示全部楼层
MeteoInfo的功能很强大,但就如其他工具一样,真正的掌握还得学习脚本的编辑才行!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-1-21 09:29:46 | 显示全部楼层
请问,我试做了您给出的sample,出现了以下问题。运行系统是win,安装了frame,也把最新的dll文件等复制进了文件夹。并且我看论坛中有同学上传的图,错误提示是中文,我已经调了语言,为什么我的错误提示还是英文呢?谢谢老师。

                               
登录/注册后可看大图

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

新浪微博达人勋

 楼主| 发表于 2014-1-21 11:11:06 | 显示全部楼层
陈Kat 发表于 2014-1-21 09:29
请问,我试做了您给出的sample,出现了以下问题。运行系统是win,安装了frame,也把最新的dll文件等复制进了 ...

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

新浪微博达人勋

发表于 2014-3-22 21:34:06 | 显示全部楼层
王老师,最近摸索meteoinfo的时候有这么几个问题,比如说这个某变量随时间变化图,
1,这个时间轴的选择设置是灰的,不能选择自己想要的时间区间,这个是需要编译脚本实现吗?
2,能不能画出几个不同变量在同一时间段的变化以作比较
3,这个高度选择是类似eta层的计算方式吗?我看数值是从0到1的
4,经度和纬度显示的数据是什么意思,是指某一个点还是什么,能不能显示出某一区域内某个变量随时间的变化?
5,这个是关于画等值线图的,画某一区域等值线图的时候,能不能显示某一时间区域内的浓度或者大小分布,我看了您的帖子说要用脚本编译实现,请问能不能给几个简单的脚本例子让我们这些新手模仿学习一下
暂时能想到的就是这些了。我觉得以上这些都很简单和基础,可能都可以用脚本编译实现,但是没有想grads学习手册那样那么多的例子参考学习,在编译脚本方面不知道如何下手。还请王老师出几个简单的例子可以让我们模仿练习,谢谢
QQ图片20140322211847.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-5-2 23:03:39 | 显示全部楼层
王老师,您好。最近在处理模式数据,正好看到您的帖子进行插值,程序运行正确。但是对于结果有两个疑惑:
1. 程序运行后,在对应目录下面并没有生成新的文件,是不是程序是在原始的dat文件上更改,然后只需要把ctl更改即可画图和导出数据?
2. 就是数据的时间长度是t=1000的,但是得到的结果画图时发现,只能画时间长度小于300的,大于某个数值后,得到的值全是0,请教王老师,这是什么原因导致的。期待您的回复。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-5-2 23:33:31 | 显示全部楼层
王老师,看您的程序中有个语句:
tnum = mydata.GetTimeNumber()
如果要对全部时间段的数据进行插值,是不是用tnum做循环进行?但如果需要循环的话,为什么直接运行程序已经能得到某一部分时间的插值数据,而其他时间的没有?例如,数据是从1901-2010年的,运行程序后,只有1901-1930的数据,后面的数据都为0?请王老师指导。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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