ArcGIS Engine开发鹰眼图的功能(代码优化篇)
Posted edcoder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArcGIS Engine开发鹰眼图的功能(代码优化篇)相关的知识,希望对你有一定的参考价值。
在上一篇,ArcGIS Engine开发鹰眼图的功能(基础篇)
上一篇的实现效果图如下,
如果仔细观察,会发现一个问题,即在“鹰眼”的区域,只要在红色线框内的注记会被覆盖。
如果红色框包括整张图的话,图上的注记都将不会显示。
是什么原因造成的呢?
原因是使用IFillShapeElement向鹰眼视图添加绘图框后,标注与绘图框冲突造成互相压盖。
我们来看一张表,
在基础篇中,我们使用的是IFillShapeElement面要素进行刷新的,现在我们改换为线要素的IScreenDisplay DrawPloyline
替换基础篇中的面要素刷新方法即可
/// <summary> /// 使用线要素刷新(已解决重叠问题)(推荐使用) /// 使用IScreenDisplay的DrawPolyline方法,在鹰眼视图画出红线框 /// </summary> /// <param name="activeView">鹰眼视图的活动窗体</param> /// <param name="geometry">制框范围</param> private void DrawPolyline(IActiveView activeView, IGeometry geometry) { if (activeView == null) return; //如果活动窗体为空, 则返回 //强行刷新鹰眼视图, 目的: 清除前一次的绘图框, 避免重复绘图框 axMapControl2.ActiveView.ScreenDisplay.UpdateWindow(); //解决重复绘图框的关键代码 IScreenDisplay screenDisplay = activeView.ScreenDisplay; //Screen的绘图状态处于准备状态 //参数: (指定设备(Dc=Device), 缓冲区(-1=NoScreenCache,-2=AllScreenCache, -3=ScreenRecoding)) //解析: 设备(Device)参数指图形的绘制区域 //缓冲区(Cache)参数指图形是否经由缓存后再绘制在屏幕(Window/Screen)上。 //一般默认为NoScreenCache, 即不经过缓存直接绘制 screenDisplay.StartDrawing(screenDisplay.hDC, (System.Int16)esriScreenCache.esriNoScreenCache); //实例化颜色对象 IRgbColor rgbColor = new RgbColorClass(); rgbColor.Red = 255; IColor color = rgbColor; //实例化符号(Symbol)对象 ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass(); simpleLineSymbol.Color = color; simpleLineSymbol.Width = 2; ISymbol symbol = (ISymbol)simpleLineSymbol; screenDisplay.SetSymbol(symbol); screenDisplay.DrawPolyline(geometry); screenDisplay.FinishDrawing(); }
刚才我们在表格中注意到,使用线刷新,虽然不会覆盖注记,但绘图框难以实时更新,产生重复。因此,我们在代码中,可以完美解决该问题
//强行刷新鹰眼视图, 目的: 清除前一次的绘图框, 避免重复绘图框 axMapControl2.ActiveView.ScreenDisplay.UpdateWindow();
最终效果图:
谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!
以上是关于ArcGIS Engine开发鹰眼图的功能(代码优化篇)的主要内容,如果未能解决你的问题,请参考以下文章
openlayers小案例(输入地名查询拖动图层切换图层透明度鹰眼图层显示与隐藏定位放大缩小)新手必备