ArcGIS 二次开发中的几种显示效果
有以下几种方案:
(1) Element方式
在地图中显示要可视化的内容。这种显示不会随着图层的刷新而丢失,可以用AxMapControl的pGraphicsContainer中,也可以在图层中添加(AddElemen)、删除(DeleteElement, DeleteAllElements),而且可以可以做到动态的增删要展示的元素。
本人已经将其成功用于多种场景,距离来说,用在缓冲区查潮位站、文字标记等场景。
private void AddElement(IGeometry geometry) { IPolygonElement polygonElement; polygonElement = new PolygonElementClass(); IElement element; element = polygonElement as IElement; element.Geometry = geometry; IGraphicsContainer graphicsContainer = base.m_pMapCtrl.Map as IGraphicsContainer; graphicsContainer.AddElement((IElement)polygonElement, 0); base.m_pMapCtrl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); }
(2) activeView.ScreenDisplay方式
这种方式绘制完成后,在地图刷新时会被清除,所以一般讲要绘制的部分放置到axMapControl1_OnAfterScreenDraw事件中。
private void DrawEnvelope(IEnvelope newEnvelope) { short cacheID = base.m_pMapCtrl.ActiveView.ScreenDisplay.AddCache(); ISimpleFillSymbol fillSymbol = new SimpleFillSymbolClass(); IRgbColor rgbColor = new RgbColorClass(); rgbColor.Red = 255; fillSymbol.Color = rgbColor; base.m_pMapCtrl.ActiveView.ScreenDisplay.StartDrawing(base.m_pMapCtrl.ActiveView.ScreenDisplay.hDC, cacheID); base.m_pMapCtrl.ActiveView.ScreenDisplay.SetSymbol((ISymbol)fillSymbol); base.m_pMapCtrl.ActiveView.ScreenDisplay.DrawRectangle(newEnvelope); base.m_pMapCtrl.ActiveView.ScreenDisplay.FinishDrawing(); }
(3) DrawShape
private void DrawMapShape(IGeometry geometry) { ISimpleFillSymbol simpleFillSymbol; simpleFillSymbol = new SimpleFillSymbolClass(); simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSNull; IRgbColor color = new RgbColorClass(); color.Green = 137; color.Blue = 209; ILineSymbol line = new SimpleLineSymbolClass(); line.Color = color; line.Width = 3; simpleFillSymbol.Outline = line; object symbol = simpleFillSymbol; base.m_pMapCtrl.DrawShape(geometry, ref symbol); }
(4) 通过要素类图层的定义
可以通过图层定义的方式,对地理要素进行可视化而且可以达到动态的效果。
具体可参考 本人博文: ArcGIS AO中控制图层中要素可见状态的总结
你们的评论、反馈,及对你们有所用,是我整理材料和博文写作的最大的鼓励和唯一动力。欢迎讨论和关注!
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。