IDW插值分析

本文详细介绍了一种基于ArcGIS的逆距离权重(IDW)插值算法实现过程,包括特征层设置、变量定义、插值操作及结果渲染。通过具体代码示例,展示了如何将点数据转换为栅格数据,并应用IDW算法进行空间插值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 private void IDWpointToRaster()
        {
            IFeatureLayer pLayer = axMapControl1.get_Layer(0) as IFeatureLayer;
            IFeatureLayer pExtentLyr = axMapControl1.get_Layer(1) as IFeatureLayer;

            IFeatureClass pExtentClass = pExtentLyr.FeatureClass;
            IFeatureClass pFtClass = pLayer.FeatureClass;
            IRasterRadius pRsterRiadius = new RasterRadiusClass();
            int count = 100;
            //object MaxDistance = Type.Missing;
            object MaxDistance = 10;
            pRsterRiadius.SetVariable(count, ref MaxDistance);
            IFeatureClassDescriptor pDes = new FeatureClassDescriptorClass();
            pDes.Create(pFtClass, null, "AQI");
            IInterpolationOp2 pInterOP = new RasterInterpolationOpClass();
            IRasterAnalysisEnvironment pEnv = new RasterAnalysisClass();
            pEnv = pInterOP as IRasterAnalysisEnvironment;
            object cellsize = 0.014800000;
            pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellsize);

            IGeoDataset pGeo = pExtentClass as IGeoDataset;
            object extent = pGeo.Extent;
            object missing = Type.Missing;
            //pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvMaxOf, ref extent, ref missing);
            //IGeoDataset pGeo2 = pExtentClass as IGeoDataset;//选择插值范围
            //pEnv.Mask = pGeo2;
            IRaster pRaster;
            IRasterLayer pRasterLyr = new RasterLayerClass();
            IGeoDataset pGeoDataSet;
            object Barrier = Type.Missing;
            pGeoDataSet = pInterOP.IDW((IGeoDataset)pDes, 9, pRsterRiadius, ref Barrier);
            pRaster = pGeoDataSet as IRaster;
            pRasterLyr.CreateFromRaster(pRaster);
            //axMapControl1.ClearLayers();
            axMapControl1.AddLayer(pRasterLyr,2);
            //开始渲染
            IMap pMap = axMapControl1.Map;
            IRasterLayer pRasterlayer = pMap.get_Layer(2) as RasterLayer;
            IRaster pRaster1;
            pRaster1 = pRasterlayer.Raster;
            IRasterClassifyColorRampRenderer pClassRender = new RasterClassifyColorRampRendererClass();
            IRasterRenderer pRasterRender = pClassRender as IRasterRenderer;
            //获取直方图
            IRasterBandCollection IRBandCo = pRaster1 as IRasterBandCollection;
            IRasterBand pRasterband = IRBandCo.Item(0);
            if (pRasterband.Histogram == null)
            {
                pRasterband.ComputeStatsAndHist();//生成直方图
            }
            pRasterRender.Raster = pRaster1;
            pClassRender.ClassCount = 6;//10
            pRasterRender.Update();
            IEnumColors pEnumColor;
            pEnumColor = CreateColor();
            ISimpleFillSymbol pFillSymbol = new SimpleFillSymbolClass();
            string[] classfy ={"","","轻度污染","中度污染","严重污染","重度污染"};
            for (int i = 0; i < pClassRender.ClassCount; i++)
            {
                pFillSymbol.Color = pEnumColor .Next ();
                pClassRender.set_Symbol(i , pFillSymbol as ISymbol);
                pClassRender.set_Label(i, "污染等级 = " + classfy [i]);
            }
            pRasterRender.Update();
            pRasterLyr.Renderer = pClassRender as IRasterRenderer;
            //CaiJian(pGeoDataSet ,pGeo ,true);//裁剪方法
            axMapControl1.ActiveView.Refresh();
            axTOCControl1.Update();
        }

 

转载于:https://www.cnblogs.com/MansonsBlog/p/5738912.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值