GPS导航软件毕业设计论文.doc

上传人:文库蛋蛋多 文档编号:4018739 上传时间:2023-04-01 格式:DOC 页数:44 大小:1.30MB
返回 下载 相关 举报
GPS导航软件毕业设计论文.doc_第1页
第1页 / 共44页
GPS导航软件毕业设计论文.doc_第2页
第2页 / 共44页
GPS导航软件毕业设计论文.doc_第3页
第3页 / 共44页
GPS导航软件毕业设计论文.doc_第4页
第4页 / 共44页
GPS导航软件毕业设计论文.doc_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《GPS导航软件毕业设计论文.doc》由会员分享,可在线阅读,更多相关《GPS导航软件毕业设计论文.doc(44页珍藏版)》请在三一办公上搜索。

1、本科毕业设计(论文)题目: 基于ARM处理器的GPS导航软件 系统设计 学 院 电子与信息学院 专 业 电子科学与技术(微电子)学生姓名 翁伟鹏 学生学号 200730371487 指导教师 高学 提交日期 2011 年 6 月 8 日 摘 要“汉信码”是一项具有我国自主知识产权的国家标准,是中国物品编码中心取得的诸多科研成果一。是中国在二维码领域向世界发出的信息和声音,标志着中国开始走上国际条码技术的主要舞台,开始具有自己的技术话语权。作为一种矩阵式二维条码,它具有汉字编码能力强、抗污损、抗畸变、信息容量大等特点,是一种十分适合在我国广泛应用的二维条码,具有广阔的市场前景。本文着重介绍如何在

2、Visual C+平台设计与实现二维汉信码编码和解码的功能,详细介绍编码和解码的步骤与模式。本文先对所涉及到的概念进行介绍;然后对汉信码编码过程和解码过程进行分析,并简单介绍了纠错码的原理算法。本设计最终实现了二维汉信码各种模式下的编码、解码功能,虽然不够全面,但对于二维汉信码编解码的研究还是具有一定的参考价值。关键词:汉信码;编码; 解码;模式Abstract Keyword:目录第一章 绪论1.1 课题背景与意义1.2 国内外研究现状1.3 二维条码的应用前景1.4 论文的主要内容第二章 汉信码的编码实现研究2.1 主要特性2.2 符号结构2.3 汉信码的符号生成步骤2.3.1 数据分析2

3、.3.2 数据编码2.3.3 纠错编码2.3.4 构造最终数据流位2.3.5 码图放置2.3.6 掩模2.3.7 构造功能信息流位2.4 编码模式第三章 汉信码的纠错译码算法3.1纠错码3.2纠错码的基本原理3.3 BCH码3.4 本章小结第四章 汉信码的译码实现研究4.1汉信码译码过程分析4.2译码功能实现4.3识读系统接口说明第五章 总结与展望参考文献致谢第一章 绪 论1.1. 选题背景嵌入式系统方面:随着信息化、智能化、网络化的发展,嵌入式技术将全面展开,现在嵌入式已经成为通信和消费类产品的共同发展方向。嵌入式系统的应用正在从狭窄的应用范围、单一的应用对象以及简单的功能,向着未来社会需要

4、的应用需求进行转变,在通讯、网络、工控、医疗、民用等领域发挥着越来越重要的作用。社会对嵌入式系统的需求正在慢慢扩大,特别是最近几年随着国际互联网发发展,从PC时代步入到后PC时代,对信息家电的需求起来越明显。嵌入式系统在信息家电的应用,就是对嵌入式系统概念和应用范围的一个变革,从而打破了过去PC时代被单一微处理器厂家和单一操作系统厂家垄断的旧局面,出现了一个由多芯片、多处理器占领市场的新局面。因此,对嵌入式技术的学习研究,也逐渐成为电子专业的主要研究方向。GPS导航方面:随著科技化的角度持续加快,迫使有越来越多的人必须在紧凑的时间及地点进行工作,而当城市化的速度不断地膨胀后,不仅导致交通网络日

