毕业论文 基于Android系统的公交信息查询系统_第1页
毕业论文 基于Android系统的公交信息查询系统_第2页
毕业论文 基于Android系统的公交信息查询系统_第3页
毕业论文 基于Android系统的公交信息查询系统_第4页
毕业论文 基于Android系统的公交信息查询系统_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于android系统的公交信息查询系统摘 要:由于手机价格低廉,使用方便,它已成为人们获得在生活工作上等各种信息服务的最佳选择。借助于无线互联网,基于手机的公交查询系统能为客户随时随地提供公交信息。目前也已经有了不少公交车查询系统,但是这些系统多少都存在一些问题,如数据更新较慢、不准确等。本文在研究分析总结这些问题的基础上,设计并实现了基于手机的公交信息查询系统。系统运行于android平台,地图部分使用谷歌地图,主要采用java语言编写,数据库采用sqlite,以tomcat作为服务器。实现了定位当前位置、查找位置并在地图中显示、车次查询、站点查询、站站查询、换乘查询等功能。该公交查询系统

2、不仅实现了查询结果的文本显示,而且实现了文本和电子地图的同时显示,使系统更直观,更方便用户的查询。关键词:公交查询;android平台;sqlite;谷歌地图一、前言1、问题的提出及研究意义城市公共交通以其覆盖面广、经济快捷的特点,目前仍然是绝大多数出行者的首选方式,也是各地城市政府大力发展的一种交通方式。针对目前的实际情况,大力发展城市公共交通,鼓励并吸引市民选择乘坐公交出行,将会大大减弱交通压力,从极大程度上改善交通状况。改善城市的公共交通,为市民出行创造良好的环境,其中很重要的途径之一便是提高公交的服务水平。通过给乘客提供高质量的服务,来吸引市民选择乘坐公交出行。影响城市公交服务水平的因

3、素主要有四个:方便性、迅捷性、经济性、舒适性。改善公交服务,就必须从这四个方面综合考虑。一般情况下,各城市采取的措施有:(1)合理布设公交线路网。对新建的的线路和站点,认真考虑公交线网密度的高低、换乘系数的大小、发车频率的高低和乘客的出行需求容量,合理布局,以方便乘客出行。(2)改善公共交通设施。建立电子站牌,加载gps定位装置,为乘客提供更多更便捷的服务。改善公交车内环境和设施,增设和改进车辆的专用服务设施,使之更贴近于需要帮助的弱势群体,以提高公交出行的舒适性。(3)提高公交车速。设置专用的公交车道,配置良好的公交车型,以提高公交车运行速度,从而使公交出行迅猛快捷。(4)建设智能公交系统。

4、利用当代高新技术:电子、信息、通信、计算机、gps、gis等,将交通系统中的人(交通参与者:乘客和管理者)、交通设施(道路等)和交通工具(车辆等)有机联系起来,建立智能公交系统,如公交优先系统、公交查询系统、智能化行车系统等,为乘客提供实时的更多更全面的出行信息,更好的为乘客服务1。对于一个城市来说,公交线路网一般不会随便更改和新建,而改进公交设施因为需要投入很大的物力和财力,对于城市建设来说并不一定可行。另外,为了安全起见,城市内的公交车速都有限制,因此,改善公交服务水平,吸引市民或游客乘坐公交车出行,还必须更多关注于智能公交系统的建设。在智能公交系统中,公交查询系统的服务是目前最贴近乘客日

5、常生活的,也是最能让乘客亲身体会公交服务水平高低的方面。因此,如何给乘客提供一个良好的平台,让乘客选择或是推荐合适的乘车方案出行,以节约乘车时间,缩短到达目的地的乘坐距离,减少乘坐的票款成本,才是提高公交服务水平最值得关注的问题之一2。越来越多的人倾向通过上网获得和共享信息,随着网络应用的普及而不断的发展,internet的应用成了世人关注的焦点3。公交查询系统不仅要能为乘客提供全面的公交信息,还要考虑面向大众、实时性和丰富性。为此我们提出了设计并开发一个基于android平台的公交查询系统。城市公交信息的查询应该是基于城市中现有公交线网的资源,为乘客尽量提供全面的出行路线和站点信息。其中最重

