天天看點

以Graphicslayer為管理組來管理Element.

前言

在AE開發過程中,我們經常使用Element(元素)。它的出現讓地圖與使用者之間的互動增加了不少的效果。在地圖上,可以通過各種element元素來表現我們需要的效果.例如高亮顯示中用到element比較頻繁.往往需要往地圖中添加一個element來顯示效果。當在地圖上element越來越多時,而且還是通過不同的功能添加進來的,那麼,這麼多而複雜的element 就需要用一種管理方法來進行有序管理,讓element有他的歸屬。如何管理呢?  其一: 使用IGroupElement.将同一類或功能相似的element都添加到IGroupElement中.以Group的形式來管理, 删除時,隻需删除IGroupElement即可.這個管理的好處在于當需要操作多個相近的element時,不需要逐一地對每一個element進行操作。例如,删除一批有查詢得到并用element高亮顯示房屋集,隻需删除它所在的Group組就可以了。

本文在這裡探讨另一種管理方法-以Graphicslayer為管理組來管理Element

通常,我們在開發過程中,對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:

<a></a>

通過以上代碼得到的是一個IGraphicslayer 對象, 開發人員可以使用IGraphicsContainer g = graphicslayer as IGraphicsContainer;獲得IGraphicsContainer 對象,如果要添加element,則使用我們常用的IGraphicsContainer.AddElement()方法. 此時,該方法将element添加到了IGraphicslayer 對象中.

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

代碼中"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,如需轉載請自行聯系原作者