5、益复杂,人们必要的移动性也有越来越频繁的趋势。这使得每个人对空间信息有了更多的依赖,使得人们对于我身处在何方?、前往的目的地?、如何前往?等问题,存在著前所未有的需求性。因此,以嵌入式系统为主要平台的数码地理整合性应用与其因应方案,也就是手持式、车载GPS全球卫星导航系统等,便可解决对此人们急迫的需求性。另外,随着时代的发展,对于GPS导航的技术要求也越来越高。不仅要实现导航的基本功能,还要实时显示具体所在位置,以及周围路线,为到达目的地最便捷的一种方案。另外,随着计算机技术的飞速发展,全球定位系统(GPS)和地理信息系统(GIS)在各行各业中得到广泛的重视和应用,两者的集成化程度也越来越高。

6、复杂的交通网,越来越多的自驾出行,要求有能够实现GPS导航信息在GIS上的可视化、一体化和集成化,能够在地图上实时动态地跟踪目标和显示地理位置的小型导航系统。本文将在嵌入式平台上实现一个导航软件系统,实现定位、最短路径搜索、导航、地图浏览等功能。其中所经历的步骤有:电子地图获取和数据读入,地图数据的处理,GUI界面的实现,地图的绘制,最短路径算法的代码实现,提取串口读取进来的GPS数据,最后实现定位与导航功能。 1.2. 本文的主要工作及安排本文的主要工作是:详细介绍实现GPS导航软件系统的功能的过程,并对相关的概念进行介绍。安排如下:本文先对所涉及到的概念进行介绍;并对本设计所用的电子地图格

7、式进行分析,给出了制作地图的方法;然后对硬件平台以及软件环境作了简明扼要的介绍,包括操作系统和GUI系统;接着给出整个导航软件系统的设计思路和架构;然后给出导航软件系统功能详细的实现步骤,最后进行调试运行并对运行效果进行了分析。第二章 相关知识的介绍1.12122.2.1. GPS概述GPS是Global Positioning System即“全球定位系统”的简称,是20世纪70年代由美国陆海空三军品联合研制的新一代空间卫星导航定位系统。其主要目的是为陆、海、空三大领域提供实时、全天候和全球性的导航服务,并用于情报收集、核爆监测和应急通讯等一些军事目的,是平车独霸全球战略的重要组成。经过20

8、余年的研究实验,耗资300亿美元,到1994年3月,全球覆盖率高达98%的24颗GPS卫星已布设完成。在军用领域取得成功之后,GPS系统逐渐用于民用领域。为了国家安全, GPS卫星发射两种信号,一种是民用信号;另一种只有军方才能解码。2000年以后,美国政府取消对GPS卫星民用停产的SA干扰,发用GPS定位精确度达到平均6.2米的实用化水平,从而掀起GPS产业和应用热潮。GPS系统由三大子系统构成:空间卫星系统、地面监控系统和用户接收系统。空间卫星系统是一个由覆盖全球的24颗卫星组成的系统。这个系统可以保证在任意时刻,地球上的任意一点都可以同时观测到4颗以上卫星,以保证卫星可以采集到该观测点的

9、经纬度和高度,以便 实现导航、定位、授时等功能。用户接收系统主要由无线电传感和计算机技术支撑的GPS卫星接收机和GPS数据处理软件构成。接收机在捕获到跟踪的卫星信号后,就可测量出接收天线至卫星的伪距离和距离的变化率,解调出卫星轨道参数等数据。接收机中的微处理器就可根据获得的数据,计算出用户所在地理位置的经纬度、高度、速度、时间等信息1。2.2. GIS概述GIS即Geographic Information System,地理信息系统,是在计算机软硬件支持下,以空间数据库为基础,对空间数据进行采集、存储、管理、分析、显示与描述,为用户规划、决策、管理和研究提供信息支持的技术系统,是随着地理科学

