参照原理:
使用模块:
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.GeoAnalyst;
using ESRI.ArcGIS.SpatialAnalyst;
主要函数:
IDensityOp.KernelDensity()
参数:
- IGeodataset(必选):表示输入要素的数据集,可以是指定计数字段的数据集描述,也可以是数据集。
- ref object radiusDiastance(可选):表示搜索范围
- ref object scalefactor(可选):表示缩放因子
注意:如果要不选择可选要素时,必须使用Type.Missing补空位。
实现步骤:
- 通过IRasterAnalysisEnviroment接口设置输出大小和处理范围等
- 调用IFeatureClassDescriptor接口的Create方法设置输入要素及计数字段(即Population)
- 设置搜索半径
- 调用IDensityOp接口的KernelDensity方法,返回核密度分析结果(IGeoDataset类型)
- 显示核密度分析结果
- 将IGeoDataset转为IRaster
- 将IRaster转为IRasterLayer
- 将IRasterLayer转为ILayer
- 添加到显示
代码实现:
调用IFeatureClassDescriptor接口的Create方法设置输入要素及计数字段(即Population)
IFeatureClassDescriptor pIFCD = new FeatureClassDescriptorClass(); //GeoAnalyst模块
pIFCD.Create(pFeatureClass, null, pFiledName); //获得字段
通过IRasterAnalysisEnviroment接口设置输出大小和处理范围等
IDensityOp pDensityOp = new RasterDensityOpClass(); //SpatialAnalyst模块
//设置环境
IRasterAnalysisEnvironment pEnv = pDensityOp as IRasterAnalysisEnvironment; //将栅格分析转为环境
//设置参数
object object_cellSize = (object)pCellSize; //按照参数要求,将双精度数据转为object
pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue,ref object_cellSize); //设置环境参数,栅格大小
设置核密度分析参数
object object_radio_dis = (object)pRadius; //将双精度转为object
object Missing = Type.Missing; //反射默认字段,补空位时使用
调用IDensityOp接口的KernelDensity方法,返回核密度分析结果
//核密度分析方法生成栅格数据
IRaster pRaster = pDensityOp.KernelDensity(pIFCD as IGeoDataset, ref object_radio_dis, ref Missing) as IRaster; //补参数空位时使用
显示核密度分析结果
IRasterLayer pRasterLaye = new RasterLayerClass();
pRasterLaye.CreateFromRaster(pRaster);
ILayer pLayer = pRasterLaye as ILayer;
全部代码(方法):
private ILayer KernelDensityOp(IFeatureClass pFeatureClass, string pFiledName, double pCellSize,double pRadius)
{
//获得要素的属性值字段
//转为可遍历字段的栅格统计类型
IFeatureClassDescriptor pIFCD = new FeatureClassDescriptorClass(); //GeoAnalyst模块
pIFCD.Create(pFeatureClass, null, pFiledName); //获得字段
IDensityOp pDensityOp = new RasterDensityOpClass(); //SpatialAnalyst模块
//设置环境
IRasterAnalysisEnvironment pEnv = pDensityOp as IRasterAnalysisEnvironment; //将栅格分析转为环境
//设置参数
object object_cellSize = (object)pCellSize; //按照参数要求,将双精度数据转为object
pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue,ref object_cellSize); //设置环境参数
object object_radio_dis = (object)pRadius; //将双精度转为object
object Missing = Type.Missing; //反射默认字段,补空位时使用
//核密度分析方法生成栅格数据
IRaster pRaster = pDensityOp.KernelDensity(pIFCD as IGeoDataset, ref object_radio_dis, ref Missing) as IRaster; //补参数空位时使用
IRasterLayer pRasterLaye = new RasterLayerClass();
pRasterLaye.CreateFromRaster(pRaster);
ILayer pLayer = pRasterLaye as ILayer;
return pLayer;
}