AE开发实现GP工具IDW

时间:2022-01-05 12:29:22

IDW——空间插值

  AE开发实现GP工具IDW

  IDW(Inverse Distance Weighted)是一种常用而简便的空间插值方法,它以插值点与样本点间的距离为权重进行加权平均,离插值点越近的样本点赋予的权重越大。 设平面上分布一系列离散点,已知其坐标和值为XiYi, Zi i =12n)通过距离加权值求z 点值,则z值见右上图公式。  IDW通过对邻近区域的每个采样点值平均运算获得内插单元。这一方法要求离散点均匀分布,并且密度程度足以满足在分析中反映局部表面变化。  IDW在ArcGIS里具体实现过程:  1)单击Spatial Analyst 下拉箭头,单击Interpolate to Raster,在一级菜单中单击Inverse Distance Weighted命令,打开IDW对话框。  2)单击Input points下拉箭头,选择参加内插计算的点数据集。  3)单击Z value field下拉箭头选择参加内插计算的字段名称。  4)在Power文本框中输入的IDW幂值。  5)单击Search radius type下拉箭头,选择搜索半径类型。  6)用Use barriers polylines选择河流、湖泊、水库等中断线文件,限制插值计算。  7)用Output cell size控制输出结果的栅格大小。  8)用Output raster文本框输入结果文件名称。 

 

不直接调用GP

IRasterLayer rl = new RasterLayerClass();

double cellsize = 0.001; ////设置越小效率越低

IGeoDataset fdataset
= pFeaclsSHP as IGeoDataset; ////IDW的范围图层,图层图形外面的不处理

IDistanceOp2 distance
= new RasterDistanceOpClass();

IInterpolationOp pInterpolationOp
= new RasterInterpolationOpClass();

IRasterAnalysisEnvironment envir
= pInterpolationOp as IRasterAnalysisEnvironment;

object extent = (object)fdataset.Extent;

object missing = System.Reflection.Missing.Value;

envir.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue,
ref extent, ref missing);



object cell = (System.Object)cellsize;

envir.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue,
ref cell);

envir.Mask
= fdataset;

object barrier = System.Reflection.Missing.Value;



IFeatureClassDescriptor pFCDescriptor;

pFCDescriptor
= new FeatureClassDescriptorClass();

pFCDescriptor.Create(feacls,
null, "Z"); ////feacls是点图层,Z是点图层的Z字段



IGeoDataset rasDataset
= pInterpolationOp.IDW(pFCDescriptor as IGeoDataset, 2, pRadius, ref barrier);

rl.CreateFromRaster(rasDataset
as IRaster);

 

 

调用GP

发现调用GP时无法实现按照指定的图形形状裁剪,并且需要设置一个临时路径,此路径不能已存在,否则不处理,所以不推荐。

IRasterLayer rl = new RasterLayerClass();



string idwpath = Application.StartupPath + "\\IDW";



ESRI.ArcGIS.Geoprocessor.Geoprocessor gp
= new ESRI.ArcGIS.Geoprocessor.Geoprocessor();

ESRI.ArcGIS.SpatialAnalystTools.Idw pIDW
= new ESRI.ArcGIS.SpatialAnalystTools.Idw(pFeaLyr, "Z", idwpath);

pIDW.in_barrier_polyline_features
= pFeaLyrShp;

pIDW.power
= 2;



pIDW.cell_size
= cellsize;

IGeoProcessorResult results
= (IGeoProcessorResult)gp.Execute(pIDW, null);



rl.CreateFromFilePath(idwpath);