10、、计算机技术、遥感技术和信息科学的发展而发展起来的一个新兴边缘学科1。一般由计算机系统、地理数据库系统、应用人员与组织机构组成。嵌入式GIS是新一代地理信息系统发展的代表方向之一,它是运行在嵌入式计算机系统上高度浓缩、高度精简的GIS软件系统2,是导航、定位、地图查询和空间数据管理的一种理想解决方法,在军事、智能交通、旅游、自然资源调查、环境研究等领域被广泛使用。2.3. 电子地图122.12.22.32.2.1.2.2.2.3.2.3.1. 电子地图的格式本文设计过程中主要涉及到栅格图和矢量图。栅格图最常见的有jpeg格式图,是以像素点来存放的。而矢量图矢量图也叫面向对象绘图,是用数学方式描

11、述的曲线及曲线围成的色块制作的图形,它们在计算机内部中是表示成一系列的数值而不是像素点,这些值决定了图形如何在屏幕上显示。用户所作的每一个图形,打的每一个字母都是一个对象,每个对象都决定了其外形的路径。因此,可以自由地改变对象的位置、形状、大小和颜色。同时,由于这种保存图形信息的办法与分辨率无关,因此无论放大或缩小多少,都有一样平滑的边缘,一样的视觉细节和清晰度。2.3.2. MIF与TAB矢量图为了便于读取和显示,以及实现缩放浏览等功能,选择矢量图是不二的选择。而矢量图方面,有TAB和MIF两种格式文件可选。两种格式都可从MapInfo软件获得。MIF文件是MapInfo用来向外交换数据的一

12、种中间交换文件,内容存放格式简单明了,以ASC码存放,易于读取操作,最重要的是存放体积小,非常符合嵌入式系统精简的特点。因此本文选择用MIF地图文件作为系统地图的接口文件。2.3.3. MIF与MID文件的格式当用户在MapInfo中将一张MapInfo地图表以MIF格式转出来MIF文件中后,MapInfo会同时在用户指定的保存目录下生成两个文件(*.MIF,*.MID)。其中*.MIF文件保存了该MapInfo表的表结构及表中所有空间对象的空间信息(如:每个点对象的符号样式、点位坐标;每个线对象的线样式、节点数据、节点坐标;区域对象的填充模式、每个区域包含的子区域个数及每个区域的节点数、节点

13、数等)。而*.mid文件则按记录顺序保存了每个空间对象的所有属性信息。这两个文件都为文本性质的文件,用户可以通过相应的文件读写方法实现对文件内容的读写。 MapInfo数据在两个文件中图形保存在*.MIF文件中,而文本数据包含在.MID文件中。文本数据是分界数据,每行一个记录以及行间的回车,或者回车加换行,或者换行。MIF文件有两个区域文件头区域和数据节。2.4. 电子地图的制作本文电子地图的制作需要准备两个软件,Goole earth和MapInfo,版本可选。本文用到MapInfo 9.5版3。这两个软件分别用于获取两种格式的地图,Goole earth截取栅格图,MapInfo在栅格地图

14、的基础上绘制地图,最终制成MIF/MID格式的地图,作为Qt接口地图数据文件。下面是具体步骤:图2- 1 地标标于明显位置(1) 在Goole earth中找到华南理工大学北校区的范围,设置“显示经纬度”为小数格式,在校区内选取比较明显的位置添加地标,并记录下该位置相应的经纬度。地标是为了后面MapInfo可以配准这张地图,一般3个足够。地标越多,配准越精确,误差越小。笔者在此标了16个地标,如图2- 1比较有标志性的位置。(2) 地标标完后,调整缩放比例到整个校区都在视野内,调整右上角罗盘使视角达到近似90度的俯视角。然后保存此图像,默认是jpeg格式的,名为“华工”。这便是后面配准所需要的

