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. 【转】性能测试报告模板 V1.0

    1. 测试项目概述与测试目的 1.1 项目概述  本部分主要是针对即将进行压力测试的对象(接口.模块.进程或系统)进行概要的说明,让人明白该测试对象的主要功能与作用及相关背景. 1.2 测试目标  简 ...

  2. 关于CSP-S2019的一篇游记

    怎么讲呢? Day1:7:00左右从家里出发,准备还是做得比较充分,早饭也记得吃了.路上闭目养神了一会儿,7:50左右到了大门附近,和大家再次把一些自认为还是比较重要的数据结构之类的再复习了一下.进去 ...

  3. Java中File类的方法详解

    File类也是Java中一个比较重要的类,通过他我们可以实现对文件的一系列操作,其内置了很多方法,下面我将按方法的功能分块,逐一讲解: 快速导航 构造方法 常用方法 创建目录 判断 `is...` t ...

  4. Kubernetes:容器资源需求与限制(约束)

    Blog:博客园 个人 A Container is guaranteed to have as much memory as it requests, but is not allowed to u ...

  5. MyBatis中执行器Executor框架

    与JDK提供的Executor框架类似,MyBatis也提供了一套Executor框架,具体如下图: 其为Mybatis提供与数据库交互的功能,是一个典型的装饰器模式的应用--对JDBC功能的封装,同 ...

  6. 在k8s中使用性能分析神器:arthas

    Arthas(阿尔萨斯)是阿里巴巴开源的性能分析神器. k8s中使用arthas的三种方式 [bak]https://www.cnblogs.com/uncleyong/p/15498842.html ...

  7. VUE学习笔记(李天禹老师版本)

    目录 VUE 一 脚手架文件结构 二 关于不同版本的Vue 三 vue.config.js配置文件 vue文件的基本结构 components 四 ref属性 TIPS 五 props配置项 Tips ...

  8. 过分简单,Tabluea仪表板与Smartbi自助仪表盘制作流程分享

    上一章节介绍了如何接入数据到系统里面,并且对数据进行处理.那本章节与大家分享Smartbi及Tabluea是如何对数据进行仪表盘制作. ​   这就是Tabluea的工作簿界面,这也是Tabluea可 ...

  9. 3款大数据bi工具,让企业数据分析更简单

    ​企业数据可视化的髙速发展趋势让互联网时代的数据分析及可视化拥有全新的面貌.企业针对信息内容的数据分析及可视化,的要求在日益严格,那么有哪些在企业数据分析方面做得好的大数据bi工具呢? 一.大数据bi ...

  10. 【C# 线程】 延迟初始化

    1. 简介 1.延迟初始化出现于.NET 4.0,主要用于提高性能,避免浪费计算,并减少程序内存要求.也可以称为,按需加载. 2.从net 4.0开始,C#开始支持延迟初始化,通过Lazy关键字,我们 ...