反距离权重 (IDW) 插值使用一组采样点的线性权重组合来肯定像元值。权重是一种反距离函数。进行插值处理的表面应当是具备局部因变量的表面。此方法假定所映射的变量因受到与其采样位置间的距离的影响而减少。例如,为分析零售网点而对购电消费者的表面进行插值处理时,在较远位置购电影响较小,这是由于人们更倾向于在家附近购物。算法
根据给定的控制点对和控制点的位移矢量(方向和距离),实现图像每个像素点的位移。反距离加权插值的方法是经过获得每个像素点和选定控制点对的逼近关系,以及相对应的权重关系,求得像素点相对应的变化关系,逼近函数能够理解为对像素点p的影响程度,而权重函数则能够当作是对距离的权重,距离越远,权重越小。ide
PIE支持算法功能的执行,下面对反距离权重算法功能进行介绍。函数
第一步工具 |
算法参数设置测试 |
第二步spa |
算法执行code |
第三步视频 |
结果显示blog |
C#算法DLL教程 |
PIE.CommonAlgo.dll |
|
C#算法名称 |
PIE.CommonAlgo. InverseDistanceInterpolationAlgo |
|
参数结构体 |
InverseDistanceInterpolationInfo_Exchange_Info |
|
参数说明 |
||
m_dCellSize |
double |
像元大小 |
m_nHeight |
int |
输出栅格高度 |
m_nWidth |
int |
输出栅格宽度 |
m_pInputFeatDs |
IFeatureDataset |
输入要素数据集 |
m_pOutputRasterDs |
IRasterDataset |
输出栅格数据集 |
m_sOutRasterFilePath |
string |
输出栅格路径 |
m_sOutRasterType |
string |
输出栅格类型 |
m_ZFieldIndex |
int |
选择字段索引 |
数据路径 |
百度云盘地址下/PIE示例数据/矢量数据/Shape/省会城市.shp |
视频路径 |
百度云盘地址下/PIE视频教程/10.算法调用/实用工具/反距离权重算.avi |
示例代码 |
|
![]() 1 /// <summary> 2 /// 反距离权重测试 3 /// </summary> 4 private void Test_InverseDistanceInterpolation() 5 { 6 #region 1参数设置 7 string filePath = @"D:\\data\\China\\省会城市.shp"; 8 IFeatureDataset fDataset = DatasetFactory.OpenDataset(filePath, OpenMode.ReadOnly) as IFeatureDataset; 9 PIE.CommonAlgo.InverseDistanceInterpolationInfo_Exchange_Info info = new InverseDistanceInterpolationInfo_Exchange_Info(); 10 info.m_pInputFeatDs = fDataset; 11 info.m_sOutRasterType = "GTIFF"; 12 info.m_sOutRasterFilePath = @"D:\\temp\\省会城市反距离权重测试.tiff"; 13 info.m_ZFieldIndex = 1; 14 info.m_nWidth = 100; 15 info.m_dCellSize = fDataset.GetExtent().GetWidth() / info.m_nWidth; 16 info.m_dSearchMaxDis = 10; 17 info.m_nSearchPoints = 12; 18 #endregion 19 //二、算法执行 20 PIE.CommonAlgo.InverseDistanceInterpolationAlgo algo = new InverseDistanceInterpolationAlgo(); 21 algo.Params = info; 22 algo.Execute(); 23 //三、结果显示 24 ILayer layer = LayerFactory.CreateDefaultLayer(info.m_sOutRasterFilePath); 25 if (layer == null) 26 { 27 MessageBox.Show("执行失败"); 28 return; 29 } 30 m_HookHelper.FocusMap.AddLayer(layer); 31 m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 32 (fDataset as IDisposable).Dispose(); 33 fDataset = null; 34 } |