以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:

复制代码
添加子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.若要清除元素,则可以用如下代码:

移除GraphicsLayer中的所有element

 

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

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

原文链接:http://www.cnblogs.com/JinDin/archive/2010/03/06/1674579.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
graphicsLayer.clear()是用来清空图层上的所有标记的点、线和面的方法。这个方法会将图层上的所有要素都移除掉,使得图层变为空。你可以通过以下步骤来清空图层: 1. 首先,创建一个GraphicsLayer对象并设置一个唯一的id,比如'id'。 var graphicsLayer = new GraphicsLayer({id:'layer_id'}); 2. 然后,使用clear()方法来清空图层。 graphicsLayer.clear(); 这样就可以清空图层上的所有要素了。如果你想要重新添加要素到图层上,你可以使用add()方法将新的要素添加到图层中。如果你想要获取已经存在的图层对象,你可以使用getLayer()方法,传入图层的id来获取对应的图层对象。比如,你可以使用以下代码获取已经存在的图层对象: var layer = map.getLayer('layer_id'); 请注意,这里的'map'是你的地图对象,'layer_id'是你之前为图层设置的唯一id。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Arcgis Javascript(四)图层相关操作(获取、层级、添加、删除、清空)](https://blog.csdn.net/yiyueqinghui/article/details/102669438)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值