(1)ISurfaceOp.Contour 根据DEM生成等高线图层:

private void button1_Click(object sender, EventArgs e)
        {
            //得到Raster
            ILayer tLayer=this.axMapControl1.get_Layer(0);
            IRasterLayer tRasterLayer=(IRasterLayer)tLayer;

IFeatureClass tFeatureClass=null;
            IGeoDataset tGeodataset=null;
            //使用接口 参数(Raster,等高线间距,基值)
            ISurfaceOp tSurfaceop = new RasterSurfaceOpClass();
            object obj = 0;
            tGeodataset=tSurfaceop.Contour((IGeoDataset)tRasterLayer.Raster, 10, 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();
                }
            }
        }

(2) ISurfaceOp.ContourAsPolyline 根据已知点,返回穿过改点的等高线和改点的高程

private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
        {
            //通过鼠标获取点击的点坐标
            IPoint tPoint = new PointClass();
            tPoint.X = e.mapX;
            tPoint.Y = e.mapY;
            //得到Raster
            ILayer tLayer = this.axMapControl1.get_Layer(0);
            IRasterLayer tRasterLayer = (IRasterLayer)tLayer;

ISurfaceOp tSurfaceop = new RasterSurfaceOpClass();

//定义返回的线
            IPolyline tPolygline = new PolylineClass();
            //定义返回的高程点
            double tEve = 0;
            tSurfaceop.ContourAsPolyline((IGeoDataset)tRasterLayer.Raster, tPoint, out tPolygline, out tEve);//tSurfaceop.Contour((IGeoDataset)tRasterLayer.Raster, 10, ref obj);

//把生成的等高线画到Map上
            ILineElement tLineElement = new LineElementClass();
            IElement tElement = (IElement)tLineElement;
            tElement.Geometry = tPolygline;
            this.axMapControl1.ActiveView.GraphicsContainer.AddElement(tElement, 0);
            //刷新Map
            this.axMapControl1.Refresh();
        }

作者: cglnet
本文版权归cglNet和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
 

(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();
        }

作者: cglnet
本文版权归cglNet和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
 
from:http://www.cnblogs.com/cglNet/archive/2011/03/03/1970061.html
http://www.cnblogs.com/cglNet/archive/2011/03/03/1970100.html

ISurfaceOp 接口生成等高线的更多相关文章

  1. arcgis中DEM如何生成等高线

    地形图指比例尺大于1∶100万的着重表示地形的普通地图(根据经纬度进行分幅,常用有1:100万,1:50万,1比25万,1:15万,1:10万,1:5万等等).由于制图的区域范围比较小,因此能比较精确 ...

  2. Delphi 提示在Delphi的IDE中,按Ctrl+Shift+G键可以为一个接口生成一个新的GUID。

    对于Object Pascal语言来说,最近一段时间最有意义的改进就是从Delphi3开始支持接口(interface),接口定义了能够与一个对象进行交互操作的一组过程和函数.对一个接口进行定义包含两 ...

  3. Java WebService接口生成和调用 图文详解>【转】【待调整】

    webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间 ...

  4. Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring

    Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring 非原创[只为记录],原博文地址:https://www.cnblogs.com/ ...

  5. (转)Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring

    Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring Mybatis在与Spring集成的时候可以配置MapperFactoryBea ...

  6. mybatis如何根据mapper接口生成其实现类

    SpringBoot集成mybatis mybatis的statement的解析与加载 mybatis如何根据mapper接口生成其实现类 mybatis的mapper返回map结果集 mybatis ...

  7. 如何自动在Eclipse里对指定类或接口生成要覆盖的方法?

    我们经常遇到对对指定类或接口生成要覆盖的方法,但是我们不了解这些类和接口,完全手写不能保证完全正确,那么是否可以准确知道指定类或接口要被覆盖的方法,自动生成这些代码呢?是的,完全可以,按照下面步骤操作 ...

  8. Mybaits 源码解析 (十一)----- 设计模式精妙使用:静态代理和动态代理结合使用:@MapperScan将Mapper接口生成代理注入到Spring

    上一篇文章我们讲了SqlSessionFactoryBean,通过这个FactoryBean创建SqlSessionFactory并注册进Spring容器,这篇文章我们就讲剩下的部分,通过Mapper ...

  9. Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring - 大新博客 - 推酷 - 360安全浏览器 7.1

    Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring - 大新博客 时间 2014-02-11 21:08:00  博客园-所有随笔区 ...

随机推荐

  1. Android - 动态调整ListView高度

    布局中,如果设计ListView的高度为包裹内容,那么ListView的高度是随着它的子条目的数量的变化而改变的, 这就可能会导致ListView下面的一些控件的位置也会随着ListView的高度的变 ...

  2. 【LeetCode】Binary Tree Preorder Traversal

    Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its nodes' valu ...

  3. [翻译]lpeg入门教程

    原文地址:http://lua-users.org/wiki/LpegTutorial 简单匹配 LPeg是一个用于文本匹配的有力表达方式,比Lua原生的字符串匹配和标准正则表达式更优异.但是,就像其 ...

  4. H5版俄罗斯方块(1)---需求分析和目标创新

    前言: 俄罗斯方块和五子棋一样, 规则简单, 上手容易. 几乎每个开发者, 都会在其青春年华时, 签下"xx到此一游". 犹记得大一老师在布置大程作业的时候提过: "什么 ...

  5. H5版俄罗斯方块(5)---需求演进和产品迭代

    前言: 产品的形态是不断迭代的, 从粗糙到精致, 从简易到立体. 有了最初的技术积累和时间思考后, 终于明确了该游戏的方向. 我想说的是: 技术不是重点, 产品/用户体验才是核心议题. 结合朋友的游戏 ...

  6. POJ 1511 Invitation Cards (spfa的邻接表)

    Invitation Cards Time Limit : 16000/8000ms (Java/Other)   Memory Limit : 524288/262144K (Java/Other) ...

  7. Latex转换之PDF

    近期一直在做如何使用latex将模板转换成PDF.现在写下在项目中如何实现. 1.首先你先进官网下载http://www.miktex.org/download.我用的是如下图所示. 在下载好的Mik ...

  8. ppDelegate的相关介绍

    //  AppDelegate的相关介绍//  IOS笔记 //@interface AppDelegate : UIResponder <UIApplicationDelegate>// ...

  9. django 过滤器 、日期格式化参数

    http://blog.csdn.net/xyp84/article/details/7945094 django1.4 html页面从数据库中读出DateTimeField字段时,显示的时间格式和数 ...

  10. Fragment使用findFragmentById返回null

    @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn1: replaceFragment(new Anot ...