6、要的一项就是针对乘客不同的出行需求,给出合理而又有建设性的乘车信息和出行意见。2、课题研究现状2.1 国外研究现状美国十分重视公交查询的研究和应用,其中一个重要的目的就是通过提供及时准确的信息和服务,吸引更多的出行者使用公共交通,从而促进公交发展。他们发展公交查询的特点是:(1)提供快捷、方便的电话咨询服务。(2)与定位技术结合,提供实时信息服务。(3)触摸屏在公共场所广泛使用。(4)查询与网络结合。针对日本的交通拥挤等问题,东京都交通局开发了城市公共交通综合运输控制系统。旨在改进公共交通服务,重新赢得乘客。日本对城市公交网络的建设也十分重视,利用智能交通系统实现了综合管理,大大改善了交通状况

7、。现在,许多地方的城市交通查询系统还借助了全球定位和地理信息系统,为车辆提供全天置、速度和信息管理等服务4。欧洲一些国家,如英国、意大利、芬兰,近年来研究取了得较好的效果。通过改善包括信息服务在内的公交服务,从而对解决城市交通问题,取得了明显的社会经济效益5。2.2 国内研究现状与欧美国家相比,我国的公共交通事业发展还比较落后。公交智能化水平还较低,绝大部分是沿袭旧的运营体制。目前我国的城市公交查询系统的发展还处于一个相对落后的水平,广大乘客可以获得信息的方式很少,公交线路和站点信息的完整性和准确性得不到保证,我国公交信息查询的现状特点如下:(1)乘客可以获得的公交信息很少,而且方式主要是常规

8、手段。我国乘客一般获得公交信息的方式局限于电话、交通图、向熟人问讯等常规方式。乘客可以获得的公交信息很少,除去线路、站点等基本信息以外,车辆运行过程中的时空信息基本上没有。(2)乘客出行获得信息困难。(3)公交查询网站访问量差距较大且普遍不高。(4)我国公交查询系统还处于初步阶段,查询信息单一且缺乏合理性。现在网上许多的公交查询网站,绝大部分都只有站点、线路,以及换乘查询,有的还有电子地图查询等功能,但是对于城市中的一些比较有代表性的标志性地点介绍和查询等功能,做的比较好的很少。(5)查询方式单一,使用效率低,没有充分利用各种通信资源。目前的公交查询系统大多数只能通过web方式查询,但人们对公

9、交信息的需求往往是即时的、突发的,出行人不大可能在公交站牌附近为了找公交信息去网吧上网。2.3 基于手机的公交查询系统研究现状手机凭借小巧可人的身材、n合一的功能特色,成为数码时代人们日常生活中不可或缺的一部分。目前大多数基于手机的公交查询系统都是采用短消息的形式,虽然基于短消息的查询不受空间约束,但可能受到运营商的一些约束:硬件方面,如果遇到服务器、网络繁忙时段或信号盲区,导致用户请求长时间得不到响应;软件方面,运营商不一定提供了此类的查询服务,还有服务受到限制(如欠费停机、限定漫游等,此时根本无法使用这些服务)。另外,短信方式查询还缺乏互动性,一些与用户必要的交流难以实现。资费始终是消费者

10、首要关心的问题之一。虽然基于短消息的公交查询也方便灵活,但是每次使用都会产生一定费用6。3、本文组织结构第二部分为关键技术,主要介绍本题目所设计的所有关键技术和算法,第三部分到第六部分详细介绍软件生命周期各个阶段的具体工作,第七部分对整个毕业设计进行了总结,最后部分为致谢。4、本章小结本章主要设计题目的研究目的、意义以及现状,相当于软件工程的问题定义和可行性研究部分,对于整个系统的开发有着重要的意义,相当于进行了一次简单的系统开发。二、关键技术1、android平台相关内容介绍1.1 android操作系统简介android一词的本义指“机器人”,同时也是google于2007年11月5日宣布

11、的基于linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。android是基于linux内核的操作系统,早期由google开发,后由开放手机联盟开发。它采用了软件堆层的架构,主要分为三部分。底层以linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以java作为编写程序的一部分。另外,为了推广此技术,google和其它几十个手机公司建立了开放手机联盟。android在未公开之前常被传闻为gphone。目前最新版本为android2.2。2010年谷歌开发者大会上,android2.

12、2发布,名称为froyo,意为冻酸奶。1.2 android架构图2-1显示的是android操作系统的主要组件,每一部分将会在下面具体描述。android同一个核心应用程序包一起发布,该应用程序包包括email客户端,sms短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用java编写的。 android 应用程序框架 开发者也完全可以访问核心应用程序所使用的api框架。该应用程序架构用来简化组件软件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。该应用程序重用机制使得组件可以被用户替换。 图2-

