以Graphicslayer为管理组来管理Element.

转自原文 以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内容.
        //如果查到不到,说明集合中并没有指定名称的graphicslayer
        pGLayer = pCompositeGLayer.FindLayer(subgraphicsLayername);
    }
    catch
    {
        //若不存在,则添加一个指定名称的GraphicsLayer
        pGLayer = 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

{ }

时间: 2024-08-07 04:35:30

以Graphicslayer为管理组来管理Element.的相关文章

WSFC2016 VM顺序组与管理组

在我们管理虚拟化场景或群集应用场景时,可能经常会经常碰见一个需求,即依赖性顺序,开发人员可能会需要保证一系列联合工作虚拟机或群集应用的启动顺序,确保最底层需要的资源启动后,再按照顺序陆续启动其它资源. 针对于依赖性启动的需求,如果是在没有群集的单机Hyper-V场景下,我们可以通过设置虚拟机的自动启动属性来解决此问题,例如,一套sharepoint环境,有DC,DB,AP,WEB,我们可以依次设置各虚拟机自动启动的延迟时间,0,30,50,80.这样做了之后,在单机情况下,当宿主机重新启动,可以

【Linux系统】用户与组账号管理实例与讲解

用户账号与组账号管理 下面是我对用户账号与组账号之间的一些整理与实例配置. 在Linux系统中用户和组账号分为以下几点: 超级用户:root用户是Linux默认的超级用户具有相当于windows系统中的administrator的作用. 普通用户:普通用户的账号需要由root或其它管理员用户创建. 程序用户:用于添加Linux系统中的一些特定的低权限的用户.(这些用户只用于维持或某个程序的正常运行) 组账号 基本组(私有组):每一个账号都有自己的属于自己的组. 附加组(公共组):与其他用户在同一

Linux命令之账户和组的管理

Linux系统对账号和组的管理是通过ID号来实现的,用户ID称为UID,组ID称为GID.其中,UID为0,代表超级管理员,即root账号.组分为基本组和附加组,一个用户在同一时刻只能有一个基本组,但可以加入多个附加组.系统默认在创建用户时会同时创建同名的组,并且为基本组. 一 创建用户和组: 1 useradd:创建新账号 选项:-c    账号描述信息,一般为全称 -d    设置家目录,默认为/home/用户名 -e    设置账户的失效日期,格式为2017-10-30 -g    设置账

如何批量部署Office 2013 (五)——使用组策略管理Office

本节内容将为您介绍如何使用组策略管理Office,方法如下: 1.登录到DC中,找到C:\Windows\SYSVOL\domain\Policies目录,建立一个名为PolicyDefinitions的文件夹 2.将Office 2013的组策略模板拷贝到这个文件夹下 3.打开AD用户和计算机,将目标计算机和用户移动到Office这个OU中 4.按下Windows+R打开运行窗口输入gpmc.msc回车 5.右键点击Office 2013这个组策略对象,点击"编辑" 6.展开&quo

Linux系统下用户与组的管理

Linux系统下用户与组的管理 一.用户及组基本概述 Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配. 1.uid(用户身份标识) (1)root用户 uid为0 (2)普通用户:1--65535 系统用户 系统已经已经存在专门用来对系统服务或者系统资源进行管理的 1--499(CentOS 6.X) 1--999 (CentOS 7.X) 登录用户(平时专门做系统管理的用户) 500+ (CentOS 6.X) 1000+ (CeentOS 7.X) 2.gid(用户组身份

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

用户和组的管理 系统中,创建用户和群组的目的,就是对系统资源进行权限的统一分配管理.好比说,在一个公司内的资源,不同级别的在职员工对资源的利用权限需要进行统一分配: 如何避免权限分配后的滥用呢? 用户进行权限使用的时候,都必须遵守Cisco公司开发的AAA认证体系,即: Authentication:认证,核实身份是否正确 Authorization: 授权,对已经核实身份的用户进行资源分配 Accounting: 审计,监管资源被使用的情况: 进行资源认证的必要性最主要来源于计算机系统资源的有

用户和组的管理

用户和组的管理方法: 在Linux中,有两种账户:用户帐户和组账户. 因为Linux是一个多用户,多任务共同协作的系统,当有多个任务或多个用户同时运作时,要保证他们能够在系统中正常地运行,就得涉及到权限的分配问题了.在Linux中,是按AAA来分配权限的.所谓的AAA就是: Cisco的AAA的认证体系: Authentication:认证   核实身份是否正确 Authorization:授权    对已经核实的用户进行资源分配 Accounting:  审计      监督资源被使用的情况

bash特性续写以及用户和组的管理

本周继续学习了bash的相关知识,bash的变量需要注意书写规范和强弱变量以及bash变量的种类等,然后开始学习用户和组的管理,重点学习了组管理命令,用户管理的命令,用户认证相关的命令,组认证相关的命令,其他命令这些知识点,需要我们课后学习记忆. bash 特性之变量 程序=指令+数据 数据:文件  变量 变量:一段连续的内存空间cell=8bit  (32bit字长支持4GB内存)为这一段内存空间取名 称之为变量名:在这段内存空间中所存储的数据称为变量值 赋值操作: = 赋值操作符 赋值方法

Linux初学之——用户和组的管理

Linux系统可以支持多个用户使用不同的终端设备登录系统,用户又按不同的属性划分成不同的组,为了系统的安全性需要对不同用户设置不同的权限,所以涉及到对用户和组的管理. 用户和组的管理 用户账户 组账户 权限的分配 Cisco开发的AAA认证体系 Authentication: 认证,核实身份是否正确 Authorization: 授权,对已经核实身份的用户进行资源分配 Accounting: 审计,监管资源被使用的情况 多用户多任务的操作系统: 能够实现资源使用和完成任务的主体是:应用程序的进程