AO中的对高亮显示的局部刷新及对局部刷新方法的总结 转 http://blog.csdn.net/suinon/archive/2008/06/20/2569072.aspx
2009-01-04 11:26
696 查看
刚开始使用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
…..
[align=left] this.pGeometry = this.MainMap.TrackCircle();//产生用于查询的图形[/align]
[align=left] this.MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null);//选择前的局部刷新[/align]
[align=left] this.pFeatureCursor = this.ShopOperation.FilterByGeometry(this.pGeometry);//调用自定义的图层操作对象的空间查询方法 this.MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null); //选择后的局部刷新[/align]
….
刷新地图需要注意的几个问题:
1. 放大、缩小、全图等操作后的刷新,必须使用Refresh(),假如使用某种局部刷新的话,比如使用esriViewGeography进行局部刷新,当地图上有高亮选择集的时候,该选择集就得不到刷新,高亮的位置与feature实际的位置发生偏移。所以缩放等操作的刷新,应该用全局刷新Refresh()。
2. 常用的局部刷新是用esriViewGeoSelection对选择集的刷新,esriViewGraphics 对Label、Element等的刷新
3. 可以将两种或两种以上的局部刷新结合使用,方法为:pActiveView.PartialRefresh(esriViewDrawPhase. esriViewGeoSelection + esriViewDrawPhase.. esriViewGraphics,null,null);
刚开始使用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
…..
[align=left] this.pGeometry = this.MainMap.TrackCircle();//产生用于查询的图形[/align]
[align=left] this.MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null);//选择前的局部刷新[/align]
[align=left] this.pFeatureCursor = this.ShopOperation.FilterByGeometry(this.pGeometry);//调用自定义的图层操作对象的空间查询方法 this.MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null); //选择后的局部刷新[/align]
….
刷新地图需要注意的几个问题:
1. 放大、缩小、全图等操作后的刷新,必须使用Refresh(),假如使用某种局部刷新的话,比如使用esriViewGeography进行局部刷新,当地图上有高亮选择集的时候,该选择集就得不到刷新,高亮的位置与feature实际的位置发生偏移。所以缩放等操作的刷新,应该用全局刷新Refresh()。
2. 常用的局部刷新是用esriViewGeoSelection对选择集的刷新,esriViewGraphics 对Label、Element等的刷新
3. 可以将两种或两种以上的局部刷新结合使用,方法为:pActiveView.PartialRefresh(esriViewDrawPhase. esriViewGeoSelection + esriViewDrawPhase.. esriViewGraphics,null,null);
今天在这里说一下我对高亮显示选择集的局部刷新的认识过程。
第一阶段:每次用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
…..
[align=left] this.pGeometry = this.MainMap.TrackCircle();//产生用于查询的图形[/align]
[align=left] this.MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null);//选择前的局部刷新[/align]
[align=left] this.pFeatureCursor = this.ShopOperation.FilterByGeometry(this.pGeometry);//调用自定义的图层操作对象的空间查询方法 this.MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null); //选择后的局部刷新[/align]
….
[align=left]esriViewBackground [/align] | [align=left]Map grids [/align] | [align=left]Page/snap grid[/align] |
[align=left]esriViewGeography [/align] | [align=left]Layers[/align] | [align=left]Unused[/align] |
[align=left]*esriViewGeoSelection [/align] | [align=left]Feature selection[/align] | [align=left]Unused[/align] |
[align=left]esriViewGraphics [/align] | [align=left]Labels/graphics[/align] | [align=left]Graphics[/align] |
[align=left]esriViewGraphicSelection [/align] | [align=left]Graphic selection[/align] | [align=left]Element selection[/align] |
[align=left]esriViewForeground [/align] | [align=left]Unused[/align] | [align=left]Snap guides[/align] |
1. 放大、缩小、全图等操作后的刷新,必须使用Refresh(),假如使用某种局部刷新的话,比如使用esriViewGeography进行局部刷新,当地图上有高亮选择集的时候,该选择集就得不到刷新,高亮的位置与feature实际的位置发生偏移。所以缩放等操作的刷新,应该用全局刷新Refresh()。
2. 常用的局部刷新是用esriViewGeoSelection对选择集的刷新,esriViewGraphics 对Label、Element等的刷新
3. 可以将两种或两种以上的局部刷新结合使用,方法为:pActiveView.PartialRefresh(esriViewDrawPhase. esriViewGeoSelection + esriViewDrawPhase.. esriViewGraphics,null,null);
刚开始使用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
…..
[align=left] this.pGeometry = this.MainMap.TrackCircle();//产生用于查询的图形[/align]
[align=left] this.MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null);//选择前的局部刷新[/align]
[align=left] this.pFeatureCursor = this.ShopOperation.FilterByGeometry(this.pGeometry);//调用自定义的图层操作对象的空间查询方法 this.MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null); //选择后的局部刷新[/align]
….
[align=left]esriViewBackground [/align] | [align=left]Map grids [/align] | [align=left]Page/snap grid[/align] |
[align=left]esriViewGeography [/align] | [align=left]Layers[/align] | [align=left]Unused[/align] |
[align=left]*esriViewGeoSelection [/align] | [align=left]Feature selection[/align] | [align=left]Unused[/align] |
[align=left]esriViewGraphics [/align] | [align=left]Labels/graphics[/align] | [align=left]Graphics[/align] |
[align=left]esriViewGraphicSelection [/align] | [align=left]Graphic selection[/align] | [align=left]Element selection[/align] |
[align=left]esriViewForeground [/align] | [align=left]Unused[/align] | [align=left]Snap guides[/align] |
1. 放大、缩小、全图等操作后的刷新,必须使用Refresh(),假如使用某种局部刷新的话,比如使用esriViewGeography进行局部刷新,当地图上有高亮选择集的时候,该选择集就得不到刷新,高亮的位置与feature实际的位置发生偏移。所以缩放等操作的刷新,应该用全局刷新Refresh()。
2. 常用的局部刷新是用esriViewGeoSelection对选择集的刷新,esriViewGraphics 对Label、Element等的刷新
3. 可以将两种或两种以上的局部刷新结合使用,方法为:pActiveView.PartialRefresh(esriViewDrawPhase. esriViewGeoSelection + esriViewDrawPhase.. esriViewGraphics,null,null);
相关文章推荐
- Sql Server 生成连续日期的方法总结 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/GRANDTREE/archive/2009/06/16/4273129.aspx
- AO中的对高亮显示的局部刷新及对局部刷新方法的总结(转)
- AO中的对高亮显示的局部刷新及对局部刷新方法的总结
- [转]水晶报表列太多导致设计界面容纳不下的解决方法 [http://blog.csdn.net/lupenda/archive/2005/08/12/452878.aspx]
- CString 的方法(from:http://blog.csdn.net/lijuwen/archive/2006/03/13/623186.aspx)
- IE与Firefox都能显示的半透明 http://blog.csdn.net/DDYanHui/archive/2007/03/20/1534471.aspx
- 破译动网验证码的简单方法 http://blog.csdn.net/wwqna/archive/2004/11/13/A1.aspx
- C#向Excel报表中插入图片的2种方法 http://blog.csdn.net/net_lover/archive/2007/07/23/1702797.aspx
- Spring中单例bean访问非单例bean的第一种方式:方法注入(转http://blog.csdn.net/ayueiloveyou/archive/2008/08/03/2760473.aspx)
- 数据挖掘和知识发现的技术、方法及应用 --------http://blog.csdn.net/gongfs/archive/2006/03/17/627244.aspx
- http://blog.csdn.net/liranke/archive/2009/10/29/4740844.aspx
- http://blog.csdn.net/freefalcon/archive/2004/07/28/54839.aspx
- 《自己动手写嵌入式操作系统》阅读笔记之操作系统小知识 http://blog.csdn.net/auto_ptr/archive/2007/08/10/1736027.aspx
- s:select(http://blog.csdn.net/moliqin/archive/2009/01/11/3753570.aspx )
- 开发MSN插件http://blog.csdn.net/Red_angelX/archive/2006/12/26/1462781.aspx
- 转载http://blog.csdn.net/jojoaric/archive/2006/10/17/1338763.aspx
- http://blog.csdn.net/mini/archive/2004/06/29/29757.aspx
- 英语学习 - 之听力提高 (网址收集)http://blog.csdn.net/Mobidogs/archive/2007/11/03/1864551.aspx
- 面试中的 10 大排序算法总结-->http://write.blog.csdn.net/postedit?ref=toolbar
- eVC下CString 操作指南 转自http://blog.csdn.net/favory/archive/2008/11/05/3227606.aspx