15、栅格图了。(3) 在MapInfo中打开“华工.jpeg”,选择配准(Register)进入配准界面,投影方式选择Longitude/Latitude,在图像上标有地标的位置,仔细标上标号,并给标号输入之前记录下来的相应的经纬度,其中X为纬度,Y为经度。所有地标标记完毕,确定即可得到一张有经纬度有地图,即“华工.TAB”文件。(4) 在“华工.TAB”的基础上建立四个图层,依次为block.TAB, road.TAB, nodes.TAB, edge.TAB。在block.TAB中用多边形polygons工具按建筑投影形状画出各建筑和场地;在road.TAB以粗细不同的折线画道路;在nodes

16、.TAB以点的形式标出道路各节点;edge.TAB画出华工边界,并给整张地图标上四个顶点。如此完成保存后,菜单栏-表-转出各个表,保存为MIF格式。第三章 系统结构3.33.3.1. 硬件系统的介绍本文采用忆道公司的XSBase270开发平台,XSBase270开发平台基于 Intel/Marvell XSCALE 架构最新的 PXA270 嵌入式微处理器。最高主频可达 520MHz,可运行 Linux 2.4.21和 Linux 2.6.11的 Linux的操作系统,支持 Tiny-X、QT/E 等 GUI 嵌入式图形用户界面,提供完整的驱动和应用程序。同时还可以支持最新的 Windows

17、CE 5.0.NET操作系统。系统由模块板以及扩展板构成,扩展板接口资源丰富,可进行多功能项目开发。既适合作为计算机、电子、通信、软件等专业开设嵌入式软件课程的教学平台,又适合广大从事车载娱乐、工业控制、手持设备、医疗仪器的厂商和科研单位作为参考设计平台。如图3- 1,本设计主要用到该平台的外围设备TFTLCD和GPS模块。图3- 1 XSBase270开发平台3.2. 软件系统4.4.1.4.2.33.13.23.2.1. 操作系统的选择鉴于该平台支持两种操作系统,本文在开发之初应先做好选择。两者相比之下,Linux具有以下优点:(1)Linux是开放源代码,遍布全球的众多Linux爱好者都

18、是Linux开发者的强大技术支持者;Windows CE目前6.0内核全部开放,GUI不开放。(2)Linux的内核小、效率高;Windows CE相比,占用过多的RAM。(3)Linux是开放源代码的OS,在价格上极具竞争力,适合中国国情。Windows CE需要版权费用。(4)Linux不仅支持x86芯片,还是一个跨平台的系统,支持多种平台。 综上所述,结合本设计实际地图数据占用内存可能较大,故选择内核可剪裁的Linux系统。3.2.2. 导航软件系统的架构对于小型嵌入式导航系统,根据实际需要至少要能实现如下功能:(1) 定位: 结合GPS数据,对地图上显示GPS接收块所在的地点。(2)

19、最短路径搜索:根据用户输入的两个位置,在地图上显示最短的路线。(3) 地图漫游:可浏览整张地图,查看简单的位置事物信息。当前位置最短路径搜索放大正常大小地图导航退出地图显示窗口缩小退出导航工具栏图3- 2 GUI界面的设计雏形(4) 地图缩放:漫游或导航时可改变地图大小。(5) 地图导航:结合最短路径搜索的实时定位。根据实际需要,人机交互界面可设计如图3- 2所示,右栏为工具栏。而设计导航软件系统的结构如图3- 3所示。该软件系统的工作流程如下:首先进行数据初使化,如程序运行过程中所要用到的标志数,构建新指针;接着构建GUI界面,根据需图3- 3 导航软件系统结构图 数据,指针初使化 构建GU

20、I界面函数 地图层操作函数 重合节点清除函数 构建邻接矩阵和路径信息矩阵 启动Qt定时器,定时1s工具栏各槽函数触发GPS硬件串口驱动模块定时读取地图文件读取要只需要工具栏和一个Canvasview窗口作为视图窗口即可;然后读取地图数据并按一定方式存储起来并在Canvas中画出;紧接着把道路重合的结点清除,并初始化最短路径搜索所要用到的两个数字矩阵;这时才启动定时器,每隔1s读GPS模块的串口一次,并从读到的数据中提取有用信息存储起来,以供定位和导航所用。最后处于待命状态,等待用户输入相应的命令,通过相应的槽函数随时响应。为了使读者对此系统的运行流程了解更加明了,特给出如图3- 4所示的系统工

