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. play的action链(一个action跳转到另一个action,类似于重定向)

    在play中没有Servlet API forward 的等价物.每一个HTTP request只能调用一个action.如果我们需要调用另一个,必须通过重定向,让浏览器访问另一个URL来访问它.这样 ...

  2. 手势仿QQ侧滑---秀清

    // // SlideViewController.h // qqcehua // // Created by 张秀清 on 15/5/25. // Copyright (c) 2015年 张秀清. ...

  3. Docker的数据管理、网络通信和dockerfile

    Docker的数据管理.网络通信和dockerfile 目录 Docker的数据管理.网络通信和dockerfile 一.Docker的数据管理 1. 数据卷 1.1 数据卷定义 1.2 数据卷配置 ...

  4. Docker创建私有镜像仓库

    Docker官方提供了一个工具docker-registry,可以借助这个工具构建私有镜像仓库: 1.拉取registry镜像 # docker pull registry//可以使用 docker ...

  5. 适用于小白:VSCode搭建Vue项目,最详细的搭建步骤哦

    在vscode上搭建一个vue项目---初学总结. 1.假设Vscode.nodejs等已经安装好了. 2.全局安装vue-cli,vue-cli可以帮助我们快速构建Vue项目. 安装命令: npm ...

  6. MyBatis动态SQL和缓存

    1. 什么是动态SQL 静态SQL:静态SQL语句在程序运行前SQL语句必须是确定的,SQL语句中涉及的表的字段名必须是存在的,静态SQL的编译是在程序运行前的. 动态SQL:动态SQL语句是在程序运 ...

  7. 基于单XCVU9P+双DSP C6678的双FMC接口 100G光纤传输加速计算卡

    一.板卡概述 板卡包括一片Xilinx FPGA  XCVU9P,两片 TI 多核DSP TMS320C6678及其控制管理芯片CFPGA.设计芯片满足工业级要求. FPGA VU9P 需要外接4路Q ...

  8. Solution -「CEOI 2017」「洛谷 P4654」Mousetrap

    \(\mathscr{Description}\)   Link.   在一个含 \(n\) 个结点的树形迷宫中,迷宫管理者菈米莉丝和一只老鼠博弈.老鼠初始时在结点 \(y\),有且仅有结点 \(x\ ...

  9. Solution -「LOCAL」Burning Flowers

      灼之花好评,条条生日快乐(假装现在 8.15)! \(\mathcal{Description}\)   给定一棵以 \(1\) 为根的树,第 \(i\) 个结点有颜色 \(c_i\) 和光亮值 ...

  10. Hive之同比环比的计算

    Hive系列文章 Hive表的基本操作 Hive中的集合数据类型 Hive动态分区详解 hive中orc格式表的数据导入 Java通过jdbc连接hive 通过HiveServer2访问Hive Sp ...