转自原文 以Graphicslayer为管理组来管理Element.

前言

在AE开发过程中,我们经常使用Element(元素)。它的出现让地图与用户之间的交互增加了不少的效果。在地图上,可以通过各种element元素来表现我们需要的效果.例如高亮显示中用到element比较频繁.往往需要往地图中添加一个element来显示效果。当在地图上element越来越多时,而且还是通过不同的功能添加进来的,那么,这么多而复杂的element 就需要用一种管理方法来进行有序管理,让element有他的归属。如何管理呢? 
其一: 使用IGroupElement.将同一类或功能相似的element都添加到IGroupElement中.以Group的形式来管理, 删除时,只需删除IGroupElement即可.这个管理的好处在于当需要操作多个相近的element时,不需要逐一地对每一个element进行操作。例如,删除一批有查询得到并用element高亮显示房屋集,只需删除它所在的Group组就可以了。

本文在这里探讨另一种管理方法-以Graphicslayer为管理组来管理Element

在ArcGIS 中,Graphicslayer其实也是管理element的容器. 在ArcMap中,所有的地图图元(graphic element) 都是被保存在graphicslayer中.为了管理所有的graphics element,地图(map)有一个CompositeGraphicslayer对象.这CompositeGraphicslayer继承自ICompositeGraphicslayer接口并管理着一系列graphicslayer.ICompositeGraphicslayer提供一些对graphicslayer的基本操作,例如创建,查找,删除.此外,还有Count和Layer 属性 .CompositeGraphicsLayer 不仅仅管理着一系列的graphicslayer,它本身也是一个graphicslayer.这就意味着CompositeGraphicsLayer 自己本身拥有一个存储graphics的容器(Container).它提供的graphicslayer 叫"Basic Graphics Layer".这个"Basic Graphics Layer"是默认的graphicslayer,不能被删除.

通常,我们在开发过程中,对element的添加/删除用的最多的是就是IGraphicsContaner.通过该接口的AddElement方法将用户需要在地图表达的符号(Element)展示在地图之上.这里用IGraphicsContaner. AddElement方法添加的elment也是存储在一个默认的Graphicslayer中,这个Graphicslayer就是BaseGraphicslayer,这里的BaseGraphicslayer是一个ICompositeGraphicslayer的一个实例.因此,既然BaseGraphicslayer实现了ICompositeGraphicslayer接口,在管理地图中的element时,也可以以层的方式来管理--通过QI到ICompositeGraphicslayer接口,为我们的业务i添加我们所需要的graphicslayer到BaseGraphicslayer中.例如,为某一业务中需要用到的element单独创建一个Graphicslayer,此Graphicslayer专门用于管理该业务中使用到的element. 这样,不同业务中使用到的element相互独立,不受影响. 当需要删除某一业务中的element,只需将存储这些element的graphicslayer删除即可,不会影响到其他业务中的element.

1.如何添加子GraphicsLayer:

