ArcGIS Engine核密度分析
阿新 • • 發佈:2018-12-11
參照原理:
使用模組:
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;
}