鹰眼导航功能的原理与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参考文献: [ 1] 胡最. GIS 开发中子 类化技术 的应用 [ J] . 云南地 理环境
研究, 2007, 19( 1) : 67270. [2] 胡 最, 闫 浩 文. 地 图 符 号 的语 言 学 机 制及 其 应 用 研究
[ J] . 地 理与地理信息科学, 2008, 24( 1) : 17220, 34. [ 3] 胡最. GIS 软件中 Undo/ Redo 操作的设计与实 现[ J] . 衡
摘 要: 鹰眼导航功能是很多 GI S 软件和电 子地图 最为 常见的 功能。文 章深 入分析 了鹰 眼导 航的机 制和 原理。
结合前述研究基础, 文章探讨了几种实现鹰眼导航功能的 途径, 结合 作者曾 经从事 过的 GIS 软 件开发 实例设计
并实现了鹰眼导航功能, 最后给出了运行实例。
关键词: 鹰眼导航功能; 机制和原理; 途径; 运行实例
2009 年第 6 期
胡最, 陈影: 鹰眼导航功能的原理与实现
1 23
取文档指针的手段来实现对同一数据内容的同步显示效 果, 从而实现鹰眼导航功能(图 3)。
图 2 M FC 中的文档/ 视图机制 Fig. 2 Mechanism of Document/ View of MFC
图 3 鹰眼导航实现原理 Fig. 3 the Pr inciple of Eagle Naviga tion 2. 2 实现方法分析 目前 GIS 软件 开发过程中 鹰眼导航功 能的实现 途径主 要有两大类。一类是 将地 图显示 窗口 开发成 为专 门的 Ac2 itveX 控件, 在具体实现时 则是在 程序 窗口 中添加 多个 相应 的 AcitveX 控件, 然 后 在各 个控 件 窗口 中 实 现数 据 同步 显 示; 另一类则是软件开发人员自行开发实现。应用第 一类方 法时, 开发人员不需要 知道地 图数据 显示的 具体功 能代 码, 实现起来简便快捷, 许多主流 GIS 平台软件的鹰眼导航功能 本身也是通过这类方法实现的。对于第二类方法而言, 则需 要软件开发人员根据 实际 情况开 发功 能代码。 以 VC 中的 单文档程序为例, 实现 的途径 主要有 三种: 一是通 过应 用程 序框架机制派生一个视图类和一个框架窗口类, 两者共享相 同的文档类但使用不同的框架窗口; 二是通过 应用程序框架 机制派生一个视图类, 在 CMainF rame 类中 使用分割 视图的 方法来实现, 这种方法中两者共享相同的文档 类并且使用同 一个框架窗口; 三是使 用控件 子类化 和超类 化技术, 通 过派 生某些 具有 图形 图像 显示 功能 的控 件类, 扩充 其 Onwner2 Draw 属 性, 地 图 数据 的 主要 显 示 代码 可 以放 在 控 件类 的 DrawItem( ) 函数 中, 这种方 法则 主要 通过在 应用 程序 框架 中添加对话框类来实现。对于 VC 中的多文档 类程序, 其实 现方法大体和单文档程 序的方 法相当。而 于对话 框类 程序 则主要使用扩充控件方法, 在此不再赘述。 总的来说, 不管使用 哪类方 法, 两 者的 基本原 理和 实现 机制都是相同的, 没有本质上的区别。
4总结
本文分析了 GI S 软件中鹰眼导航功能的原理、实现机制 并且分析了各 种实现 方法。在 此基 础上结 合作 者从事 GIS 程序开发的实例和经验, 详述了实现 GIS 软件中鹰眼导航功 能的实现方法和思 路。最后给 出了程 序运 行实例。 鹰眼导 航功能是开发 GI S 软件所必备的功能, 本文所提出的思路和 实现方法对于小型 GIS 软件 系统的 开发具 有非常好 的借鉴 作用和较强的实用性。
3 鹰眼导航功能开发实例剖析
现在以笔 者所开 发的一 款小型桌 面 GIS 软 件平台 Ge2 neGIS( 聚落景观基因信息图谱实验平台) 系统 中的鹰眼导航 功能为例详述在自主 GIS 软件 开发过 程中实现 鹰眼导 航功
能的一般思路和组织方法。
3. 1 思路和方 法概述 在开发过程中, 笔者根据实际情况采用从底层开发来实
收稿日期: 2009202222 基金项目: 湖南省教育厅一般资助项目( 08C153) ; 湖南省人文地理学重点建设学科资助项目 作者简介: 胡最( 19772) , 男, 湖南宁乡人, 衡阳师范学院资源环境与旅 游管理系, 讲师, 硕士, 主要 研究方 向为空间 信息可
视化与 GIS 软件研发.
3. 3 具体功能的实现 具体实现导航功能时, 先在程序中添加一 个对话框资源
并在对话框资 源模板中画 出一个 CPicutur e 控件 , 然后 通过 类向导 工具 为对 话框 添加 相应 的类 和 CNavigationStaic 成 员变量。必须注意的是要为对话框类添加 OnP aint( ) 事 件。 具体的导航功能运行效果如图 4 所示。
{ p_Doc- > DrawNavigate( pDC, m _M yClientRect, m_fS2
1 24
衡阳师范学院学 报
2009 年第 30 卷
caleX, m_fScaleY) ; / / p_Doc 为指向文档类的外部指针 p_Doc- > Dr awNavigateView( pDC, viewR ect) ; } }
鹰眼导航功能的思路。所使用的开发 环境是 Visual C+ + . NET 2003, 采用的方法则是用利用 MFC 中控件子类化和超 类化技术, 通过 扩充 MFC 的标准 控件功 能来实 现。所选用 的控件类为 CStatic 类, 使用该类的理由是 CStatic 类具有易 于扩充和便于图形图像显示的特点。
class CNavigationStaic: public CStatic { DECLAR E_DYNAMIC( CNavigationStaic) p ub l ic: CNavigationStaic( ) ; ~ CNavigationStaic( ) ; void DrawItem( LPDR AWITEMSTR UCT lpDrawItem2 Struct) ; p ro t ect ed : CRect m_MyClientR ect; / / 在 程 序 中主 要 计算 控 件自 身的客户区大小
if ( lpDrawItemStruct - > itemAct ion& ODA _ DRA2 WENTIRE) / / Defines t he drawing act ion r equired. T his will be one or more of t he following bits:
阳师范学 院学报, 2008, 29( 3) : 1222124. [ 4] 齐舒创作 室. Visual C+ + . NET 高 级编 程[ M ] . 北 京:
清华大学 出版社, 2002: 3522379.
图 4 鹰眼导航效果图 Fig. 4 Ef fective Gr aph of Eagle Navigation
2003 为例来分 析鹰 眼导 航功 能的 实现 机制。 VC + + 提供 了文档/ 视图机 制来实现程序中数据的显示和维护操作。文 档为数据提供了维护和管理接口, 视图为文档提供了显示和 操作的接口。显然, 可以利 用文档/ 视图 机制的 这一 特性来 研究实现鹰眼导航功能。
图 1 鹰眼功能示例图 Fig. 1 An Example f or Eagle Navigation 在文档/ 视图机制中, 视 图类中 提供 了获得 文档 指针的 操作函数 GetDocument( ) , 视图类的显示函数 OnDraw( ) 正 是通过 GetDocument( ) 来实现文档中数据的显示 的( 图 2) 。 因此, 我们可以新增数据显 示窗口, 再通过 在新窗口 类中获
2 鹰眼导航功能分析
2. 1 机制和原理[ 1] 在软件开发中, 鹰眼 导航功 能实现 的基 本思路 是: 在大
小和形状不相同的两个或 者多个 显示窗 口中分 别对相 同的 数据实现同步显示(图 1)。在 不同的开发 语言中, 实现 这一 思路会略有不同。本文以 Micr osoft 的 Visua l C+ + . NET
第 30 卷第 6 期 2 00 9年1 2月
衡阳师范学院学 报 Journal of Hengyang Normal Universit y
No. 6Vol. 30 Dec . 2 0 0 9
鹰眼导航功能的原理与实现
胡 最1 , 陈 影2
( 11 衡阳师范学院 资源环境与旅游管理系, 湖南 衡阳 421008; 21 河北农业大学 资源与环境学院, 河北 保定 071000)
中图分类号: TP 3911 41
文献标志码: A
文章编号: 167320313( 2009) 0620122203
1 问题的提出
鹰眼导航功能是 GIS 软件 中一项 非常重 要的功 能。在 GIS 软 件中, 导航窗 口相当 于整个 地图的 一个缩 略图, 它为 软件用户提供了整个地 图的预 览和导 航功能。通 过导 航窗 口, 用户可以快速地实现对地图中感兴趣区域的定 位。对于 软件中图幅很大的地图而言或者地图放大到一定倍数后, 这 一功能的便捷性不言而喻。正是由于这一特点, 定位 就好比 高空中的老鹰捕捉目标一样快速和准确, 因而 被形象地称为 / 鹰眼0 。很 多大型的 GIS 软件 平台在 其二次开 发组件 中都 提供了可以实现鹰眼功能的接口, 开发人员无 需编写大量代 码即可直接实现这一功 能。但是对 于很多 小型或 者预 算不 高的 GIS 开发 项目来 说, 使用 大型 GIS 平 台所 提供 的 组件 显然不可行, 因此探求一种实现鹰眼功能的简 单可行的方法 很有必要。本文通过剖析鹰眼导航功能的实现机制和原 理, 在 GIS 软件开 发的实践中总结出了几种可行的实现方法。
底层开发具有较好的优势, 可以开发出具有软件开发人 员自身特色和自主知识版权的软件产品, 而且软件使用和维 护相当容易, 在开发小型 GIS 软件时具有比较好的可行性。 3. 2 功能类的 准备
在 CStatic 类的 基础 上派 生出 CNavigationStaic 类。在 派生类中通过扩充 DrawItem( ) 函数来实现对程 序中文档类 数据的显示。下面给出 CNavigationSt aic 类的定义。
double m_fScaleX; / / 根据程序主视图窗口的宽度和客 户区宽度计 算 X 轴 方向的缩放比例 double m_fSclaeY; / / 根据程序主视图窗口的高度和客户 区高度计算 Y 轴 方向的缩放比例 CRect m_viewR ect; / / 计算主视图区显示区 域的大 小用 于画出 导航 窗口中 的小矩形 }; 该类中实现鹰眼导航功能的核 心代码主 要是 Dr awIt em ( ) 函数。该函数的实现代码如下: void CNavigationStaic: : DrawItem ( LPDRAWI TEM2 STRUCT lpDrawItemStruct ) { CDC * pDC= CDC: : F romH andle( lpDrawItemStr uct> hDC) ; lpDr awI temSt ruct - > CtlType= ODT _STATIC; / / 添 加自绘属性/ / / / Owner- drawn stat ic cont rol
Principle And I mplement of Eagle Navigation
H U Zui 1 , CH EN Yi ng 2
( 11 Department of Geogr aphy & Tourism Management, H engyang Norma l Univer sity, H engyang H uman 421008, China;Байду номын сангаас21 Resour ce & Environment School, H ebei University of Agricultur e, Baoding H ebei 071001, China)
相关文档
最新文档