1、添加栅格影像

基本思路:声明栅格工作空间→创建栅格数据集对象→创建金字塔→声明图层对象→刷新地图控件

        private void AddBaseMap(string filepath)

        {

            IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory();

            IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(filepath), 0);

            IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace;

            IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(System.IO.Path.GetFileName(filepath));

            // 创建金字塔

            IRasterPyramid pRasterPyramid = pRasterDataset as IRasterPyramid;

            if (!pRasterPyramid.Present)

            {

                pRasterPyramid.Create();

            }

            // 栅格图层

            IRasterLayer pRasterLayer = new RasterLayer();

            pRasterLayer.CreateFromDataset(pRasterDataset);

            ILayer pLayer = pRasterLayer as ILayer;

            // 刷新地图

            axMapControl1.AddLayer(pLayer,axMapControl1.LayerCount);

            axMapControl1.Refresh();

        }

2、图层顺序调整(记得绑定TOC的OnMouseUp事件)

基本思路:判断左键→声明参数→遍历得到该图层→改变图层顺序→刷新地图

private void axTOCControl1_OnMouseUp(object sender, ITOCControlEvents_OnMouseUpEvent e)

        {

            try

            {

                if (e.button == 1 && pMoveLayer != null && pMoveLayerPoint.Y != e.y)

                {

                    esriTOCControlItem pItem = esriTOCControlItem.esriTOCControlItemNone;

                    IBasicMap pBasicMap = null;

                    object unk = null;

                    object data = null;

                    ILayer pLayer = null;

                    axTOCControl1.HitTest(e.x, e.y, ref pItem, ref pBasicMap, ref pLayer, ref unk, ref data);

                    IMap pMap = axMapControl1.ActiveView.FocusMap;

                    if (pItem == esriTOCControlItem.esriTOCControlItemLayer || pLayer != null)

                    {

                        if (pMoveLayer != pLayer)

                        {

                            ILayer pTempLayer;

                            for (int i = 0; i < pMap.LayerCount; i++)

                            {

                                pTempLayer = pMap.get_Layer(i);

                                if (pTempLayer == pLayer)

                                {

                                    toIndex = i;

                                }

                            }

                        }

                    }

                    else if (pItem == esriTOCControlItem.esriTOCControlItemMap)

                    {

                        toIndex = 0;

                    }

                    else if (pItem == esriTOCControlItem.esriTOCControlItemNone)

                    {

                        toIndex = pMap.LayerCount - 1;

                    }

                    pMap.MoveLayer(pMoveLayer, toIndex);

                    axMapControl1.ActiveView.Refresh();

                    axTOCControl1.Update();

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

3、图层上右键

基本思路:判断右键→判断图层→显示控件

这里需要用到一个控件contextMenuStrip。其实右键还有另外的方法,具体可百度,不赘述,有任何问题欢迎随时交流。

private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)

        {

            ESRI.ArcGIS.Controls.esriTOCControlItem Item = ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemNone;

            IBasicMap pBasicMap = null;

            ILayer pLayer = null;

            object other = null;

            object index = null;

            axTOCControl1.HitTest(e.x, e.y, ref Item, ref pBasicMap, ref pLayer, ref other, ref index);          //实现赋值

            //图层右键

            if (e.button == 2)

            {

                pTocFeatureLayer = pLayer as IFeatureLayer;

                m_Layer = pLayer;

                if (Item == esriTOCControlItem.esriTOCControlItemLayer)           //点击的是图层的话,就显示右键菜单

                {

                    contextMenuStrip1.Show(axTOCControl1, new System.Drawing.Point(e.x, e.y));

                    //显示右键菜单,并定义其相对控件的位置,正好在鼠标出显示

                }

            }

        }

也是想出一个系列吧,在自己刚开始学习AE开发的时候苦于查找书籍代码不可用或者各博客描述不够详尽到我一个小白可以读懂,然后踩了各种各样的坑(虽然踩过的坑忘记了很多),其间很多代码的产生都是始于Copy,然后结合自己的查询资料和思考所得,还是希望自己能帮助到各位正在学习或使用的各位同仁吧。

扫码关注公众号

AE功能扩展一的更多相关文章

  1. WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...

  2. C++类功能扩展预留五招

    第一招虚函数 通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下: class base { public: virtual ~base(){} virtual void fun() { ...

  3. spring源码深度解析-2功能扩展

    容器功能的扩展ApplicationContext用于扩展BeanFactory中现有的功能.究竟多出了哪些功能,进一步探索.写法上:BeanFactory bf = new XmlBeanFacto ...

  4. vs.net 2013 Saffolding功能扩展

    vs.net 2013 Saffolding功能扩展 Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个&l ...

  5. Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展

    Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...

  6. 【转】WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文 ...

  7. ApplicationContext(四)BeanFactory 功能扩展

    ApplicationContext(四)BeanFactory 功能扩展 上节我们提到容器刷新的第二步初始化 BeanFactory 工厂并解析配制文件,但此时 BeanFactory 的功能还很简 ...

  8. ReportViewer工具栏功能扩展[手动设置打印/导出按钮]

    ReportViewer在IE11后打印按钮就存在兼容问题,火狐,谷歌也存在打印按钮显示的兼容性问题,本资料就是解决ReportViewer打印按钮显示的问题, 通过自己写脚本添加到DOM里面让所有浏 ...

  9. VS功能扩展--扩展介绍

    使用Eclipse的朋友都知道Eclipse是一个完全可扩展的IDE,那么在windows程序开发时,我们常使用的IDE(Visual studio)是否具有功能的扩展性呢?毫无疑问,回答是肯定的.我 ...

随机推荐

  1. 认识BufferedReader的readLine、ready,以及InputStream的available

    最近,同学做实验的时候,在读取服务器端返回的时候,使用了BufferedReader类的readLine,他是这么写的,while(reader.ready()) {//执行读取操作,即readLin ...

  2. VUE项目部署到线上生产环境,Loading chunk xxx failed

    项目部署到生产环境,路由点击无效,报错 Loading chunk chunk-xxxxx failed.(missing xxxx) 加载失败,错误的路径. 话不多说,直接贴代码: vue.conf ...

  3. 范数||x||(norm)笔记

    1. 范数的含义和定义 范数是具有"长度"概念的函数.在线性代数.泛函分析及相关领域,是一个函数,它为向量空间内的所有向量赋予非零的正的长度或大小.另一方面,半范数可以为非零的向量 ...

  4. 关于单调性优化DP算法的理解

    Part1-二分栈优化DP 引入 二分栈主要用来优化满足决策单调性的DP转移式. 即我们设\(P[i]\)为\(i\)的决策点位置,那么\(P[i]\)满足单调递增的性质的DP. 由于在这种DP中,满 ...

  5. 浅谈java代理模式

    讲解java代理模式 目录 讲解java代理模式 何谓代理模式 静态代理 动态代理 JDK动态代理 CGLIB动态代理 何谓代理模式 代理模式,即Proxy Pattern,23种java常用设计模式 ...

  6. MASA Framework - DDD设计(1)

    目录 MASA Framework - 整体设计思路 MASA Framework - EventBus设计 MASA Framework - MASA Framework - DDD设计(1) DD ...

  7. 在VMware上安装Linux虚拟机

    1.新建虚拟机 2.选择典型安装 3.点击稍后安装操作系统 4.选择类型和版本 5.选择一个英文路径 6. 7.调整硬件 8. 9. 10.选择第一项 11.选择中文 12.选择最小安装 13. 14 ...

  8. 《PHP程序员面试笔试宝典》——如何进行自我介绍?

    本文摘自<PHP程序员面试笔试宝典> PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 自我介绍是面试中至关重要的一个步骤,很多面试官对求职者提出的第一 ...

  9. 前端提交数据到node的N种方式

    写在前面 本篇介绍了前端提交数据给node的几种处理方式,从最基本的get和post请求,到图片上传,再到分块上传,由浅入深. GET请求 经典的get提交数据,参数通过URL传递给node,node ...

  10. 图解AI数学基础 | 概率与统计

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/83 本文地址:http://www.showmeai.tech/article-det ...