爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4206|回复: 2

使用MeteoInfoC.dll如何计算nc文件的累年平均值

[复制链接]

新浪微博达人勋

发表于 2013-1-21 15:42:46 | 显示全部楼层 |阅读模式

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

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

x
1.我使用的是版主开发的MeteoInfoC.dll在做二次开发。
2.希望得到的结果是nc文件中的累年各个月份的平均值。
如:
  1. NetCDFDataInfo aDataInfo = new NetCDFDataInfo();
  2.             string aFile = Application.StartupPath + "\\Sample\\Hadisst_obs_1949-2010_T106_BCC_AGCM2.1.nc";
  3.             aDataInfo.ReadDataInfo(aFile);
  4.             
  5.             GridData gridData = aDataInfo.GetGridData_LonLat(736, 3, 0);
复制代码

以上代码可以读取出一个时间点的格点数据。
如果按照这个方法读取数据并要实现各个月份的平均值我需要这么做:
  1. NetCDFDataInfo aDataInfo = new NetCDFDataInfo();
  2.             string aFile = Application.StartupPath + "\\Sample\\Hadisst_obs_1949-2010_T106_BCC_AGCM2.1.nc";
  3.             //读取nc文件
  4.             aDataInfo.ReadDataInfo(aFile);
  5.             var t = aDataInfo.times;
  6.             List<GridData>[] datas = new List<GridData>[12];
  7.             int sYear = aDataInfo.times[0].Year;
  8.             int eYear = aDataInfo.times[aDataInfo.times.Count - 1].Year;
  9.             int yIndex = 0;
  10.             //循环年份
  11.             for (int startYear = 1961; startYear < eYear; startYear++)
  12.             {
  13.                 yIndex = startYear - sYear;
  14.                 //将每年12个月的数据都摆在相应月份的数组里
  15.                 for (int mIndex = 0; mIndex < 12; mIndex++)
  16.                 {
  17.                     List<GridData> mList = datas[mIndex];
  18.                     if (mList == null)
  19.                     {
  20.                         mList = new List<GridData>();
  21.                     }
  22.                     if (yIndex * 12 + mIndex >= aDataInfo.times.Count) break;
  23.                     mList.Add(aDataInfo.GetGridData_LonLat(yIndex * 12 + mIndex, 3, 0));
  24.                     datas[mIndex] = mList;
  25.                 }
  26.             }
  27.             //对每个月份的数据计算平均值
  28.             for (int mIndex = 0; mIndex < 12; mIndex++)
  29.             {
  30.                 List<GridData> mList = datas[mIndex];
  31.                ///TODO 此处来对每个格点数据的平均值进行计算
  32.             }



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

新浪微博达人勋

发表于 2013-1-21 16:27:11 | 显示全部楼层
可以参考此帖:MeteoInfo脚本示例:格点数据平均
http://bbs.06climate.com/forum.p ... 604&fromuid=106
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-1-22 11:56:51 | 显示全部楼层
感谢版主指点,按照版主文中使用mdatas[mIndex] = DataMath.Average(mList, false);来计算格点数据的平均值,省了把每个格点循环的工作。方便好用!

  1. NetCDFDataInfo aDataInfo = new NetCDFDataInfo();
  2.             string aFile = Application.StartupPath + "\\Sample\\Hadisst_obs_1949-2010_T106_BCC_AGCM2.1.nc";
  3.             //读取nc文件
  4.             aDataInfo.ReadDataInfo(aFile);

  5.             var t = aDataInfo.times;

  6.             List<GridData>[] datas = new List<GridData>[12];
  7.             int sYear = aDataInfo.times[0].Year;
  8.             int eYear = aDataInfo.times[aDataInfo.times.Count - 1].Year;
  9.             int yIndex = 0;
  10.             GridData gData = new GridData();
  11.             //循环年份
  12.             for (int startYear = 1961; startYear < eYear; startYear++)
  13.             {
  14.                 yIndex = startYear - sYear;

  15.                 //将每年12个月的数据都摆在相应月份的数组里
  16.                 for (int mIndex = 0; mIndex < 12; mIndex++)
  17.                 {
  18.                     List<GridData> mList = datas[mIndex];
  19.                   
  20.                     if (mList == null)
  21.                     {
  22.                         mList = new List<GridData>();
  23.                     }                    

  24.                     mList.Add(aDataInfo.GetGridData_LonLat(yIndex * 12 + mIndex, 3, 0));

  25.                     datas[mIndex] = mList;
  26.                 }
  27.             }

  28.             GridData[] mdatas = new GridData[12];

  29.             //对每个月份的数据计算平均值
  30.             for (int mIndex = 0; mIndex < 12; mIndex++)
  31.             {
  32.                 List<GridData> mList = datas[mIndex];

  33.                 mdatas[mIndex] = DataMath.Average(mList, false);
  34.             }
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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