反距離權重 (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 } |