1.算法功能简介
反距离权重 (IDW) 插值使用一组采样点的线性权重组合来确定像元值。权重是一种反距离函数。进行插值处理的表面应当是具有局部因变量的表面。此方法假定所映射的变量因受到与其采样位置间的距离的影响而减小。例如,为分析零售网点而对购电消费者的表面进行插值处理时,在较远位置购电影响较小,这是因为人们更倾向于在家附近购物。
根据给定的控制点对和控制点的位移矢量(方向和距离),实现图像每一个像素点的位移。反距离加权插值的方法是通过得到每一个像素点和选定控制点对的逼近关系,以及相对应的权重关系,求得像素点相对应的变化关系,逼近函数可以理解为对像素点p的影响程度,而权重函数则可以看成是对距离的权重,距离越远,权重越小。
PIE支持算法功能的执行,下面对反距离权重算法功能进行介绍。
2.算法功能实现说明
2.1. 实现步骤
第一步 |
算法参数设置 |
第二步 |
算法执行 |
第三步 |
结果显示 |
2.2. 算法参数
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 |
选择字段索引 |
2.3. 示例代码
数据路径 |
百度云盘地址下/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 //2、算法执行 20 PIE.CommonAlgo.InverseDistanceInterpolationAlgo algo = new InverseDistanceInterpolationAlgo(); 21 algo.Params = info; 22 algo.Execute(); 23 //3、结果显示 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 } |
2.4. 示例截图