21、作流程图。图3- 4 导航软件系统程序流程图初始化构建界面读取地图数据并绘图清除道路重复节点开始初使化最短路径邻接矩阵和路径信息矩阵启动定时器AA是否有用户命令?否最短路径搜索放大缩小正常大小导航退出导航退出定位是响应相应的槽函数1s定时溢出?读取GPS数据验证并提取有用信息是否导航?定位否是是否第四章 用户图形界面的设计与实现12345.44.4.1. GUI的选择目前在常用的嵌入式GUI领域,广泛使用系统由嵌入式QT、Microwindows和MiniGUI三种,适于在嵌入式Linux上运行的,主要是奇趣公司(现为诺基亚公司)的Qt/Embedded和北京飞漫公司的MiniGUI。Qt是奇

22、趣公司开发的一个跨平台的C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础。 基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但Qt具有优良的跨平台特性、面向对象 、丰富的API、大量的开发文档等优点4。Qt/Embedded则是Troll

23、Tech公司发布的面向嵌入式系统的Qt版本。该公司2008年3月收归诺基亚旗下。MiniGUI是由北京飞漫软件技术有限公司开发的面向嵌入式系统的轻量级图形用户界面支持系统。自1999年发布第一个版本以来,MiniGUI已广泛应用于手持信息终端、机顶盒、工业控制系统及工业仪表等产品和领域5。笔者收集资料对比两者各自的特点如下:(1) Qt/E编程使用C+面向对象的所有机制。MiniGUI使用C语言,采用结构化编程。(2) MiniGUI对中文支持较好,Qt/E也可支持中文,但不像前者方便。(3) Qt/E使用QT自身一些基于C+附加的功能、信号和槽以及相应的宏编译(moc)机制。基于此强大开发功

24、能,为快速建立嵌入式GUI程序提供了很大的方便。而MiniGUI提供的功能模块较少,对于中高端手持设备的界面开发,MiniGUI使用较复杂。综上,权衡之下,入门较快,功能更加强大的Qt/E,作为本GPS导航软件系统的GUI是更好的选择。4.2. Qt介绍Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/Unix的Qt/X11。Qt/E(Qt/Embedded)是用于嵌入式Linux系统的Qt版本。Qt/E去掉了X Lib的依赖而直接工作于Frame Buffer上,因而

25、效率更高,但它并不是Qt的子集,而应该是超集,部分机制(如QCOP等)不能用于Qt/X11中。一般只要取对应的版本就能使在Qt/X11上能用的类在Qt/E中也能使用。这也正是Qt的方便之处,在宿主上编写完代码后,只需要根据不同平台的目标机用不同的工编译工具编译,就可在目标机运行,而不用修改代码。4.3. 开发环境的介绍44.14.24.31.2.3.4.4.1.4.2.4.3.4.3.1. 操作系统宿主机上要求安装有Linux操作系统,然后在该Linux系统下安装交叉编译工具链。在开发板建立eLinux操作系统(主机是Windows或Linux均可)。基本上可以有两种方法来建立宿主机上的Lin

26、ux系统:(1) 建立独立的主机Redhat Linux操作系统;(2) 在Window下,利用虚拟机管理软件,建立一个可以在Windows启用和管理的虚拟Redhat Linux操作系统。鉴于在虚拟机有如下优势:虚拟机也能够控制系统硬件;完全能够满足交叉编译环境需要,而且方便与Windows系统进行切换;虚拟机使用Windows下文件来作为硬盘空间,相对于双系统,不需复杂的硬盘分区;虚拟机在Windows下,只是几个文件而已,方便备份和恢复。而且在本实验系统中,Windows系统和Linux 系统都必不可少,故选择虚拟机方式来建立宿主机的系统。4.3.2. 交叉编译环境嵌入式系统的开发需要宿

