爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9640|回复: 11

利用Cressman插值算法 生成surfer能用的.grd文件

[复制链接]

新浪微博达人勋

发表于 2012-2-4 14:45:47 | 显示全部楼层 |阅读模式

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

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

x
求教版主,我想利用带经纬度的站点文件,通过Cressman插值算法 生成.grd文件。
11.jpg
现在我对 radlist这个参数不明白,另外如何导出一个插值完的.grd文件呢。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-2-4 18:04:49 | 显示全部楼层
已经解决,有空补上源码。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-2-4 18:29:44 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-2-4 23:13:12 | 显示全部楼层
我也期待,先在这谢过啦哈
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-2-9 12:24:13 | 显示全部楼层
/// <summary>
        /// 由csv/txt监测站点的经纬度数据插值生成Grid文件
        /// </summary>
        /// <param name="csvFile">csv文件(或者txt)文件,要求2,3,4列依次为经度,纬度,插值数据</param>
        private string CsvToGrid(string csvFile)
        {
            LonLatStationDataInfo aDataInfo = new LonLatStationDataInfo();
            aDataInfo.ReadDataInfo(csvFile);
            //Get station data
            StationData stationData = aDataInfo.GetStationData(0);
            //Interpolate
            //范围
            Extent dataExtent = new Extent(106, 115, 24, 33);
            GridDataPara aGDP = new GridDataPara();
            aGDP.dataExtent = dataExtent;
            //格点数量
            aGDP.xNum = 300;
            aGDP.yNum = 300;
            //迭代半径
            List<double> radlist = new List<double>();
            radlist.Add(30);
            GridInterpolation gridInterp = new GridInterpolation();
            gridInterp.GridDataParaV = aGDP;
            gridInterp.GridInterMethodV = GridInterMethod.Cressman;
            gridInterp.MinPointNum = 1;
            gridInterp.RadList = radlist;
            gridInterp.UnDefData = 0.001;

            double[] X = new double[1];
            double[] Y = new double[1];
            ContourDraw.CreateGridXY(gridInterp.GridDataParaV, ref X, ref Y);
            double[,] S = stationData.Data;

            GridData gridData = new GridData();

            //Cressman
            gridData = ContourDraw.InterpolateDiscreteData_Cressman(S, X, Y, gridInterp.UnDefData, gridInterp.RadList);
            
            //导出.grd文件
            string outputGridFile = System.IO.Path.ChangeExtension(csvFile, ".grd");
            gridData.SaveAsSurferASCIIFile(outputGridFile);
            return outputGridFile;
        }

评分

参与人数 2金钱 +19 贡献 +3 收起 理由
MeteoInfo + 9
mofangbao + 10 + 3

查看全部评分

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

新浪微博达人勋

发表于 2012-2-9 12:38:14 | 显示全部楼层
changsha2012 发表于 2012-2-9 12:24
///
        /// 由csv/txt监测站点的经纬度数据插值生成Grid文件
        ///

相当的绕,看来一些库函数做的还不够简洁
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-2-9 15:59:24 | 显示全部楼层
呵呵,感觉没有Surfer那么便捷~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-5 16:16:20 | 显示全部楼层
谢谢楼主分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-9-16 16:29:58 | 显示全部楼层
UnDefData 这个值一般设成什么啊?我想让降雨量为0的点也发挥影响。之前我把UnDefData这个设为0,好像0的站点没有发挥作用。用的IDW_Radius插值
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-12-22 10:11:24 | 显示全部楼层
surfer 插值有没有IDW方法啊?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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