AE功能扩展一
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功能扩展一的更多相关文章
- WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展
一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...
- C++类功能扩展预留五招
第一招虚函数 通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下: class base { public: virtual ~base(){} virtual void fun() { ...
- spring源码深度解析-2功能扩展
容器功能的扩展ApplicationContext用于扩展BeanFactory中现有的功能.究竟多出了哪些功能,进一步探索.写法上:BeanFactory bf = new XmlBeanFacto ...
- vs.net 2013 Saffolding功能扩展
vs.net 2013 Saffolding功能扩展 Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个&l ...
- Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展
Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...
- 【转】WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展
一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文 ...
- ApplicationContext(四)BeanFactory 功能扩展
ApplicationContext(四)BeanFactory 功能扩展 上节我们提到容器刷新的第二步初始化 BeanFactory 工厂并解析配制文件,但此时 BeanFactory 的功能还很简 ...
- ReportViewer工具栏功能扩展[手动设置打印/导出按钮]
ReportViewer在IE11后打印按钮就存在兼容问题,火狐,谷歌也存在打印按钮显示的兼容性问题,本资料就是解决ReportViewer打印按钮显示的问题, 通过自己写脚本添加到DOM里面让所有浏 ...
- VS功能扩展--扩展介绍
使用Eclipse的朋友都知道Eclipse是一个完全可扩展的IDE,那么在windows程序开发时,我们常使用的IDE(Visual studio)是否具有功能的扩展性呢?毫无疑问,回答是肯定的.我 ...
随机推荐
- WebLogic11g- 集群化
其实网上关于weblogic集群的资料非常多[大部分都是从创建新的domain开始,我这篇先介绍怎么样把原本普通的domain改造为集群环境],如果觉得不够,可以啃weblogic的官方文档.下面给几 ...
- iOS中处理时间的类
登录|注册 sakulafly的专栏 目录视图 摘要视图 订阅 Markdown博文大赛清新开启 天天爱答题 一大波C币袭来 中国云计算大会演讲议题公布 大 ...
- MinIO简介和java Api的使用
本文出自jvm123.com-java技术分享站:http://jvm123.com/2020/02/minio-jian-jie-java-api.html MinIO是一个对象存储服务,非常轻量, ...
- 《PHP程序员面试笔试宝典》——如何回答非技术性问题?
如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 评价一个人的能力,除了专业能力,还有一些非专业能力,如智力.沟通能力和反应能力等,所以在IT企业招聘过程的笔试.面试环节 ...
- Solution -「多校联训」I Love Random
\(\mathcal{Description}\) 给定排列 \(\{p_n\}\),可以在其上进行若干次操作,每次选取 \([l,r]\),把其中所有元素变为原区间最小值,求能够得到的所有不同序 ...
- 利用 pip download 打包软件来提供离线安装
文章目录 1.通过 pip download 下载安装包 2.利用 pip install --no-index 离线安装 1.通过 pip download 下载安装包 linux-oz6w:~ # ...
- Spring Boot数据访问之多数据源配置及数据源动态切换
如果一个数据库数据量过大,考虑到分库分表和读写分离需要动态的切换到相应的数据库进行相关操作,这样就会有多个数据源.对于一个数据源的配置在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的 ...
- logstash根据日志关键词报警
logstash是可以根据日志级别,日志类型进行报警通知的. 这次精简教程,排除filebeat自带的#include_lines: ['^ERR', '^WARN']写法,直接使用logstash报 ...
- MybatisPlus字段自动填充配置
实体类 @ApiModelProperty(value = "创建时间") @TableField(fill = FieldFill.INSERT) private Date gm ...
- Centos 6 DNS 配置 解决 Unknown host
测试服务器Maven 打包时遇到了如下的错误 maven.aliyun.com: Name or service not known: Unknown host maven.aliyun.com: N ...