AE根据离散点绘制等值线

AE绘制等值线的方法有两种:一种是通过TIN,一种是使用IDW等算法构造出Raster,再生成等值线图。

这里展示的是第二种方法。

/// <summary>
    /// 根据离散点生成等值线
    /// </summary>
    public class Dengzhixian
    {
        public void DrawDZX(AxMapControl mapControl, ILayer layer)
        {
            //定义等值线临时shapefile图层存放路径
            string ls_TempSavePath = @"C:\cem\dzx";

            if (!Directory.Exists(ls_TempSavePath))//如果不存在,则创建
                Directory.CreateDirectory(ls_TempSavePath);

            DirectoryInfo di = new DirectoryInfo(ls_TempSavePath);
            FileInfo[] fi = null;
            fi = di.GetFiles();
            if (fi.Length != 0)//如果目录不为空,则删除目录,然后重建
            {
                Directory.Delete(ls_TempSavePath, true);
                Directory.CreateDirectory(ls_TempSavePath);
            }

            //获取地图实例
            IMap pMap = mapControl.Map;

            //提供访问成员,控制一个GeoDataset插值
            IInterpolationOp3 pInterpolationOp = new RasterInterpolationOpClass();

            IFeatureLayer pFeatLayer = layer as IFeatureLayer;
            // Calls function to open the point dataset from disk

            IFeatureClass pFeatCla = pFeatLayer.FeatureClass;
           

            // Create the input point object
            //创建输入点对象
            IGeoDataset pInputDataset = pFeatLayer as IGeoDataset;
           
            // Define the search radius
            //定义搜索半径,这个搜索是个什么搜索,尚未知。
            IRasterRadius pRadius = new RasterRadiusClass();
            object Missing = Type.Missing;
     //这个数值是设置搜索范围,7表示离该点最近的7个点为搜索范围
            pRadius.SetVariable(7, ref Missing);

            //Create FeatureClassDescriptor using a value field
            //根据数值字段创建一个FeatureClassDescriptor
            IFeatureClassDescriptor pFCDescriptor = new FeatureClassDescriptorClass();
            pFCDescriptor.Create(pFeatLayer.FeatureClass, null, "降雨量");

            //Set cellsize for output raster in the environment
            //设置栅格图像的单位大小,如果是以米为单位,大概就是25米,如果以度为单位就是0.001度
            object cellSizeProvider = 0.06;
            IRasterAnalysisEnvironment pEnv = pInterpolationOp as IRasterAnalysisEnvironment;
            pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeProvider);

            //Perform the interpolation
            //差值计算
     //出自帮助文档:指数距离。控制周围的意义插值后的价值点。不到一个百分点的影响力从遥远的高功率的结果。它可以是任何实数大于零,但最合理的结果将利用获得的0.5值3。一个常用的功率为2
            IRaster pOutRaster = pInterpolationOp.IDW(pFCDescriptor as IGeoDataset, 2, pRadius, ref Missing) as IRaster;

            //Add output into ArcMap as a raster layer   
            //IRasterLayer pOutRasLayer = new RasterLayerClass();
            //pOutRasLayer.CreateFromRaster(pOutRaster);
            //pOutRasLayer.Name = "栅格";
            //pMap.AddLayer(pOutRasLayer);

            IGeoDataset pGeoDataSet = pOutRaster as IGeoDataset;
            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
            IWorkspace pShpWorkspace = pWorkspaceFactory.OpenFromFile(ls_TempSavePath, 0);
            ISurfaceOp2 pSurfaceOp2 = new RasterSurfaceOpClass();
            IRasterAnalysisEnvironment pRasterAnalysisEnvironment = pSurfaceOp2 as IRasterAnalysisEnvironment;

            pRasterAnalysisEnvironment.Reset();
            pRasterAnalysisEnvironment.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeProvider);
            pRasterAnalysisEnvironment.OutWorkspace = pShpWorkspace;
            double dInterval = 5; //间距
            IGeoDataset pOutputDataSet = pSurfaceOp2.Contour(pGeoDataSet, dInterval, ref Missing, ref Missing);


            IFeatureClass pFeatureClass = pOutputDataSet as IFeatureClass;
            IFeatureLayer pFeatureLayer = new FeatureLayerClass();
            pFeatureLayer.FeatureClass = pFeatureClass;

            IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;

            pGeoFeatureLayer.DisplayAnnotation = true;
            pGeoFeatureLayer.DisplayField = "Contour";
            pGeoFeatureLayer.Name = "等值线";

            pMap.AddLayer(pGeoFeatureLayer);
            mapControl.Refresh();
        }
    }

原文地址:https://www.cnblogs.com/yuxiuting/p/2263507.html