爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7643|回复: 8

等值面IDW_Radius插值问题,降雨量为0的站点影响力

[复制链接]

新浪微博达人勋

发表于 2014-9-17 17:15:08 | 显示全部楼层 |阅读模式

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

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

x
王老师、各位好:
          现在使用MeteoInfo做降雨量点的插值,目前有几个问题。

          1、使用IDW_Radius做插值的时候,我们大概有50个点,如果有几个相邻的点降雨量为0,而其他离得较远的点降雨量在10-100,使用IDW_Radius插值,将Radius设为2,生成的grid中,几个降雨量为0的点之间的像素值还是会大于0。这个我用arcgis中的IDW工具生成对比了一下。arcgis中是可以将几个都是0的点之间插值成0的。不知道其他插值方式能不能做到。如下图:

与arcgis中IDW插值比较

与arcgis中IDW插值比较





        2、插值半径设置为1,在插值边缘出现插值混乱的问题。由于我这边的点都在插值范围的左边,如果想使点的影响范围没有那么高,将插值半径Radius设置小一点,这样在半径的边缘就会出现插值混乱。本来没有点的地方,插值的时候在半径之外应该是UndefData值-9999,但是在半径和可以插值的交界处出现了离最近点越远插值越高的问题。如下图:
插值边缘错误.jpg




        3、还有看到这个帖子说Cressman插值,http://bbs.06climate.com/forum.p ... page%3D1&page=1

我插值出来效果是这样的,是不是自己设置有问题啊?只有点上有插值。其他地方没有,而且没有平滑。
CressMan插值问题.jpg


附自己插值代码:Cressman插值方法:如果有需要,可以上传一下雨量点的数据

            double unDef = 0.001;
            #region//Interpolate插值相关的
            GridDataSetting aGDP = new GridDataSetting();
            aGDP.DataExtent = GetExtent(clipLayer);//clipLayer是行政区图层

            aGDP.XNum = 100;//格点点数80
            aGDP.YNum = 100;//格点点数50
            InterpolationSetting gridInterp = new InterpolationSetting();
            gridInterp.GridDataSet = aGDP;

            gridInterp.InterpolationMethod = InterpolationMethods.Cressman;
            //插值半径
            gridInterp.Radius = 2;
            gridInterp.MinPointNum = 1;

            List<double> radlist = new List<double>();
            radlist.Add(30);

            double[] X = new double[1];
            double[] Y = new double[1];
            ContourDraw.CreateGridXY(gridInterp.GridDataSet, ref X, ref Y);
            double[,] S = stationData.Data;
            S = ContourDraw.FilterDiscreteData_Radius(S, gridInterp.Radius,
                gridInterp.GridDataSet.DataExtent, unDef);

            GridData gridData = ContourDraw.InterpolateDiscreteData_Cressman(S,
                X, Y, unDef, gridInterp.RadList);

            #region//设置颜色
            int totalcolor = 6;
            List<Color> legendColor = new List<System.Drawing.Color>();
            legendColor.Add(Color.FromArgb(100, 0, 0, 255));
            legendColor.Add(Color.FromArgb(100, 201, 255, 177));
            legendColor.Add(Color.FromArgb(100, 132, 251, 99));
            legendColor.Add(Color.FromArgb(100, 206, 231, 253));
            legendColor.Add(Color.FromArgb(100, 124, 188, 250));
            legendColor.Add(Color.FromArgb(100, 244, 161, 203));

            List<PointF> colorbreaks = new List<PointF>();
            colorbreaks.Add(new PointF(0, 1));
            colorbreaks.Add(new PointF(1, 10));
            colorbreaks.Add(new PointF(10, 25));
            colorbreaks.Add(new PointF(25, 50));
            colorbreaks.Add(new PointF(50, 100));
            colorbreaks.Add(new PointF(100, 9999));
            #endregion

            VectorLayer aLayer = new VectorLayer(ShapeTypes.Polygon);
            aLayer = DrawMeteoData.CreateShadedLayer(gridData, aLS, "Rain", "Rain");


IDW_Radius插值方法:

            double unDef = 0.001;
            #region//Interpolate插值相关的
            GridDataSetting aGDP = new GridDataSetting();
            aGDP.DataExtent = GetExtent(clipLayer);

            aGDP.XNum = 100;
            aGDP.YNum = 100;
            InterpolationSetting gridInterp = new InterpolationSetting();
            gridInterp.GridDataSet = aGDP;

            gridInterp.InterpolationMethod = InterpolationMethods.IDW_Radius;
            //插值半径
            gridInterp.Radius = 2;
            gridInterp.MinPointNum = 1;

            double[] X = new double[1];
            double[] Y = new double[1];
            ContourDraw.CreateGridXY(gridInterp.GridDataSet, ref X, ref Y);
            double[,] S = stationData.Data;
            S = ContourDraw.FilterDiscreteData_Radius(S, gridInterp.Radius,
                gridInterp.GridDataSet.DataExtent, unDef);
            GridData gridData = ContourDraw.InterpolateDiscreteData_Radius(S,
                X, Y, gridInterp.MinPointNum, gridInterp.Radius, unDef);



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

新浪微博达人勋

发表于 2014-9-18 00:01:08 | 显示全部楼层
建议你先用MeteoInfo软件做插值,参数调整得较合理后再把参数用到代码中。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-9-18 09:18:56 | 显示全部楼层
请问这个Meteo Data对话框从哪里出来的?怎么在软件中没找到啊?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-9-18 09:35:58 | 显示全部楼层
llsshh1985 发表于 2014-9-18 09:18
请问这个Meteo Data对话框从哪里出来的?怎么在软件中没找到啊?

在工具栏上找
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-9-18 13:13:29 | 显示全部楼层
这个半径小于插值extent的时候出现的问题能有办法解决么?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-13 11:46:15 | 显示全部楼层
你好 cressman这个问题解决了吗?是什么原因导致的?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-21 06:47:50 来自手机 | 显示全部楼层
貌似可以解决我的一个问题,今天试试
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-20 23:07:59 | 显示全部楼层
学习学习!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-3-7 10:02:29 | 显示全部楼层
请问IWD_Radius设置时有什么参考依据吗,是不是站点少的要设置的大一点,让插值均匀呢?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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