27、主机(Host pc),因为嵌入式系统一般没有大容量的存储设备6。而由于host pc的处理器与嵌入式微处理器通常不同,为了生成能够在嵌入式系统中运行的代码,需要进行交叉编译。交叉编译,即在宿主机(x86)上编译可以在目标系统(ARM)上运行的二进制文件。开发板是嵌入式Linux操作系统,故交叉编译环境要求在主机的Linux操作系统下建立本系统交叉编译环境,即在主机的Redhat 9.0 Linux操作系统下建立。4.3.3. GUI开发环境本导航系统设计过程中需要用到三个版本的Qt库,版本如表4- 1所示工具软件描述变量声明Tmake1.11生成Makefile文件TMAKEDIR/TMAK

28、EPATH/PATHQt-embedded-2.3.7Qt库支持 libqte.soQTEDIR/LD_LIBRARY_PATH/PATH工具软件描述变量声明Qtopia-free-1.7.0应用程序开发包 桌面环境QPEDIR/LD_LIBRARY_PATH/PATHQt-x11-3.1.1Qvfb虚拟帧缓存工具Uic用户界面编辑器Qt Designer 图形设计器LD_LIBRARY_PATH_/PATH表4- 1 GUI编译工具表其中Qt-x11-3.1.1是现在Redhat9 Linux自带的Qt编程工具,包括Qvfb工具和Qt Desinger,可为我们设计图形用户界面节省不少时间,

29、提高设计效率。当程序在宿主机上运行正常后,在下载到目标机调试之前,要用Tmake1.11工具生成用于编译应用程序的Makefile文件,然后利用Qt-embedded-2.3.7的库和Qtopia-free-1.7.0重新编译代码,以便生成可在开发板上运行的版本。4.4. GUI设计4.44.4.4.4.1. Qt窗口类介绍如图3- 2所示的界面思想,本导航系统需要构建一个带有工具栏的窗口,地图显示窗口放在主窗口位置上。Qt为我们提供了多种窗口类,如QWidget,QMainWindow,QDialog等。他们的关系如图4- 1所示:低层类从高层类继承。图4- 1 Qt类继承关系图在Qt中,Q

30、MainWindow和不同的QDialog的子类是最普通的顶级窗口,即不被嵌入到一个父窗口部件的窗口部件。通常情况下,顶级窗口部件是有框架和标题栏的窗口。QMainWindow提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一个状态条。而QDialog类是对话框窗口的基类。对话框窗口主要用于短期任务以及和用户进行简要通讯的顶级窗口。如常见的“打开文件”对话框和“保存文件”对话框。一般情况下,如果是顶级对话框,那就基于QDialog创建,如果是主窗体,那就基于QMainWindow,如果

31、不确定,或者有可能作为顶级窗体,或有可能嵌入到其他窗体中,则基于QWidget创建。综上分析,结合本设计的需要,选择QMainWindow类创建本GUI界面的主窗口,而用QDialog类创建最短路径搜索对话框。4.4.2. 信号与槽机制图4- 2 信号与槽的连接原理为了响应用户在界面上的操作,Qt提供了信号(signal)和槽(slot)机制,这也是Qt程序相对于C+比较特殊也有非常方便的机制。当一个对象的状态发生改变时,它就会发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要接收怎样的signal,但他们可以通过connect关

