1. 程式人生 > >ArcGIS Engine核密度分析

ArcGIS Engine核密度分析

參照原理: 

使用模組:

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;

        }