13、1 android 系统架构图以下所有的应用程序都由一系列的服务和系统组成,包括: (1)一个可扩展的视图(views)可以用来建应用程序,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至包括一个可嵌入的web浏览器。(2)内容管理器(content providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。 (3)一个资源管理器(resource manager)提供非代码资源的访问,如本地字符串,图形,和分层文件(layout files)。 (4)一个通知管理器(notification

14、 manager)使得应用程序可以在状态栏中显示客户通知信息。 (5)一个活动类管理器(activity manager)用来管理应用程序生命周期并提供常用的导航回退功能。 android程序库 - android 包括一个被android系统中各种不同组件所使用的c/c+库集。该库通过android应用程序框架为开发者提供 服务。以下是一些主要的核心库: 系统c库 - 一个从 bsd 继承来的标准c系统函数(libc),专门为基于embedded linux的设备定制。媒体库 - 基于packetvideo opencore;该库支持录放,并且可以录制许多流行的音频视频格式,还有静态印像文件

15、包括mpeg4, h.264, mp3, aac, amr, jpg, png。 surface manager - 对显示子系统的管理,并且为多个应用程序提供2d和3d图层的无缝融合。 libwebcore - 一个最新的web浏览器引擎用来支持android浏览器和一个可嵌入的web视图。 sgl - 一个内置的2d图形引擎3d libraries - 基于opengl es 1.0 apis实现;该库可以使用硬件3d加速(如果可用)或者使用高度优化的3d软加速。 freetype - 位图(bitmap)和向量(vector)字体显示。 sqlite - 一个对于所有应用程序可用,功能强

16、劲的轻型关系型数据库引擎。android运行库 android包括了一个核心库,该核心库提供了java编程语言核心库的大多数功能。 每一个android应用程序都在它自己的进程中运行,都拥有一个独立的dalvik虚拟机实例。dalvik是针对于同时高效地运行多个vms来实现的。dalvik虚拟机执行.dex的dalvik可执行文件,该格式文件针对最小内存使用做了优化。该虚拟机是基于寄存器的,所有的类都经由java汇编器编译,然后通过sdk中的dx工具转化成.dex格式由虚拟机执行。 dalvik虚拟机依赖于linux的一些功能,比如线程机制和底层内存管理机制。linux内核android的核心

17、系统服务依赖于linux 2.6内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。linux内核也同时作为硬件和软件堆栈之间的硬件抽象层7。2、tomcat技术tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用。 它的特点是apache 为html页面服务,而tomcat 实际上运行jsp 页面和servlet。另外,tomcat和iis、apache等web服务器一样,具有处理html页面的功能,另外它还是一个servlet和jsp容器,独立的servlet容器是tomcat的默认模式。不过,tomcat处理静态html的能力不如apac

18、he服务器。 3、http协议http是建立在tcp网络协议基础上的用于www数据传输的标准协议。通过http协议搜索引擎与www服务器建立通信机制。向服务器提出对网页各种特征提取的请求,并从服务器的应答中获得相应数据。4、系统实现工具及运行环境 开发工具是:eclipse ,android sdk,adt。软件运行环境:操作系统:android。5、本章小结本章主要介绍了系统所采用的关键技术,这些关键技术是构成系统的主要技术因素,并为系统的构造提供了理论依据。三、系统需求1、用户需求越来越复杂的公交网络使得人们经常非常的困惑,为了解决这些问题,在android这个平台上,设计开发一个公交信息

19、查询系统。系统应该具有以下功能:(1)实现地图的显示,并且能够对地图进行拖动、放大、缩小。(2)能够定位手机用户当前的位置,并且能够在地图中用红色的圆圈将这个位置标注出来。(3)能够查找到手机用户指定的位置,并且能够在地图中标注出来;当用户设定了当前城市以后,能够直接显示当前城市的地图,这样用户需要查看经常用到的当前城市地图时就不需要再查找整个地图,既能节约时间,又能为用户节约网络流量。(4)用户应该能够从服务器中下载公交数据,当公交信息需要更新时,应该由管理员在服务器端进行更改,手机用户只需要下载新数据即可;数据库应该直接存放在手机中,这样就不必每次都登录服务器,从而提高查询速度。(5)系统

20、应该可以进行车次查询,为用户提供某一路公交车的信息包括公交车名、起始时间、通车路线等。并且应该能在地图中画出通车路线。(6)系统应该能够进行站点查询,显示出经过某个站点的所有公交车信息。(7)系统应该能查询到在两个站点之间通车的所有公交车。(8)可以进行换乘查询,当两个地点之间没有直达车时,给出换乘方案。用户界面上尽量友好,让用户能够方便的操作得到想要的查询结果。用户可以自己选择下载所需城市的公交数据,自己控制地图的大小等。2、 系统设计的原则(1)实用性原则实用性原则主要体现的是所设计的系统能够解决实际问题,是所有应用系统设计最基本的最主要的原则,直接关系到系统成败8。基于手机的公交信息查询

21、系统可以随时随地为人们解决出行时的公交选择问题,使用户方便的获取到真正想要获得的信息。(2)可靠性原则可靠性是系统设计的立足点,若设计的系统故障频繁,就不能够满足用户的要求9。设计的公交查询系统应该从以下几个方面提高其可靠性:故障发生时应给出提示,提示用户应该如何操作来排除故障;通过测试检测系统漏洞,完善系统等。(3)易于更新和维护系统的设计,能够实现有关空间数据和属性数据的实时更新和维护10。在系统维护时只须在服务器上维护即可,数据的更新和维护要简单可行。(4)操作简便操作简单是软件设计过程中需要重视的问题,应精心设计用户接口、使系统用户界面友好,便于用户理解。具体表现在: 用户输入信息时,

22、系统会给出提示信息,例如:在车次查询时,需要用户输入要查询的车次,在用户输入的编辑框中先填入例子“1路”。 界面简洁明了,容易操作。 数据的显示和提示信息要简单明了。 当用户输入信息有误时,有信息提示;当没有查到满足条件的结果时会弹出对话框进行提示11。3、 本章小结本章描述了公交信息查询系统的基本用户需求比如用户界面等,同时介绍了本软件的设计原则以及运行环境。第4章 概要设计1、系统体系结构该系统的体系结构如图4-1所示。 图4-1 系统体系结构2、模块设计2.1 程序模块划分程序模块划分如图4-2所示。2.2 程序模块功能描述(1)地图显示模块该模块的功能就是实现地图的显示,并且能够对地图

23、进行拖动、放大、缩小。当用户点击主界面上列表中需要显示地图的item时,显示谷歌地图,单击地图界面后能够浮现出放大、缩小按钮,每次单击放大(缩小)按钮都能够将地图放大(缩小)一个级别,谷歌地图的大小共有24个级别,放大级别越高地图显示结果越详细。按住鼠标左键不放就可以拖动地图。(2)gps定位模块本模块利用系统中的gps服务实现定位。但是由于模拟器中没有gps模块,所以需要通过ddms虚拟坐标,模拟卫星获得当前位置并发送给手机的过程。获得location以后就可以在地图中找到这个位置,并将地图更新,使这个location位于地图中央,并用红色的圆圈标识出来。(3)查找定位模块本模块实现的功能是

24、在地图中查找用户要查找的地点,并在地图中用红色圆圈表示。这个模块从编辑框中捕获用户要查找的地点名以后根据这个地名字符串在地图中查找最相近的location,找到之后更新地图公交信息查询系统地图显示模块地图图层模块gps 定位模块公交查询模块公交换乘模块公交数据下载模块数据更新模块查找定位模块到相应的geopoint。图4-2 程序模块划分图 (4)公交查询模块公交查询模块的主要功能分为3个:车次查询,站点查询,站站查询。车次查询是从数据库中查询某一路公交车的信息,包括起始时间,公交路线等,并且可以在地图中画出这路公交车的通车路线;站点查询可以获得经过某个站点的所有公交车,查询结果以列表的形式显

25、示,单击一项会显示该路公交车的详细信息;站站查询与站点查询类似,是获取在两个站点之间通车的公交车次。(5)公交换乘模块公交换乘模块的功能是:用户给出起点和终点,选定方式(开车、乘坐公交车、步行)后,系统查询行车路线,并以列表列出,最终采取哪条路线由用户单击选择查看详细信息。该模块是利用系统提供的路径规划模块实现。(6)公交数据下载模块本模块通过http协议,与web服务器进行连接,并下载公交数据。手机上通过http协议来获取网页一般会有500ms的延迟,网页请求过程是手机客户端访问网页的最大瓶颈所在。该模块通过指定url连接到tomcat服务器,从web服务器上获得所选城市对应的公交数据以流的

26、方式下载到手机的sdcard上,为了减少处理速度,采用下载与存入数据库并行的方式。在该模块中将获得的公交数据分成公交车名、起始时间、公交路线三段后按照字段存入sqlite数据库中。(7)数据更新模块本模块实现管理员对于公交数据的管理更新。公交数据是存放在服务器上的,所以当公交数据需要更新时,管理员在服务器端更新文件,手机用户只需要从服务器重新获取新数据即可。(8)地图图层模块该模块主要功能:在谷歌地图上增加图层。例如:在地图上画出某一路公交车的行车路线,在地图上用红色圆圈标识要查找的地点等。3、功能-模块对照表功能-模块对照表如表4-1所示。4、本章小结本章描述了系统的体系结构,详细描述了系统

27、的具体模块划分和模块的层次机构,并详细描述了各个模块的功能,为详细设计做好了铺垫。表4-1 功能模块对照表模块名称模块功能地图显示模块显示地图,实现地图的拖动、放大、缩小gps定位模块定位当前位置查找定位模块在地图中查找指定位置,并标示出来公交查询模块车次查询、站点查询、站站查询公交换乘模块实现路径规划公交数据下载模块从服务器下载公交数据并存入数据库数据更新模块管理员对公交数据的管理地图图层模块在地图上增加图层五、详细设计1、地图相关功能模块1.1 地图显示模块(1)模块描述该模块主要功能:显示google地图,并且能够对地图进行拖动、放大、缩小。主要变量:private mapview ma

28、pview:mapview对象。主要函数: setcontentview(int layoutresid) 功能:为界面设置布局,其中参数layoutresid是布局文件。 setbuiltinzoomcontrols(boolean bool) 功能:参数设置为true时,地图可以控制,即可以进行拖动、放大、缩小。(2)具体实现android系统集成了googlemap功能,要在自己的系统中使用谷歌地图首先要申请apikey,获得apikey以后在清单文件androidmanifest.xml里添加“”另外,还需要添加3个权限access_fine_location,access_coars

29、e_location和internet并且要在使用googlemap的layout中手动添加控件,最后就是继承mapactivity,而不是单纯的activity 。(3)源文件说明用到地图显示的模块有三个: map_browse.java:实现地图浏览功能。 gpslocation.java:实现gps定位的类。 searchlocation.java:在地图中查找指定位置的类。 showcurrentcity.java: 显示当前城市的类。1.2 gps定位模块(1)模块描述主要功能:利用gps服务定位用户当前位置。主要变量和方法是:主要变量: private locationmanage

30、r mlocationmanager01:获取系统中位置服务的变量。 private mapview mmapview01:地图视图对象。 private geopoint currentgeopoint:当前位置的geopoint,由经纬度构成。方法: private geopoint getgeobylocation(location location):传入参数location,将这个location转换成geopoint。 public void refreshmapviewbygeopoint(geopoint gp, mapview mv, int zoomlevel, boole

31、an bifsatellite):更新地图mv到gp点,将地图移至以gp为中心的位置,zoomlevel是地图的放大级别,最后一个变量表示是否显示卫星图。 private viod processlocationupdated(location location):当手机收到位置更改,将location传入geopoint及mapview,同时更新地图到新的位置。(2)具体实现主要的实现方法有:通getsystemservice(context.location_service)开启系统的gps服务,通过getlocationprovider (locationmanager lm)获取到符合

32、条件的位置,之后将获取到得location转化成经纬度格式的geopoint,然后调用refreshmapviewbygeopoint(geopoint gp, mapview mv, int zoomlevel, boolean bifsatellite)更新地图到这个gp点。(3)文件说明gpslocation.java:实现gps定位的类。(4)流程逻辑目标位置通过locationmanager开启gps服务通过locationprovider获取location将location转化成geopoint更新地图到geopoint在地图中标注当前位置图5-1 gps定位模块流程逻辑1.3

33、查找定位模块(1)模块描述主要功能:在地图中查找用户要查询的位置,并用红色圆圈标注出来。主要变量以及方法如下:主要变量: private mapview mmapview01:地图视图对象。 mapcontroller mmapcontroller01:控制地图大小以及是否可以拖动的变量。主要方法: setonclicklistener(new button.onclicklistener( ):对查询按钮单击时间的监听,当用户单击查询时进行响应。 private geopoint getgeobyaddress(string strsearchaddress):以要查询的地址名为参数,通过地

34、址名在地图中查找这个地址的geopoint。(2)具体实现系统界面中用了三个控件:edittext,button,mapview。用户在edittext中输入要查询的地点名称,单击查询按钮以后调用getgeobyaddress(string strsearchaddress)函数进行查询,将获得的结果传递给refreshmapviewbygeopoint(geopoint gp, mapview mv, int zoomlevel, boolean bifsatellite) ,对显示的地图进行更新,更新至查询地点,并用红色圆圈标注要查询的地点。(3)文件说明searchlocation.ja

35、va:查询定位的java源文件。(4)输入项所要地点名称。(5)输出项将查询到的结果在地图中标注出来。(6)处理流程如图5-2所示。将地图移至这个geopoint并标注输入要查询的地点名称以地点名为参数获取geopoint图5-2 查找定位模块处理流程2、公交查询功能模块2.1 车次查询模块(1)模块描述该模块的主要功能是:查询某一路车的信息,包括公交车名,通车起始时间以及通车路线。模块功能实现类: forbusinfo类。接口中用到的变量:private string busline:保存获取的公交车的通车路线。forbusinfo类主要变量和方法如下:主要变量: private datab

36、sehhelper events:数据库的辅助类对象,用来对数据库进行操作。 sqlitedatabase db :数据库类的对象。 cursor mcursor:从数据库中查询到得结果进行读取、写入的接口,存储查询结果列表。主要方法:public void ok ():单击确定后响应的函数,在数据库中查询edittext中的车次信息,将查询到的信息显示在busdetailedinfo布局界面中。(2)具体实现点击确定按钮后判断edittext是否为空,若为空给出提示,否则在数据库中进行查询,关键代码:sqlitedatabase db = events.getreadabledatabase

37、();cursor mcursor =db.query(true, table_name, new string busnum, time, busline, busnum=? ,new string edit1.gettext().tostring(), null, null, null, null);查询结果为空弹出对话框进行提示,若结果不为空就将查询到结果显示在busdetailedinfo布局界面中。对于这个界面中的“在地图中显示”按钮进行监听,单击时则将所查到结果中的busline存入bundle中,以intent的方式启动drawline这个java类,将通车路线在地图上画出来。(

38、3)文件说明forbusinfo.java:查询某一路公交车的信息的类源文件。(4)输入项要查询的公交车名。(5)输出项该路公交车的详细信息,如起始时间、通车路线等。(6)流程逻辑流程逻辑如图5-3所示。输入要查询的车次名称在数据库中进行查询,返回cursor提示用户输入no将查询到的信息在界面中显示yesno车次查询结束提示不存在yes车次为空cursor为null图5-3 车次查询模块流程逻辑2.2 站点查询模块(1)模块描述该模块的主要功能是:查询经过某个站点的所有公交车,查询结果以列表的的形式列出,列表每一项包括公交车名,通车起始时间以及通车路线。焦点移到某一项时该路公交车的通车路线以

39、走马灯(文字从右向左滑动显示)的效果显示。点击其中一项,会显示这一路公交车的详细信息。模块功能实现类: busstopinfo,showstopinfo,showclick类。接口中用到的变量:public stopname:保存要查询的站点名称。busstopinfo 类主要变量和方法如下:主要变量:bundle bundle :将不同类型的变量映射到一个字符串,在这里将编辑框中的内容映射到stopname中,以便与其他activity进行通信传递要查询的站点名称。showstopinfo类主要变量和方法如下:主要变量: private static string from = busnum

40、,time, busline :与后面的to数组相结合,显示查询结果时,公交车名,起始时间,通车路线3个字段与他们的位置的映射关系。 private static int to = r.id.num, r.id.time , r.id.busline。 simplecursoradapter adapter:将查询结果按照from,to的方式进行映射,显示在列表中。主要方法:protected void onlistitemclick(listview arg0, view arg1, int arg2, long arg3):单击列表中某一项后响应的函数,根据arg2判断单击的是哪一项,将这

41、一路公交车的信息存入bundle中,将这些参数传递给showclick类,在showclick类中显示公交车的详细信息。(2)具体实现点击确定按钮后判断edittext是否为空,若为空给出提示,否则在数据库中进行查询,关键代码:sqlitedatabase db = events.getreadabledatabase();cursor c = db.query(table_name, new string _id,busnum,time, busline, busline like ? , new string%+stopname+%,null, null, null); 查询结果为空弹出对

42、话框进行提示,若结果不为空就将查询到结果显示在stopinfo布局界面中。界面最上方的标题设置为经过+stopname+的公交车有:。然后对单击事件进行监听,单击某一项以后将该项公交车信息传递给showclick类,在showclick类中完成公交车详细信息的显示。(3)文件说明busstopinfo.java:提示用户输入要查询的站点名称的类源文件;showstopinfo.java :对busstopinfo传入的站点名称进行查询,并将查寻结果显示在列表中;showclick.java:显示所单击公交车的详细信息。(4)输入项要查询的站点名称。(5)输出项经过该站点的所有公交车,以及这些公

43、交车的信息。(6)流程逻辑流程逻辑如图5-4所示。2.3 站站查询模块(1)模块描述该模块的主要功能是:与站点查询类似,查询在两个站点之间通车的所有公交车,查询结果以列表的的形式列出,列表每一项包括公交车名,通车起始时间以及通车路线。焦点移到某一项时该路公交车的通车路线以走马灯(文字从右向左滑动显示)的效果显示。点击其中一项,会显示这一路公交车的详细信息。模块功能实现类:stop2stopresult,stop2stop,showclick类。主要变量方法等与站点查询类似,在这里不再赘述。输入要查询的站点名称在数据库中进行查询,返回cursor提示用户输入no将查询到的信息在界面中显示yesn

44、o站点查询结束提示不存在yes站点为空cursor为null图5-4 站点查询模块流程逻辑(2)具体实现点击确定按钮后判断两个edittext是否都不为空,若有一个或者两个为空给出提示,否则在数据库中进行查询,关键代码:sqlitedatabase db = events.getreadabledatabase();cursor c = db.query(table_name, new string _id, busnum, time, busline, busline like ? or busline like ? , new string%+stopname+%+stopname2+%,

45、%+stopname2+%+stopname+%,null, null, null);查询结果为空弹出对话框进行提示,若结果不为空就将查询到结果显示在stopinfo布局界面中。界面最上方的标题设置为经过+stopname+和+stopname2+的公交车有:。然后对单击事件进行监听,单击某一项以后将该项公交车信息传递给showclick类,在showclick类中完成公交车详细信息的显示。(3)文件说明 stop2stop.java: 提示用户输入要查询的两个站点名称的类源文件。 stop2stopresult.java :对stop2stop传入的站点名称进行查询,并将查寻结果显示在列表中

46、。 showclick.java:显示所单击公交车的详细信息。(4)输入项要查询的两个站点名称。(5)输出项在这两个站点间通车的所有公交车,以及这些公交车的信息。(6)流程逻辑流程逻辑如图5-5所示。2.4 公交换乘模块(1)模块描述该模块功能:在两个地点之间进行路径规划,可以寻找三种交通工具(自己开车、乘坐公交车、步行)的最佳的行车路线,如果两个站点之间没有直达的公交车,系统会给出可行的换乘方案。这个模块是利用android系统中内置的路径规划模块实现。(2)关键代码intent intent = new intent(); intent.setaction(android.content.

47、intent.action_view); /* 传入路径规划所需要的地标地址 */ intent.setdata ( uri.parse( geopointtostring (fromgeopoint) +&daddr=+geopointtostring( togeopoint )+ &hl=cn +) ); startactivity (intent);(3)输入项起点、终点以及交通工具的选择。(4)输出项给出行车方案。输入要查询的两个站点名称在数据库中进行查询,返回cursor提示用户输入yes将查询到的信息在界面中显示nono站站查询结束提示不存在yes两个站点都不为空为空cursor为

48、null图5-5 站站查询模块流程逻辑(5)主要方法:private string geopointtostring(geopoint gp):将geopoint里的经纬度以string,string返回。(6)换乘算法流程图(以2次以内为例)换乘算法流程图12如图5-6。3、公交数据下载模块(1)模块描述该模块功能:点击更新公交数据时,弹出选择城市对话框,用户点击选择后连接tomcat服务器,下载公交数据文件,同时存入sqlite数据库。模块功能实现类:download,select2download,databse,databsehhelper类主要变量和方法有:开始按钮按下分别计算经过起

49、点站和终点站的公交线路集合a和ba、b有交集y交集为直达的多条公交线路计算最短线路给出换乘方案结束分别计算公交线路集合a和b所经过的公交站点集合c和dc、d有交集交集为一次换乘的多个公交站点y计算最短线路分别计算经过公交站点集合c和d的公交线路集合e和fnne、f有交集交集为二次换乘的多条中间线路计算最短线路两站间二次换乘不可达图5-6 公交换乘模块工作流程图变量: download load:定义一个下载类的变量,用来下载文件。 private url url:资源定位符。 private urlconnection uc:一个具有特定协议类型的url交换数据通信链路。方法: public

50、void start():从服务器中下载数据然后写入文件。 public string getfilename(string str):获得url对应的文件名,在sdcard中以相同的名称存放。 public void devidetoitem(string filename):将原先的文本文件中的内容切分成段,将每个字段加入数据库中。 private void addevent(string string,string string1,string string2):向数据库中添加一行。(2)具体实现用户点击更新公交数据时,弹出选择城市对话框,用户点击确定后连接tomcat服务器,调用dow

51、nload类中的函数start()开始下载公交数据文件,下载同时保存选择的城市名,传递城市名给databse类,在databse类的oncreate()函数中调用devidetoitem(filename)函数,将文件中的每一辆公交车的信息切分成三段,并调用addevent(string string,string string1, string string2)函数将这三段按照字段存入数据库。数据库中实体及属性如图5-7。公交数据公交车名通车路线起始时间图5-7 数据库中公交车实体及属性图(3)文件说明 download.java: 从服务器下载文件到sdcard。 select2downl

52、oad.java::供用户选择要下载公交数据的城市名。 databse.java: 数据库操作类,将文件中的内容分段,然后存入数据库。 databsehhelper.java:数据库辅助类,实现数据库的建立,更新等。(4)输入项要下载公交数据的城市名。(5)输出项存有该城市的公交数据的数据库event.db。(6)公交数据下载模块流程逻辑流程逻辑图如图5-8所示。4、数据更新模块(1)模块描述服务器端公交数据以文本形式存在,当数据需要更新时管理员只需要更新新文件就可以了。5、地图图层模块(1)模块描述本模块完成在地图中添加图层的工作,例如在地图上画红色的圆圈来标志要查找的地点,在地图上画公交路

53、线等。这个模块实现的类:overlay,myoverlay类,两个类均继承自overlay,overlay是android提供的在地图上添加图层的基类,只要重载其中的draw函数就可以在地图上画出不同的标志。用户选择要下载的城市公交数据download.start()从服务器下载devidetoitem(filename)addevent( )向数据库中add添加完成,得到event.db图5-8 公交数据下载模块流程逻辑(2)文件说明 overlay.java:画红色圆圈来表示指定位置。 myoverlay.java:在某一路公交车的每个途经站点画蓝色的圆圈,相邻两个站点之间画蓝色的线。6、

54、本章小结本章详细介绍了各个模块的内部处理流程,以及实现模块的类,类中的函数以及变量。六、系统测试及运行结果分析1、 运行环境android手机平台。2、运行测试2.1 软件运行将.apk文件安装,安装步骤类似于一般的手机软件。安装完成后点击如图6-1 所示的菜单位置,就会出现公交信心查询系统的软件图标(如图6-2)。 图6-1 android系统启动主界面 图6-2 公交信息查询系统的软件图标点击图标就可以进入软件的运行界面。2.2 运行界面软件开始运行后,首先出现如图6-3的启动画面。向下滑动右侧的滚动条就可以看到所有的功能。2.3 软件操作流程用户在“显示当前城市地图”之前首先应该“设置当

55、前城市”,点击“设置当前城市”后界面如下图6-4所示,否则会弹出对话框提示用户先设置当前城市,用户点击确定按钮后直接进入当前城市设置页面(以北京市为例)。点击“显示当前城市地图”后会出现一个toast显示设置的当前城市,持续3秒钟后自动消失,之后便会显示当前城市地图,并以红色圆圈标注将当前城市所在位置,点击界面任意位置,会浮现出放大、缩小按钮,将图片放大到合适的大小,如图6-5所示。按返回键返回主界面,点击“地图浏览”就可以浏览地图,可以对地图进行拖动、放大、缩小等操作。 图6-3 程序启动画面 图6-4 设置当前城市界面点击主界面中的“查找定位”可以在地图中查找编辑框中输入的位置,并以红色圆圈标注(以黄岛石油大学为例),效果如图6-6所示。返回主界面后进行公交车查询之前首先应该“更新公交数据”,否则会弹出对话框提示数据库不存在,更新公交数据(以黄岛为例)完毕后系统会浮现toast,提示用户公交数据更新成功。 图6-5 显示当前城市地图效果图 图6-6 查找定位功能效果图点击“车次查询”,就可以查到某一路(以4路为例)公交车的信息,如图6-7所示;点击在地图上显示左侧的按钮就可以在地图上显示该路公交车的通车路线,如图6-8所示。按返回键返回主界面,点击“站点查询”,在编辑框中输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论