32、联起来,如图4- 2所示。signal和slot机制真正实现了封装的概念,slot除了接收signal之外和其它的成员函数没有什么不同。这样在工具栏里就可能通过添加QAction类来表示不同的动作或工具,以供用户选择性操作。这些QAction作为信号发射端,QMainWindow作为信号接收端,即connect(QAction,SIGNAL(activated(),QMainWindow,SLOT(slot_n());在这里的QAction表示QAction声明的类,QMainWindow也表示其相应的类。Activated()是该动作的触发信号,当用户点击该工具动作时就会触发该信号发射,而s

33、lot_n()作为该动作的响应函数就会被调用执行。详细的创建步骤和关键代码请看下文。4.4.3. 主窗口的创建首先构建一个继承自QMainWindow的类作为顶级窗口部件,为了方便程序接口,将在此中声明整个系统用到的必要的指针和成员函数。包括工具条QToolBar,动作QAction和槽函数等。对于没必要的菜单栏,选择省略。对应本设计的功能,共声明了8个动作指针以及与之对应7个槽函数。在成员函数creatActions()中定义这些动作指针,并把通过connect()函数将它们一一关联起来。代码如下:connect(CurPositionAction, SIGNAL(activated(),t

34、his, SLOT(CurPositionRespond();connect(PathSearchingAction, SIGNAL(activated(),this, SLOT(PathSearchingRespond();connect(ZoomInAction, SIGNAL(activated(),this, SLOT(ZoomInRespond();connect(ZoomOutAction, SIGNAL(activated(),this, SLOT(ZoomOutRespond();connect(NormalSizeAction, SIGNAL(activated(),this

35、, SLOT(NormalSizeRespond();connect(NavigationAction, SIGNAL(activated(),this, SLOT(NavigationRespond();connect(ExitNaviAction, SIGNAL(activated(),this, SLOT(ExitNaviRespond();connect(ExitAction, SIGNAL(activated(),this, SLOT(close();最后一个槽函数close()是QMainWindow类自带的关闭窗口槽函数,用于关闭本GUI界面。这样,只要在各个槽函数中写好事件处理

36、代码,就可以响应用户的各个工具选择了。接着用QAction:addTo()添加到工具栏中。接下来创建一个QCanvas画布作为地图绘图平台,再用QCanvasView窗口关联此容器,这样画布中的项目才能显示出来,即QCanvasView类为该画布提供了一个视窗,外界才能通过此视窗看到画布中的东西。然后通过QMainWindow:setCentralWidget()把QCanvasView类窗口设置为主窗口的中心部件。这样主界面创建完毕。4.4.4. 最短路径搜索对话框图4- 3 最短路径搜索对话框声明一个QDialog类对话框,标题为“PathSearching”,以此为父组件,添加三个QLa

37、bel标签,两个QListBox列表框和两个QPushButton按钮。三个标签的内容,分别为“Please choose the Beginning and terminal”、“Beginning”和“Terminal”,是该对话框的提示内容。两个列表框分别显示着学校各个地点,用户可从两表中分别选择起点和终点。两个按钮内容分别为“OK”和“Exit”,选择好起点与终点后按OK即可得到最短路径,按Exit即退出并取消此次操作。如图4- 3所示。为了知道用户选择的是哪一个地点,需要在记录下起点与终点。可通过槽函数修改(记录)全局变量beginning和terminal来完成。代码如下:conn

38、ect(beginList, SIGNAL(highlighted(int), this, SLOT(returnBeginning(int);connect(terminalList, SIGNAL(highlighted(int), this, SLOT(returnTerminal(int);当用户选择列表中的某一项时,列表的highlighted(int)信号被触发,发射该项的序号,以上的两个槽函数即修改全局变量以记录下起点与终点的序号,便于后面查找处理。当用户按下OK按键时,触发槽函数findShortestPath(),在这里面分两种情况进行处理,一种是用户已经选好了起点和终点,那

39、么就可直接进入最短路的搜索和绘制;另一种是用户没选择起点或终点,或全都没选,这时将出现提示,让用户返回重新选择,或直接放弃最短路径搜索。而按下Exit则直接退出此次路径搜索。如图4- 4所示,只要漏选了起点或终点都会出再提示,返回再选或取消操作。图4- 4漏选起点或终点提示第五章 嵌入式GIS功能的实现设计好GUI界面后,在实现本导航系统的功能之前还需要两方面的数据,即地图数据和GPS数据。下面将介绍这两种数据的获取关键代码和地图绘制方法。6.1.2.3.4.5.5.1. 地图读取5.1.1. 地图图元数据格式地图文件是第二章所作的block.mif/mid,road.mif/mid,node

40、s.mif/mid和edge.mif/mid等文件。在读取之前,要先清楚这些文件的数据存放格式,才能有的放矢地进行读取操作。如前文对于*.mif/mid文件的格式所述,mif文件存放的是矢量图形数据,具体举例如下,例如本文的block.mif文件中的多边形图元,一个多边形图元的数据格式如下:Region numpolygons numpts1 x1 y1 x2 y2 : numpts2 x1 y1 x2 y2 : Pen (width, pattern, color) Brush (pattern, forecolor, backcolor) Center x y 其中numpolygons表

41、示组成该多边形的多边形的个数,因为它有可能是若干个子多边形合并起来的,在数据方面仍然以多个多边形的格式表示。numpts表示子多边形的顶点个数。Xn,Yn表示每一个顶点的经纬度。Pen是画笔,用于画多边形的边缘,其属性包括线宽,风格(实线或是虚线等格式),颜色。Brush属性包括图形的填充风格和颜色。为了方便,在画图的时候,笔者将前景色和背景色设置相同。Center是该图形的中心点。其他图元数据的格式在这里就只介绍涉及到的折线图元和点图元,如下所示:折线图元,其中的Smooth表示该线经过平滑处理:Pline numpts1x1 y1 x2 y2 : PEN (width, pattern,

42、color) Smooth 点图元,Symbol表示该点的属性,包括形状、颜色和大小。Point x y Symbol (shape, color, size)而在各个mid文件中则存放着与其对应的mif文件中的各个图元的信息,如block.mid保存了各个多边形所代表的地名或建筑物的名字。5.1.2. 地图数据读取准备在读取之前还需要根据不同的地图数据建立不同的结构体或类来存放。鉴于地图数据只有多边形,折线和点以及文本三种数据,对应着建立以下数据结构体和类。typedef struct double longitude; double latitude;stLatLon;此结构体用于存放一个

43、点的经纬度。typedef struct int x; int y;stRecPlane;此结构体用于存放一个点通过投影转换后的平面坐标。在这里用整形是因为Qt3的QCanvas容器暂时只是支持整形坐标点。所以在做投影转换后,直接保存为整形,避免后面再转换。如果在Qt4上,图形容器可支持double型坐标数据,那么,这里可改为double型的,在投影转换函数修改相应的数据类型即可。对于图元,本文建立了三个类,用于存放多边形区域、折线和点三种图元。具体如下:class Map_Regionpublic: Map_Region(QCanvas *canvas); Map_Region();publ

44、ic: QCanvasText *regionName; QCanvasPolygon *mapPolygon; /;在该类中直接使用Qt自带的QCanvasText类和QCanvasPolygon类分别声明了指向该多边形名字的指针和该多边形的指针。QCanvasText类带有可以设置位置的成员函数,即可以设置其中QCanvas类容器中的坐标。这样,就可以把多边形数据中的Center作为文字的位置坐标,当然,要先经过投影转换才能在添加到容器中的正确位置上。class Map_PolyLinepublic: Map_PolyLine();public: / QCanvasText name; Q

45、ValueList mapPolyLine;折线图元类,主要用于存放代表道路的折线图元,而折线又可看成是多段线段构成,那么在读取的时候就可以把每条折线分成若干条直线来保存,只需要把每两个连续的点记录为一条线段即可。故在此链表的方式存放一个折线图元的所有直线。class Map_Pointpublic:Map_Point();public:stLatLon latlon; QPoint coordinate;/这里也可以用前面的stRecPlane声明,两者都是整形的。 QString name;/如果要在地图上显示节点名,可以用QCanvasText类。;点图元类,用于存放点数据,包括其经纬度、平面坐标和文字描述。建立好单个图元存放类后,为了方便管理,可以用通过链表的方式来管理这些图元,这样不但可以使用物理存储区的不连续块,还可以有不同的模板类来管理不同类型的数据,大大优于数组。本文选择用Qt3自带的数据容器QValueList类,是一个提供基础值列表模板的类,可以管理不同类型的数据,而且该类有多个方便的成员函

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号