AO中的對高亮顯示的局部重新整理及對局部重新整理方法的總結 收藏
剛開始使用AO進行GIS程式設計的時候,只要遇到需要重新整理ActiveView的地方,就會毫不猶豫的使用IActiveView的Refresh()方法,直到後來才知道Refresh()是整體重新整理方法,而且重新整理效果確實不好,整個MapControl都閃的厲害,尤其在地圖檔案很大的情況,其惡劣視覺衝擊越明顯。於是嘗試著在某些地方使用IActiveView的PartialRefresh()即局部重新整理方法,例如對選擇集的重新整理,對Element的重新整理等,隨著這一局部重新整理方法的使用,重新整理效果果然大有改觀,MapControl能“平靜”的做出activeview的改變,不再有用Refresh()時,那種強烈的晃動感了。
今天在這裡說一下我對高亮顯示選擇集的局部重新整理的認識過程。
第一階段:每次用IFeatureSelection的SelectFeatures()選擇後,一律用Refresh(),效果極差。
第二階段:在每次選擇後,緊跟其後,使用esriViewGeoSelection()進行局部重新整理,效果明顯改善,但之後出現一個問題,即當空選的時候,即使重新整理,高亮顯示的仍然是上次查詢的結果。
第三階段:為了修正第二階段的問題,在空選的時候,獲得ISelectionSet的count屬性,若count為0,則手動調用IMap的ClearSelection()方法對上次的選擇集進行清除。但是使用局部重新整理方法失靈,必須改用全域重新整理Refresh()。
第四階段,在AO開發協助裡注意到,對選擇集的局部重新整理,在選擇前和選擇後必須各重新整理一次(When selecting features, you must call PartialRefresh twice, once before and once after the selection operation.),按照協助內的方法局部重新整理後,即使選擇集為空白,也能保證重新整理掉上次的高亮選擇集,而不需要使用IMap的Clear()方法或者IFeatureSelection的Clear()方法進行手動重新整理。
Eg
…..
this.pGeometry = this.MainMap.TrackCircle();//產生用於查詢的圖形
this.MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null);//選擇前的局部重新整理
this.pFeatureCursor = this.ShopOperation.FilterByGeometry(this.pGeometry);//調用自訂的圖層操作對象的空間查詢方法 this.MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null); //選擇後的局部重新整理
….
esriViewBackground Map grids Page/snap grid
esriViewGeography Layers Unused
*esriViewGeoSelection Feature selection Unused
esriViewGraphics Labels/graphics Graphics
esriViewGraphicSelection Graphic selection Element selection
esriViewForeground Unused Snap guides
重新整理地圖需要注意的幾個問題:
1. 放大、縮小、全圖等操作後的重新整理,必須使用Refresh(),假如使用某種局部重新整理的話,比如使用esriViewGeography進行局部重新整理,當地圖上有高亮選擇集的時候,該選擇集就得不到重新整理,高亮的位置與feature實際的位置發生位移。所以縮放等操作的重新整理,應該用全域重新整理Refresh()。
2. 常用的局部重新整理是用esriViewGeoSelection對選擇集的重新整理,esriViewGraphics 對Label、Element等的重新整理
3. 可以將兩種或兩種以上的局部重新整理結合使用,方法為:pActiveView.PartialRefresh(esriViewDrawPhase. esriViewGeoSelection + esriViewDrawPhase.. esriViewGraphics,null,null);
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/suinon/archive/2008/06/20/2569072.aspx