现在的位置: 首页 > 综合 > 正文

ISurfaceOp 接口生成等高线(二)

2012年09月08日 ⁄ 综合 ⁄ 共 2742字 ⁄ 字号 评论关闭

(3)ISurfaceOp.ContourList 根据一系列高程点生成等高线图层:  

       private void button1_Click(object sender, EventArgs e)
        {

            //得到Raster
            ILayer tLayer = this.axMapControl1.get_Layer(0);
            IRasterLayer tRasterLayer = (IRasterLayer)tLayer;
            //定义高程点数组
            double[] tDouble = new double[] { 100, 120, 150, 200 };

            IFeatureClass tFeatureClass = null;
            IGeoDataset tGeodataset = null;
            //使用接口
            ISurfaceOp tSurfaceop = new RasterSurfaceOpClass();
            object obj = tDouble;

            tGeodataset = tSurfaceop.ContourList((IGeoDataset)tRasterLayer.Raster, ref obj);
            //判断是否生成等高线层,如果生成,加载到Map中
            if (tGeodataset != null)
            {
                tFeatureClass = (IFeatureClass)tGeodataset;
                if (tFeatureClass != null)
                {
                    IFeatureLayer tFeatureLayer = new FeatureLayerClass();
                    tFeatureLayer.FeatureClass = tFeatureClass;
                    this.axMapControl1.AddLayer((ILayer)tFeatureLayer);
                    this.axMapControl1.Refresh();
                }
            }
        }

(4)ISurfaceOp.ContoursAsPolylines根据一系列点生成多根等高线

        //定义点坐标集合
        IPointCollection _PointCollect = new MultipointClass();
        private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
        {
            //通过鼠标获取点击的点坐标集合
            IPoint tPoint = new PointClass();
            tPoint.X = e.mapX;
            tPoint.Y = e.mapY;
            object obj = Type.Missing;
            _PointCollect.AddPoint(tPoint, ref obj, ref obj);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //得到Raster
            ILayer tLayer = this.axMapControl1.get_Layer(0);
            IRasterLayer tRasterLayer = (IRasterLayer)tLayer;
           
            ISurfaceOp tSurfaceop = new RasterSurfaceOpClass();
            //定义返回的线集合
            IGeometryCollection tGeometryCollection;
            //定义返回的高程点集合
            IPointCollection tEveColl;
            tSurfaceop.ContoursAsPolylines((IGeoDataset)tRasterLayer.Raster, _PointCollect, out tGeometryCollection, out tEveColl);//tSurfaceop.Contour((IGeoDataset)tRasterLayer.Raster, 10, ref obj);
            if (tGeometryCollection!=null && tGeometryCollection.GeometryCount > 0)
            {
                //把生成的等高线画到Map上
                for (int i = 0; i < tGeometryCollection.GeometryCount; i++)
                {
                    IGeometry tGeometry = tGeometryCollection.get_Geometry(i);
                    ILineElement tLineElement = new LineElementClass();
                    IElement tElement = (IElement)tLineElement;
                    tElement.Geometry = tGeometry;
                    this.axMapControl1.ActiveView.GraphicsContainer.AddElement(tElement, 0);
                }
            }
            //刷新Map
            this.axMapControl1.Refresh();
        }

抱歉!评论已关闭.