以Graphicslayer为管理组来管理Element.
来源:互联网 发布:gfxbench数据库怎么看 编辑:程序博客网 时间:2024/05/20 06:04
以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:
/// <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.若要清除元素,则可以用如下代码:
{
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的有效控制.
- 以Graphicslayer为管理组来管理Element.
- 以Graphicslayer为管理组来管理Element.
- 探讨AE中Graphicslayer管理Element
- 以对象来管理资源
- 以项目管理为核心
- 以信息化来提升应急无线电管理
- 以结果为导向的时间管理
- 以任务为中心的管理
- 权限管理说明-以Linux为例
- 第13条:以对象来管理资源
- 6西格玛,以数据为依据的管理方法
- 建立以变更为核心的开发管理流程
- 为何倡导以质量为导向的项目管理?
- --建立以变更为核心的开发管理流程
- 建立以变更为核心的开发管理流程
- 为何倡导以质量为导向的项目管理?
- 时间管理——以原则为中心
- ITIL-以流程为中心的IT管理行业标准
- G - 数值统计
- openwrt shell 变量运算
- C++多线程同步(采用关键代码段即临界区)
- Hub与Switch的帧的广播细节
- 病毒木马查杀实战第025篇:JS下载者脚本木马的分析与防御
- 以Graphicslayer为管理组来管理Element.
- wemall app商城源码Fragment中监听onKey事件
- MySQL函数大全 及用法示例
- ehcache 异常net.sf.ehcache.CacheException: When configured copyOnRead or copyOnWrite, a Store will onl
- java在SAE中使用的相关问题总结
- iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView
- jquery select 插件
- String 的compareto函数
- 不能用ajax提交文件下载的请求