在上一篇,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 = ;
IColor color = rgbColor;
//实例化符号(Symbol)对象
ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass();
simpleLineSymbol.Color = color;
simpleLineSymbol.Width = ;
ISymbol symbol = (ISymbol)simpleLineSymbol;
screenDisplay.SetSymbol(symbol);
screenDisplay.DrawPolyline(geometry);
screenDisplay.FinishDrawing();
}

刚才我们在表格中注意到,使用线刷新,虽然不会覆盖注记,但绘图框难以实时更新,产生重复。因此,我们在代码中,可以完美解决该问题

//强行刷新鹰眼视图, 目的: 清除前一次的绘图框, 避免重复绘图框
axMapControl2.ActiveView.ScreenDisplay.UpdateWindow();

最终效果图:

谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

ArcGIS Engine开发鹰眼图的功能(代码优化篇)的更多相关文章

  1. ArcGIS Engine开发鹰眼图的功能(基础篇)

    鹰眼是用于调节全视域范围内主地图显示范围情况的副地图.它体现了地图整体与详细局部的关系. 用户可以通过鼠标单击或者画框等动作实现鹰眼与主地图的交互情况. 鹰眼功能的原理是通过主地图窗口的地图控件和鹰眼 ...

  2. ArcGIS Engine开发之量测功能

    1.距离测量 距离测量时,片段长度通过两点之间距离计算得到,全部长度通过片段长度的和计算得到.主要用到INewLineFeedback和IScreenDisplay两个接口. 1)INewLineFe ...

  3. ArcGIS Engine开发的ArcGIS 版本管理的功能

    原文:ArcGIS Engine开发的ArcGIS 版本管理的功能 转自:http://blog.csdn.net/linghe301/article/details/7965901 这是以前的Arc ...

  4. ArcGIS Engine开发之地图基本操作(4)

    ArcGIS Engine开发中数据库的加载 1.加载个人地理数据库数据 个人地理数据库(Personal Geodatabase)使用Miscrosoft Access文件(*.mdb)进行空间数据 ...

  5. ArcGIS Engine开发前基础知识(3)

    对象模型图 一.对象模型图中的类与接口 ArcGIS Engine 提供大量的对象,这些对象之间存在各种各样的关系,如继承.组合.关联等.对象模型图(Object model diagram,ODM) ...

  6. ArcGIS Engine开发前基础知识(2)

    ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...

  7. C#,ArcGIS Engine开发入门教程

    C#,ArcGIS Engine开发入门教程 转自:http://blog.csdn.net/yanleigis/article/details/2233674  目录(?)[+] 五实现 一 加载A ...

  8. 过实现鹰眼图这个功能来进一步学习MapControl控件

    我们通过实现鹰眼图这个功能来进一步学习MapControl控件.在实现鹰眼图之前,我们需 要接口有更深入的了解. 变主动为被动-出接口(OutBound interface) COM编程类似客户端和服 ...

  9. ArcGIS Engine开发基础总结(一)

    标准Engine功能 地图浏览    地图制作 数据查询 数据分析 及 所有的开发控件 —MapControl, PageLayout, Toolbar, TOC, ArcReader 对所有矢量和栅 ...

随机推荐

  1. jquery实现select数据回显

    [html] view plain copy     <select class="div_select_re" id="edit_technicalGrade&q ...

  2. Http协议以及Httpclient

    一.HTTP之请求消息Request 客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line).请求头部(header).空行和请求数据四个部分组成. Http请 ...

  3. 修改 ulimit 时 需要注意的问题

  4. linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/73498303 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

  5. 003 okhttp超时与缓存

    上文的介绍都没添加,如果要添加,则按照下面的方式设置. File sdcache = getExternalCacheDir(); int cacheSize = 10 * 1024 * 1024; ...

  6. 软件开发的podcast

    目录 中文 喜马拉雅 https://www.ximalaya.com/ SingularFM 8个开发者值得一听的英文 Podcast https://zhuanlan.zhihu.com/p/24 ...

  7. Android之WebRTC介绍(二)

    WebRTC提供了点对点之间的通信,但并不意味着WebRTC不需要服务器.暂且不说基于服务器的一些扩展业务,WebRTC至少有两件事必须要用到服务器: 1. 浏览器之间交换建立通信的元数据(信令)必须 ...

  8. less 多行溢出显示省略号无效

    .body { font-size:14px; font-weight:400; line-height:22px; /*! autoprefixer: ignore next */ -webkit- ...

  9. k8s记录-安装ansible

    ##1.安装1) python版本需要2.6以上,不过通过centos7都会默认安装上python2.7.5,查看方法:python -V2) 添加yum 源a.vim /etc/yum.repos. ...

  10. IntelliJ IDEA 出现" java: 程序包javax.servlet不存在、 java: 程序包javax.servlet.annotation"等错误

    在IDEA中建立Servlet使用javax.servlet.http.HttpServlet等类时,出现了如下错误: 原因:IntelliJ IDEA 没有导入 servlet-api.jar 这个 ...