/// </summary>
/// <param name="subgraphicsLayername">图层名称唯一</param>
/// <returns></returns>
public IGraphicsLayer AddSubGraphicsLayer(IMap map, string subgraphicsLayername)
{ICompositeGraphicsLayer pCompositeGLayer = map.BasicGraphicsLayer as ICompositeGraphicsLayer;IGraphicsLayer pGLayer = null;try{//查找是否已存在,如果不存在,跳转到catch内容.//如果查到不到,说明集合中并没有指定名称的graphicslayerpGLayer = pCompositeGLayer.FindLayer(subgraphicsLayername);}catch{//若不存在,则添加一个指定名称的GraphicsLayerpGLayer = pCompositeGLayer.AddLayer(subgraphicsLayername, null);}return pGLayer;
}

通过以上代码得到的是一个IGraphicslayer 对象, 开发人员可以使用IGraphicsContainer g = graphicslayer as IGraphicsContainer;获得IGraphicsContainer 对象,如果要添加element,则使用我们常用的IGraphicsContainer.AddElement()方法. 此时,该方法将element添加到了IGraphicslayer 对象中.

2.若要清除元素,则可以用如下代码:

try
{IGraphicsContainer g = graphicslayer as IGraphicsContainer;//删除此graphicslayer中的所有元素
    g.DeleteAllElements();//刷新activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);//从ICompositeGraphicsLayer中移除,也就是从IMap.BaseGraphicslayer中移除ICompositeGraphicsLayer pCompositeGLayer = m_Env.m_cAxMapEx.Map.BasicGraphicsLayer as ICompositeGraphicsLayer;pCompositeGLayer.DeleteLayer((graphicslayer as ILayer).Name);}
catch
{ }

代码中"g.DeleteAllElements()"方法只会删除指定Graphicslayer中的所有要素,如果我们为其他业务的element同样创建了属于他们自己的graphicslayer, 删除本业务中的element是不会影响到其他业务的element,这就实现了对element的有效控制.

总结一下:管理element有很多方法,仁者见仁,这里只是探讨了一种方法,个人觉得还是比较好用的,贴出来跟大家交流一下. 呵呵!

try

{

IGraphicsContainer g = graphicslayer as IGraphicsContainer;

//删除此graphicslayer中的所有元素

g.DeleteAllElements();

//刷新

activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

//从ICompositeGraphicsLayer中移除,也就是从IMap.BaseGraphicslayer中移除

ICompositeGraphicsLayer pCompositeGLayer = m_Env.m_cAxMapEx.Map.BasicGraphicsLayer as ICompositeGraphicsLayer;

pCompositeGLayer.DeleteLayer((graphicslayer as ILayer).Name);

}

catch

{ }

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6262447.html,如需转载请自行联系原作者

以Graphicslayer为管理组来管理Element.相关推荐

  1. 计算机 管理策略,有关管理组策略管理模板的建议 (.adm) 文件

    有关管理组策略管理模板的建议 (.adm) 文件 12/04/2020 本文内容 本文介绍了 ADM 文件如何工作.可用于管理其操作的策略设置,以及如何处理常见的 ADM 文件管理方案的建议. 适用于 ...

  2. Azure基础:什么是Azure 订阅和管理组(16)

    什么是Azure 订阅 要使用 Azure,需要 Azure 订阅. 订阅提供针对 Azure 产品和服务的经过身份验证和授权的访问. 订阅支持预配资源. Azure 订阅是链接到 Azure 帐户的 ...

  3. 网络管理员&MCSE2003之12:第7章 使用组策略管理用户环境(下)

    一. 我的文档重定向及GPO冲突处理:"财务部"及子单位"资产管理"的我的文档重定向B位置,域中其他所有用户的我的文档重定向A位置 1. 本例实现的GPO链接示 ...

  4. oracle asm clsecho,ASM磁盘组一点管理

    [Oracle@ www.linuxidc.com ~]$ export ORACLE_SID=+ASM2 [oracle@ www.linuxidc.com ~]$ asmcmd Connected ...

  5. 组策略管理——软件限制策略(5)

    组策略管理--软件限制策略(5) 标签:安全 系统 管理 软件限制策略 组策略 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://m ...

  6. 运维基础--Linux用户和组的管理

    用户和组的管理 系统中,创建用户和群组的目的,就是对系统资源进行权限的统一分配管理.好比说,在一个公司内的资源,不同级别的在职员工对资源的利用权限需要进行统一分配: 如何避免权限分配后的滥用呢? 用户 ...

  7. 管理组、路由组、用户邮箱,数据库他们之间的关系和区别

    管理组是一种逻辑概念,可以基于位置.部门或功能来创建管理组.例如,在不同国家/地区具有分支机构的全球性公司可以创建几个管理组,以委派功能性任务.在纯模式组织中,可以创建仅包含服务器的单个管理组,并使用 ...

  8. linux实验报告用户管理,Linux实验报告-用命令实现用户和组的管理

    河南师范大学综合性 设计性实验项目简介河南师范大学综合性 设计性实验项目简介 学院名称 公章 学院名称 公章 软件学院软件学院 学年学年 20142014 20152015 第第 1 1 学期学期 填 ...

  9. 组策略管理——软件限制策略(4)

    编写软件限制规则 在前面几篇文章中讲了软件限制规则的基本概念,现在就来学习如何编写自定义软件限制策略. 编写规则应遵循的原则 首先,需要大家注意的是,软件限制策略应本着方便.安全.实用的原则来编写.限 ...

  10. AGPM(高级组策略管理)3.0之二操作

    续AGPM(高级组策略管理 )3.0之一部署. 1.设置默认AGPM服务器 打开组策略管理控制台(GPMC.MSC),打开默认的Default Domain Policy进行编辑. 打开用户配置.策略 ...

最新文章

  1. 数据库技巧——MySQL十大优化技巧
  2. php动物书总结01-06
  3. 零基础学oracle pdf_零基础学动漫插画详细步骤大全
  4. 插值法补齐缺失数据_关于数据清洗的常见方式
  5. Windows命令行参数的知识(一)
  6. CodePush 管理工具 App Center Cli 的常用命令行
  7. [蓝桥杯][历届试题]国王的烦恼(反向+并查集)
  8. java垃圾回收机制优化_JVM性能优化--Java的垃圾回收机制
  9. 一、策略模式(Strategy Pattern)
  10. aspnet 后台调用前台js函数
  11. 《快乐编程大本营》java语言训练班 1课:第一个java程序:你好,范冰冰;
  12. 其他手机安装鸿蒙系统,不是华为手机,也能用上鸿蒙系统
  13. 图像处理农业应用sci_SCI/SSCI期刊征稿信息3月8日更新
  14. 2020非常全的接口测试面试题及参考答案-软件测试工程师没有碰到算我输!
  15. Windows10电脑进行拨号连接时,无法共享热点?如何解决?多次尝试后,终于解决了。
  16. 支付宝-支付API(电脑网站支付)
  17. 【Educational CF Round 86 (Rated for Div. 2) / 1342 A + B】- A. Road To Zero + B. Binary Perio - 水题
  18. 腰椎间盘突出引起的马尾综合征
  19. Go语言Web框架:Beego框架快速入门
  20. Linux下脚本对拍

热门文章

  1. win10下搭建QTP测试环境
  2. HTML 标签的 target 属性
  3. JAVA的反射机制原理
  4. hdu 4314 Save the dwarfs
  5. childNodes属性 和 nodeType属性
  6. Java多线程和并发(一),进程与线程的区别
  7. error:Microsoft Visual C++ 14.0 is required.
  8. Operation,Tensor, Variable
  9. 《众妙之门 JavaScript与jQuery技术精粹》 - 读书笔记总结[无章节版][1-60]
  10. 主动FTP vs. 被动FTP 权威解释