版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于Android系統(tǒng)的公交信息查詢系統(tǒng)</p><p> 摘 要:由于手機(jī)價(jià)格低廉,使用方便,它已成為人們獲得在生活工作上等各種信息服務(wù)的最佳選擇。借助于無(wú)線互聯(lián)網(wǎng),基于手機(jī)的公交查詢系統(tǒng)能為客戶隨時(shí)隨地提供公交信息。</p><p> 目前也已經(jīng)有了不少公交車(chē)查詢系統(tǒng),但是這些系統(tǒng)多少都存在一些問(wèn)題,如數(shù)據(jù)更新較慢、不準(zhǔn)確等。本文在研究分析總結(jié)這些問(wèn)題的基礎(chǔ)
2、上,設(shè)計(jì)并實(shí)現(xiàn)了基于手機(jī)的公交信息查詢系統(tǒng)。系統(tǒng)運(yùn)行于Android平臺(tái),地圖部分使用谷歌地圖,主要采用Java語(yǔ)言編寫(xiě),數(shù)據(jù)庫(kù)采用SQLITE,以Tomcat作為服務(wù)器。實(shí)現(xiàn)了定位當(dāng)前位置、查找位置并在地圖中顯示、車(chē)次查詢、站點(diǎn)查詢、站站查詢、換乘查詢等功能。該公交查詢系統(tǒng)不僅實(shí)現(xiàn)了查詢結(jié)果的文本顯示,而且實(shí)現(xiàn)了文本和電子地圖的同時(shí)顯示,使系統(tǒng)更直觀,更方便用戶的查詢。</p><p> 關(guān)鍵詞:公交查詢;A
3、ndroid平臺(tái);SQLITE;谷歌地圖</p><p><b> 一、前言</b></p><p> 1、問(wèn)題的提出及研究意義</p><p> 城市公共交通以其覆蓋面廣、經(jīng)濟(jì)快捷的特點(diǎn),目前仍然是絕大多數(shù)出行者的首選方式,也是各地城市政府大力發(fā)展的一種交通方式。針對(duì)目前的實(shí)際情況,大力發(fā)展城市公共交通,鼓勵(lì)并吸引市民選擇乘坐公交出行,
4、將會(huì)大大減弱交通壓力,從極大程度上改善交通狀況。</p><p> 改善城市的公共交通,為市民出行創(chuàng)造良好的環(huán)境,其中很重要的途徑之一便是提高公交的服務(wù)水平。通過(guò)給乘客提供高質(zhì)量的服務(wù),來(lái)吸引市民選擇乘坐公交出行。影響城市公交服務(wù)水平的因素主要有四個(gè):方便性、迅捷性、經(jīng)濟(jì)性、舒適性。改善公交服務(wù),就必須從這四個(gè)方面綜合考慮。一般情況下,各城市采取的措施有:</p><p> ?。?)合理
5、布設(shè)公交線路網(wǎng)。對(duì)新建的的線路和站點(diǎn),認(rèn)真考慮公交線網(wǎng)密度的高低、換乘系數(shù)的大小、發(fā)車(chē)頻率的高低和乘客的出行需求容量,合理布局,以方便乘客出行。</p><p> (2)改善公共交通設(shè)施。建立電子站牌,加載GPS定位裝置,為乘客提供更多更便捷的服務(wù)。改善公交車(chē)內(nèi)環(huán)境和設(shè)施,增設(shè)和改進(jìn)車(chē)輛的專(zhuān)用服務(wù)設(shè)施,使之更貼近于需要幫助的弱勢(shì)群體,以提高公交出行的舒適性。</p><p> ?。?)提
6、高公交車(chē)速。設(shè)置專(zhuān)用的公交車(chē)道,配置良好的公交車(chē)型,以提高公交車(chē)運(yùn)行速度,從而使公交出行迅猛快捷。</p><p> ?。?)建設(shè)智能公交系統(tǒng)。利用當(dāng)代高新技術(shù):電子、信息、通信、計(jì)算機(jī)、GPS、GIS等,將交通系統(tǒng)中的人(交通參與者:乘客和管理者)、交通設(shè)施(道路等)和交通工具(車(chē)輛等)有機(jī)聯(lián)系起來(lái),建立智能公交系統(tǒng),如公交優(yōu)先系統(tǒng)、公交查詢系統(tǒng)、智能化行車(chē)系統(tǒng)等,為乘客提供實(shí)時(shí)的更多更全面的出行信息,更好的為
7、乘客服務(wù)[1]。</p><p> 對(duì)于一個(gè)城市來(lái)說(shuō),公交線路網(wǎng)一般不會(huì)隨便更改和新建,而改進(jìn)公交設(shè)施因?yàn)樾枰度牒艽蟮奈锪拓?cái)力,對(duì)于城市建設(shè)來(lái)說(shuō)并不一定可行。另外,為了安全起見(jiàn),城市內(nèi)的公交車(chē)速都有限制,因此,改善公交服務(wù)水平,吸引市民或游客乘坐公交車(chē)出行,還必須更多關(guān)注于智能公交系統(tǒng)的建設(shè)。</p><p> 在智能公交系統(tǒng)中,公交查詢系統(tǒng)的服務(wù)是目前最貼近乘客日常生活的,也是最
8、能讓乘客親身體會(huì)公交服務(wù)水平高低的方面。因此,如何給乘客提供一個(gè)良好的平臺(tái),讓乘客選擇或是推薦合適的乘車(chē)方案出行,以節(jié)約乘車(chē)時(shí)間,縮短到達(dá)目的地的乘坐距離,減少乘坐的票款成本,才是提高公交服務(wù)水平最值得關(guān)注的問(wèn)題之一[2]。</p><p> 越來(lái)越多的人傾向通過(guò)上網(wǎng)獲得和共享信息,隨著網(wǎng)絡(luò)應(yīng)用的普及而不斷的發(fā)展,Internet的應(yīng)用成了世人關(guān)注的焦點(diǎn)[3]。公交查詢系統(tǒng)不僅要能為乘客提供全面的公交信息,還要
9、考慮面向大眾、實(shí)時(shí)性和豐富性。為此我們提出了設(shè)計(jì)并開(kāi)發(fā)一個(gè)基于Android平臺(tái)的公交查詢系統(tǒng)。</p><p> 城市公交信息的查詢應(yīng)該是基于城市中現(xiàn)有公交線網(wǎng)的資源,為乘客盡量提供全面的出行路線和站點(diǎn)信息。其中最重要的一項(xiàng)就是針對(duì)乘客不同的出行需求,給出合理而又有建設(shè)性的乘車(chē)信息和出行意見(jiàn)。</p><p><b> 2、課題研究現(xiàn)狀</b></p>
10、;<p> 2.1 國(guó)外研究現(xiàn)狀</p><p> 美國(guó)十分重視公交查詢的研究和應(yīng)用,其中一個(gè)重要的目的就是通過(guò)提供及時(shí)準(zhǔn)確的信息和服務(wù),吸引更多的出行者使用公共交通,從而促進(jìn)公交發(fā)展。他們發(fā)展公交查詢的特點(diǎn)是:</p><p> ?。?)提供快捷、方便的電話咨詢服務(wù)。</p><p> ?。?)與定位技術(shù)結(jié)合,提供實(shí)時(shí)信息服務(wù)。</p>
11、;<p> (3)觸摸屏在公共場(chǎng)所廣泛使用。</p><p> ?。?)查詢與網(wǎng)絡(luò)結(jié)合。</p><p> 針對(duì)日本的交通擁擠等問(wèn)題,東京都交通局開(kāi)發(fā)了城市公共交通綜合運(yùn)輸控制系統(tǒng)。旨在改進(jìn)公共交通服務(wù),重新贏得乘客。日本對(duì)城市公交網(wǎng)絡(luò)的建設(shè)也十分重視,利用智能交通系統(tǒng)實(shí)現(xiàn)了綜合管理,大大改善了交通狀況?,F(xiàn)在,許多地方的城市交通查詢系統(tǒng)還借助了全球定位和地理信息系統(tǒng),為車(chē)
12、輛提供全天置、速度和信息管理等服務(wù)[4]。</p><p> 歐洲一些國(guó)家,如英國(guó)、意大利、芬蘭,近年來(lái)研究取了得較好的效果。通過(guò)改善包括信息服務(wù)在內(nèi)的公交服務(wù),從而對(duì)解決城市交通問(wèn)題,取得了明顯的社會(huì)經(jīng)濟(jì)效益[5]。</p><p> 2.2 國(guó)內(nèi)研究現(xiàn)狀</p><p> 與歐美國(guó)家相比,我國(guó)的公共交通事業(yè)發(fā)展還比較落后。公交智能化水平還較低,絕大部分是沿
13、襲舊的運(yùn)營(yíng)體制。目前我國(guó)的城市公交查詢系統(tǒng)的發(fā)展還處于一個(gè)相對(duì)落后的水平,廣大乘客可以獲得信息的方式很少,公交線路和站點(diǎn)信息的完整性和準(zhǔn)確性得不到保證,我國(guó)公交信息查詢的現(xiàn)狀特點(diǎn)如下:</p><p> (1)乘客可以獲得的公交信息很少,而且方式主要是常規(guī)手段。我國(guó)乘客一般獲得公交信息的方式局限于電話、交通圖、向熟人問(wèn)訊等常規(guī)方式。乘客可以獲得的公交信息很少,除去線路、站點(diǎn)等基本信息以外,車(chē)輛運(yùn)行過(guò)程中的時(shí)空信
14、息基本上沒(méi)有。</p><p> (2)乘客出行獲得信息困難。</p><p> (3)公交查詢網(wǎng)站訪問(wèn)量差距較大且普遍不高。</p><p> ?。?)我國(guó)公交查詢系統(tǒng)還處于初步階段,查詢信息單一且缺乏合理性?,F(xiàn)在網(wǎng)上許多的公交查詢網(wǎng)站,絕大部分都只有站點(diǎn)、線路,以及換乘查詢,有的還有電子地圖查詢等功能,但是對(duì)于城市中的一些比較有代表性的標(biāo)志性地點(diǎn)介紹和查詢等
15、功能,做的比較好的很少。</p><p> ?。?)查詢方式單一,使用效率低,沒(méi)有充分利用各種通信資源。目前的公交查詢系統(tǒng)大多數(shù)只能通過(guò)web方式查詢,但人們對(duì)公交信息的需求往往是即時(shí)的、突發(fā)的,出行人不大可能在公交站牌附近為了找公交信息去網(wǎng)吧上網(wǎng)。</p><p> 2.3 基于手機(jī)的公交查詢系統(tǒng)研究現(xiàn)狀</p><p> 手機(jī)憑借小巧可人的身材、N合一的功能
16、特色,成為數(shù)碼時(shí)代人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?。目前大多?shù)基于手機(jī)的公交查詢系統(tǒng)都是采用短消息的形式,雖然基于短消息的查詢不受空間約束,但可能受到運(yùn)營(yíng)商的一些約束:硬件方面,如果遇到服務(wù)器、網(wǎng)絡(luò)繁忙時(shí)段或信號(hào)盲區(qū),導(dǎo)致用戶請(qǐng)求長(zhǎng)時(shí)間得不到響應(yīng);軟件方面,運(yùn)營(yíng)商不一定提供了此類(lèi)的查詢服務(wù),還有服務(wù)受到限制(如欠費(fèi)停機(jī)、限定漫游等,此時(shí)根本無(wú)法使用這些服務(wù))。另外,短信方式查詢還缺乏互動(dòng)性,一些與用戶必要的交流難以實(shí)現(xiàn)。資費(fèi)始終是消費(fèi)者首
17、要關(guān)心的問(wèn)題之一。雖然基于短消息的公交查詢也方便靈活,但是每次使用都會(huì)產(chǎn)生一定費(fèi)用[6]。</p><p><b> 3、本文組織結(jié)構(gòu)</b></p><p> 第二部分為關(guān)鍵技術(shù),主要介紹本題目所設(shè)計(jì)的所有關(guān)鍵技術(shù)和算法,第三部分到第六部分詳細(xì)介紹軟件生命周期各個(gè)階段的具體工作,第七部分對(duì)整個(gè)畢業(yè)設(shè)計(jì)進(jìn)行了總結(jié),最后部分為致謝。</p><p
18、><b> 4、本章小結(jié)</b></p><p> 本章主要設(shè)計(jì)題目的研究目的、意義以及現(xiàn)狀,相當(dāng)于軟件工程的問(wèn)題定義和可行性研究部分,對(duì)于整個(gè)系統(tǒng)的開(kāi)發(fā)有著重要的意義,相當(dāng)于進(jìn)行了一次簡(jiǎn)單的系統(tǒng)開(kāi)發(fā)。</p><p><b> 二、關(guān)鍵技術(shù)</b></p><p> 1、Android平臺(tái)相關(guān)內(nèi)容介紹<
19、;/p><p> 1.1 Android操作系統(tǒng)簡(jiǎn)介</p><p> Android一詞的本義指“機(jī)器人”,同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)的名稱(chēng),該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱(chēng)是首個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)軟件。</p><p> Android是基于Linux內(nèi)核的操作系
20、統(tǒng),早期由Google開(kāi)發(fā),后由開(kāi)放手機(jī)聯(lián)盟開(kāi)發(fā)。它采用了軟件堆層的架構(gòu),主要分為三部分。底層以Linux內(nèi)核工作為基礎(chǔ),只提供基本功能;其他的應(yīng)用軟件則由各公司自行開(kāi)發(fā),以Java作為編寫(xiě)程序的一部分。另外,為了推廣此技術(shù),Google和其它幾十個(gè)手機(jī)公司建立了開(kāi)放手機(jī)聯(lián)盟。Android在未公開(kāi)之前常被傳聞為GPhone。目前最新版本為Android2.2。2010年谷歌開(kāi)發(fā)者大會(huì)上,Android2.2發(fā)布,名稱(chēng)為Froyo,意為
21、凍酸奶。</p><p> 1.2 Android架構(gòu)</p><p> 圖2-1顯示的是Android操作系統(tǒng)的主要組件,每一部分將會(huì)在下面具體描述。</p><p> Android同一個(gè)核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是用Java編寫(xiě)的。 </p>
22、;<p> Android 應(yīng)用程序框架 開(kāi)發(fā)者也完全可以訪問(wèn)核心應(yīng)用程序所使用的API框架。該應(yīng)用程序架構(gòu)用來(lái)簡(jiǎn)化組件軟件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過(guò)得遵循框架的安全性限制)。該應(yīng)用程序重用機(jī)制使得組件可以被用戶替換。 </p><p> 圖2-1 Android 系統(tǒng)架構(gòu)圖</p><p>
23、以下所有的應(yīng)用程序都由一系列的服務(wù)和系統(tǒng)組成,包括: </p><p> ?。?)一個(gè)可擴(kuò)展的視圖(Views)可以用來(lái)建應(yīng)用程序,包括列表(lists),網(wǎng)格(grids),文本框(text boxes),按鈕(buttons),甚至包括一個(gè)可嵌入的web瀏覽器。</p><p> (2)內(nèi)容管理器(Content Providers)使得應(yīng)用程序可以訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人
24、數(shù)據(jù)庫(kù)),或者共享它們自己的數(shù)據(jù)。 </p><p> ?。?)一個(gè)資源管理器(Resource Manager)提供非代碼資源的訪問(wèn),如本地字符串,圖形,和分層文件(layout files)。 </p><p> ?。?)一個(gè)通知管理器(Notification Manager)使得應(yīng)用程序可以在狀態(tài)欄中顯示客戶通知信息。 </p><p> ?。?)一個(gè)活動(dòng)類(lèi)
25、管理器(Activity Manager)用來(lái)管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。 </p><p> Android程序庫(kù) - Android 包括一個(gè)被Android系統(tǒng)中各種不同組</p><p> 件所使用的C/C++庫(kù)集。該庫(kù)通過(guò)Android應(yīng)用程序框架為開(kāi)發(fā)者提供 </p><p> 服務(wù)。以下是一些主要的核心庫(kù): </p>
26、<p> 系統(tǒng)C庫(kù) - 一個(gè)從 BSD 繼承來(lái)的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)(libc),專(zhuān)門(mén)為基于embedded linux的設(shè)備定制。</p><p> 媒體庫(kù) - 基于PacketVideo OpenCORE;該庫(kù)支持錄放,并且可以錄制許多流行的音頻視頻格式,還有靜態(tài)印像文件包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG。 </p><p>
27、Surface Manager - 對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提供2D和3D圖層的無(wú)縫融合。 </p><p> LibWebCore - 一個(gè)最新的web瀏覽器引擎用來(lái)支持Android瀏覽器和一個(gè)可嵌入的web視圖。 </p><p> SGL - 一個(gè)內(nèi)置的2D圖形引擎3D libraries - 基于OpenGL ES 1.0 APIs實(shí)現(xiàn);該庫(kù)可以使用硬件3D加速
28、(如果可用)或者使用高度優(yōu)化的3D軟加速。 </p><p> FreeType - 位圖(bitmap)和向量(vector)字體顯示。 </p><p> SQLite - 一個(gè)對(duì)于所有應(yīng)用程序可用,功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫(kù)引擎。</p><p> Android運(yùn)行庫(kù) </p><p> Android包括了一個(gè)核心庫(kù),該核心
29、庫(kù)提供了Java編程語(yǔ)言核心庫(kù)的大多數(shù)功能。 </p><p> 每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik是針對(duì)于同時(shí)高效地運(yùn)行多個(gè)VMs來(lái)實(shí)現(xiàn)的。Dalvik虛擬機(jī)執(zhí)行.dex的Dalvik可執(zhí)行文件,該格式文件針對(duì)最小內(nèi)存使用做了優(yōu)化。該虛擬機(jī)是基于寄存器的,所有的類(lèi)都經(jīng)由Java匯編器編譯,然后通過(guò)SDK中的dx工具轉(zhuǎn)化成.dex格式由虛擬機(jī)
30、執(zhí)行。 </p><p> Dalvik虛擬機(jī)依賴(lài)于linux的一些功能,比如線程機(jī)制和底層內(nèi)存管理機(jī)制。</p><p><b> Linux內(nèi)核</b></p><p> Android的核心系統(tǒng)服務(wù)依賴(lài)于Linux 2.6內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。Linux內(nèi)核也同時(shí)作為硬件和軟件堆棧之間的硬件抽象層
31、[7]。</p><p> 2、Tomcat技術(shù)</p><p> Tomcat 是一個(gè)小型的輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問(wèn)用戶不是很多的場(chǎng)合下被普遍使用。 它的特點(diǎn)是Apache 為HTML頁(yè)面服務(wù),而Tomcat 實(shí)際上運(yùn)行JSP 頁(yè)面和Servlet。另外,Tomcat和IIS、Apache等Web服務(wù)器一樣,具有處理HTML頁(yè)面的功能,另外它還是一個(gè)Servlet和J
32、SP容器,獨(dú)立的Servlet容器是Tomcat的默認(rèn)模式。不過(guò),Tomcat處理靜態(tài)HTML的能力不如Apache服務(wù)器。 </p><p><b> 3、HTTP協(xié)議</b></p><p> HTTP是建立在TCP網(wǎng)絡(luò)協(xié)議基礎(chǔ)上的用于WWW數(shù)據(jù)傳輸?shù)臉?biāo)準(zhǔn)協(xié)議。通過(guò)HTTP協(xié)議搜索引擎與WWW服務(wù)器建立通信機(jī)制。向服務(wù)器提出對(duì)網(wǎng)頁(yè)各種特征提取的請(qǐng)求,并從服務(wù)器
33、的應(yīng)答中獲得相應(yīng)數(shù)據(jù)。</p><p> 4、系統(tǒng)實(shí)現(xiàn)工具及運(yùn)行環(huán)境 </p><p> 開(kāi)發(fā)工具是:Eclipse ,Android SDK,ADT。</p><p> 軟件運(yùn)行環(huán)境:操作系統(tǒng):Android。</p><p><b> 5、本章小結(jié)</b></p><p> 本章
34、主要介紹了系統(tǒng)所采用的關(guān)鍵技術(shù),這些關(guān)鍵技術(shù)是構(gòu)成系統(tǒng)的主要技術(shù)因素,并為系統(tǒng)的構(gòu)造提供了理論依據(jù)。</p><p><b> 三、系統(tǒng)需求</b></p><p><b> 1、用戶需求</b></p><p> 越來(lái)越復(fù)雜的公交網(wǎng)絡(luò)使得人們經(jīng)常非常的困惑,為了解決這些問(wèn)題,在Android這個(gè)平臺(tái)上,設(shè)計(jì)開(kāi)發(fā)一個(gè)
35、公交信息查詢系統(tǒng)。</p><p> 系統(tǒng)應(yīng)該具有以下功能:</p><p> ?。?)實(shí)現(xiàn)地圖的顯示,并且能夠?qū)Φ貓D進(jìn)行拖動(dòng)、放大、縮小。</p><p> (2)能夠定位手機(jī)用戶當(dāng)前的位置,并且能夠在地圖中用紅色的圓圈將這個(gè)位置標(biāo)注出來(lái)。</p><p> ?。?)能夠查找到手機(jī)用戶指定的位置,并且能夠在地圖中標(biāo)注出來(lái);當(dāng)用戶設(shè)定了當(dāng)
36、前城市以后,能夠直接顯示當(dāng)前城市的地圖,這樣用戶需要查看經(jīng)常用到的當(dāng)前城市地圖時(shí)就不需要再查找整個(gè)地圖,既能節(jié)約時(shí)間,又能為用戶節(jié)約網(wǎng)絡(luò)流量。</p><p> ?。?)用戶應(yīng)該能夠從服務(wù)器中下載公交數(shù)據(jù),當(dāng)公交信息需要更新時(shí),應(yīng)該由管理員在服務(wù)器端進(jìn)行更改,手機(jī)用戶只需要下載新數(shù)據(jù)即可;數(shù)據(jù)庫(kù)應(yīng)該直接存放在手機(jī)中,這樣就不必每次都登錄服務(wù)器,從而提高查詢速度。</p><p> ?。?)
37、系統(tǒng)應(yīng)該可以進(jìn)行車(chē)次查詢,為用戶提供某一路公交車(chē)的信息包括公交車(chē)名、起始時(shí)間、通車(chē)路線等。并且應(yīng)該能在地圖中畫(huà)出通車(chē)路線。</p><p> ?。?)系統(tǒng)應(yīng)該能夠進(jìn)行站點(diǎn)查詢,顯示出經(jīng)過(guò)某個(gè)站點(diǎn)的所有公交車(chē)信息。</p><p> ?。?)系統(tǒng)應(yīng)該能查詢到在兩個(gè)站點(diǎn)之間通車(chē)的所有公交車(chē)。</p><p> ?。?)可以進(jìn)行換乘查詢,當(dāng)兩個(gè)地點(diǎn)之間沒(méi)有直達(dá)車(chē)時(shí),給出換
38、乘方案。</p><p> 用戶界面上盡量友好,讓用戶能夠方便的操作得到想要的查詢結(jié)果。用戶可以自己選擇下載所需城市的公交數(shù)據(jù),自己控制地圖的大小等。</p><p> 2、 系統(tǒng)設(shè)計(jì)的原則</p><p><b> (1)實(shí)用性原則</b></p><p> 實(shí)用性原則主要體現(xiàn)的是所設(shè)計(jì)的系統(tǒng)能夠解決實(shí)際問(wèn)題,
39、是所有應(yīng)用系統(tǒng)設(shè)計(jì)最基本的最主要的原則,直接關(guān)系到系統(tǒng)成敗[8]?;谑謾C(jī)的公交信息查詢系統(tǒng)可以隨時(shí)隨地為人們解決出行時(shí)的公交選擇問(wèn)題,使用戶方便的獲取到真正想要獲得的信息。</p><p><b> ?。?)可靠性原則</b></p><p> 可靠性是系統(tǒng)設(shè)計(jì)的立足點(diǎn),若設(shè)計(jì)的系統(tǒng)故障頻繁,就不能夠滿足用戶的要求[9]。設(shè)計(jì)的公交查詢系統(tǒng)應(yīng)該從以下幾個(gè)方面提高其
40、可靠性:故障發(fā)生時(shí)應(yīng)給出提示,提示用戶應(yīng)該如何操作來(lái)排除故障;通過(guò)測(cè)試檢測(cè)系統(tǒng)漏洞,完善系統(tǒng)等。</p><p> (3)易于更新和維護(hù)</p><p> 系統(tǒng)的設(shè)計(jì),能夠?qū)崿F(xiàn)有關(guān)空間數(shù)據(jù)和屬性數(shù)據(jù)的實(shí)時(shí)更新和維護(hù)[10]。在系統(tǒng)維護(hù)時(shí)只須在服務(wù)器上維護(hù)即可,數(shù)據(jù)的更新和維護(hù)要簡(jiǎn)單可行。</p><p><b> ?。?)操作簡(jiǎn)便</b>&
41、lt;/p><p> 操作簡(jiǎn)單是軟件設(shè)計(jì)過(guò)程中需要重視的問(wèn)題,應(yīng)精心設(shè)計(jì)用戶接口、使系統(tǒng)用戶界面友好,便于用戶理解。具體表現(xiàn)在:</p><p> ?、?用戶輸入信息時(shí),系統(tǒng)會(huì)給出提示信息,例如:在車(chē)次查詢時(shí),需要用戶輸入要查詢的車(chē)次,在用戶輸入的編輯框中先填入例子“1路”。</p><p> ?、?界面簡(jiǎn)潔明了,容易操作。</p><p>
42、?、?數(shù)據(jù)的顯示和提示信息要簡(jiǎn)單明了。</p><p> ?、?當(dāng)用戶輸入信息有誤時(shí),有信息提示;當(dāng)沒(méi)有查到滿足條件的結(jié)果時(shí)會(huì)彈出對(duì)話框進(jìn)行提示[11]。</p><p><b> 3、 本章小結(jié)</b></p><p> 本章描述了公交信息查詢系統(tǒng)的基本用戶需求比如用戶界面等,同時(shí)介紹了本軟件的設(shè)計(jì)原則以及運(yùn)行環(huán)境。</p>
43、<p><b> 第4章 概要設(shè)計(jì)</b></p><p><b> 1、系統(tǒng)體系結(jié)構(gòu)</b></p><p> 該系統(tǒng)的體系結(jié)構(gòu)如圖4-1所示。</p><p> 圖4-1 系統(tǒng)體系結(jié)構(gòu)</p><p><b> 2、模塊設(shè)計(jì)</b></p&g
44、t;<p> 2.1 程序模塊劃分</p><p> 程序模塊劃分如圖4-2所示。</p><p> 2.2 程序模塊功能描述</p><p><b> ?。?)地圖顯示模塊</b></p><p> 該模塊的功能就是實(shí)現(xiàn)地圖的顯示,并且能夠?qū)Φ貓D進(jìn)行拖動(dòng)、放大、縮小。當(dāng)用戶點(diǎn)擊主界面上列表中需要顯
45、示地圖的Item時(shí),顯示谷歌地圖,單擊地圖界面后能夠浮現(xiàn)出放大、縮小按鈕,每次單擊放大(縮?。┌粹o都能夠?qū)⒌貓D放大(縮?。┮粋€(gè)級(jí)別,谷歌地圖的大小共有24個(gè)級(jí)別,放大級(jí)別越高地圖顯示結(jié)果越詳細(xì)。按住鼠標(biāo)左鍵不放就可以拖動(dòng)地圖。</p><p> ?。?)GPS定位模塊</p><p> 本模塊利用系統(tǒng)中的GPS服務(wù)實(shí)現(xiàn)定位。但是由于模擬器中沒(méi)有GPS模塊,所以需要通過(guò)DDMS虛擬坐標(biāo),模
46、擬衛(wèi)星獲得當(dāng)前位置并發(fā)送給手機(jī)的過(guò)程。獲得location以后就可以在地圖中找到這個(gè)位置,并將地圖更新,使這個(gè)location位于地圖中央,并用紅色的圓圈標(biāo)識(shí)出來(lái)。</p><p><b> (3)查找定位模塊</b></p><p> 本模塊實(shí)現(xiàn)的功能是在地圖中查找用戶要查找的地點(diǎn),并在地圖中用紅色圓圈表示。這個(gè)模塊從編輯框中捕獲用戶要查找的地點(diǎn)名以后根據(jù)這個(gè)地
47、名字符串在地圖中查找最相近的location,找到之后更新地圖到相應(yīng)的GEOPOINT。</p><p> 圖4-2 程序模塊劃分圖</p><p><b> ?。?)公交查詢模塊</b></p><p> 公交查詢模塊的主要功能分為3個(gè):車(chē)次查詢,站點(diǎn)查詢,站站查詢。</p><p> 車(chē)次查詢是從數(shù)據(jù)庫(kù)中查詢
48、某一路公交車(chē)的信息,包括起始時(shí)間,公交路線等,并且可以在地圖中畫(huà)出這路公交車(chē)的通車(chē)路線;站點(diǎn)查詢可以獲得經(jīng)過(guò)某個(gè)站點(diǎn)的所有公交車(chē),查詢結(jié)果以列表的形式顯示,單擊一項(xiàng)會(huì)顯示該路公交車(chē)的詳細(xì)信息;站站查詢與站點(diǎn)查詢類(lèi)似,是獲取在兩個(gè)站點(diǎn)之間通車(chē)的公交車(chē)次。</p><p><b> ?。?)公交換乘模塊</b></p><p> 公交換乘模塊的功能是:用戶給出起點(diǎn)和終點(diǎn)
49、,選定方式(開(kāi)車(chē)、乘坐公交車(chē)、步行)后,系統(tǒng)查詢行車(chē)路線,并以列表列出,最終采取哪條路線由用戶單擊選擇查看詳細(xì)信息。該模塊是利用系統(tǒng)提供的路徑規(guī)劃模塊實(shí)現(xiàn)。</p><p> ?。?)公交數(shù)據(jù)下載模塊</p><p> 本模塊通過(guò)HTTP協(xié)議,與WEB服務(wù)器進(jìn)行連接,并下載公交數(shù)據(jù)。手機(jī)上通過(guò)http協(xié)議來(lái)獲取網(wǎng)頁(yè)一般會(huì)有500ms的延遲,網(wǎng)頁(yè)請(qǐng)求過(guò)程是手機(jī)客戶端訪問(wèn)網(wǎng)頁(yè)的最大瓶頸所在。
50、該模塊通過(guò)指定URL連接到TOMCAT服務(wù)器,從web服務(wù)器上獲得所選城市對(duì)應(yīng)的公交數(shù)據(jù)以流的方式下載到手機(jī)的sdcard上,為了減少處理速度,采用下載與存入數(shù)據(jù)庫(kù)并行的方式。在該模塊中將獲得的公交數(shù)據(jù)分成公交車(chē)名、起始時(shí)間、公交路線三段后按照字段存入SQLITE數(shù)據(jù)庫(kù)中。</p><p><b> ?。?)數(shù)據(jù)更新模塊</b></p><p> 本模塊實(shí)現(xiàn)管理員對(duì)
51、于公交數(shù)據(jù)的管理更新。公交數(shù)據(jù)是存放在服務(wù)器上的,所以當(dāng)公交數(shù)據(jù)需要更新時(shí),管理員在服務(wù)器端更新文件,手機(jī)用戶只需要從服務(wù)器重新獲取新數(shù)據(jù)即可。</p><p><b> (8)地圖圖層模塊</b></p><p> 該模塊主要功能:在谷歌地圖上增加圖層。例如:在地圖上畫(huà)出某一路公交車(chē)的行車(chē)路線,在地圖上用紅色圓圈標(biāo)識(shí)要查找的地點(diǎn)等。</p><
52、;p> 3、功能-模塊對(duì)照表</p><p> 功能-模塊對(duì)照表如表4-1所示。</p><p><b> 4、本章小結(jié)</b></p><p> 本章描述了系統(tǒng)的體系結(jié)構(gòu),詳細(xì)描述了系統(tǒng)的具體模塊劃分和模塊的層次機(jī)構(gòu),并詳細(xì)描述了各個(gè)模塊的功能,為詳細(xì)設(shè)計(jì)做好了鋪墊。</p><p> 表4-1 功能模
53、塊對(duì)照表</p><p><b> 五、詳細(xì)設(shè)計(jì)</b></p><p> 1、地圖相關(guān)功能模塊</p><p> 1.1 地圖顯示模塊</p><p><b> (1)模塊描述</b></p><p> 該模塊主要功能:顯示google地圖,并且能夠?qū)Φ貓D進(jìn)行拖動(dòng)
54、、放大、縮小。</p><p><b> 主要變量:</b></p><p> Private MapView mapview:MapView對(duì)象。</p><p><b> 主要函數(shù):</b></p><p> ① setContentView(int layoutResID) 功能:為
55、界面設(shè)置布局,其中參數(shù)layoutResID是布局文件。</p><p> ② setBuiltInZoomControls(Boolean bool) 功能:參數(shù)設(shè)置為true時(shí),地圖可以控制,即可以進(jìn)行拖動(dòng)、放大、縮小。</p><p><b> ?。?)具體實(shí)現(xiàn)</b></p><p> Android系統(tǒng)集成了GoogleMap功
56、能,要在自己的系統(tǒng)中使用谷歌地圖首先要申請(qǐng)apikey,獲得apikey以后在清單文件AndroidManifest.xml里添加“<uses-library Android:name="com.google.Android.maps" />”另外,還需要添加3個(gè)權(quán)限ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION和INTERNET并且要在使用GoogleMap的la
57、yout中手動(dòng)添加控件,最后就是繼承MapActivity,而不是單純的Activity 。</p><p><b> (3)源文件說(shuō)明</b></p><p> 用到地圖顯示的模塊有三個(gè):</p><p> ?、?map_browse.java:實(shí)現(xiàn)地圖瀏覽功能。</p><p> ?、?gpsLocation.j
58、ava:實(shí)現(xiàn)GPS定位的類(lèi)。</p><p> ③ searchLocation.java:在地圖中查找指定位置的類(lèi)。</p><p> ?、?showCurrentCity.java: 顯示當(dāng)前城市的類(lèi)。</p><p> 1.2 GPS定位模塊</p><p><b> ?。?)模塊描述</b></p>
59、;<p> 主要功能:利用GPS服務(wù)定位用戶當(dāng)前位置。</p><p><b> 主要變量和方法是:</b></p><p><b> 主要變量:</b></p><p> ?、?private LocationManager mLocationManager01:獲取系統(tǒng)中位置服務(wù)的變量。</p
60、><p> ② private MapView mMapView01:地圖視圖對(duì)象。</p><p> ?、?private GeoPoint currentGeoPoint:當(dāng)前位置的GeoPoint,由經(jīng)緯度構(gòu)成。</p><p><b> 方法:</b></p><p> ?、?private GeoPoint g
61、etGeoByLocation(Location location):傳入?yún)?shù)Location,將這個(gè)location轉(zhuǎn)換成GeoPoint。</p><p> ?、?public void refreshMapViewByGeoPoint(GeoPoint gp, MapView mv, int zoomLevel, Boolean bIfSatellite):更新地圖mv到gp點(diǎn),將地圖移至以gp為中心的位置
62、,zoomLevel是地圖的放大級(jí)別,最后一個(gè)變量表示是否顯示衛(wèi)星圖。</p><p> ?、?private viod processLocationUpdated(Location location):當(dāng)手機(jī)收到位置更改,將location傳入GeoPoint及MapView,同時(shí)更新地圖到新的位置。</p><p><b> (2)具體實(shí)現(xiàn)</b></p
63、><p> 主要的實(shí)現(xiàn)方法有:通getSystemService(Context.LOCATION_SERVICE)開(kāi)啟系統(tǒng)的GPS服務(wù),通過(guò)getLocationProvider (LocationManager lm)獲取到符合條件的位置,之后將獲取到得location轉(zhuǎn)化成經(jīng)緯度格式的GeoPoint,然后調(diào)用refreshMapViewByGeoPoint(GeoPoint gp, MapView mv,
64、int zoomLevel, Boolean bIfSatellite)更新地圖到這個(gè)gp點(diǎn)。</p><p><b> (3)文件說(shuō)明</b></p><p> gpsLocation.java:實(shí)現(xiàn)GPS定位的類(lèi)。</p><p><b> (4)流程邏輯</b></p><p> 圖5
65、-1 GPS定位模塊流程邏輯</p><p> 1.3 查找定位模塊</p><p><b> (1)模塊描述</b></p><p> 主要功能:在地圖中查找用戶要查詢的位置,并用紅色圓圈標(biāo)注出來(lái)。</p><p> 主要變量以及方法如下:</p><p><b> 主要變
66、量:</b></p><p> ?、?private MapView mMapView01:地圖視圖對(duì)象。</p><p> ② MapController mMapController01:控制地圖大小以及是否可以拖動(dòng)的變量。</p><p><b> 主要方法:</b></p><p> ?、?set
67、OnClickListener(new Button.OnClickListener( )):對(duì)查詢按鈕單擊時(shí)間的監(jiān)聽(tīng),當(dāng)用戶單擊查詢時(shí)進(jìn)行響應(yīng)。</p><p> ?、?private GeoPoint getGeoByAddress(String strSearchAddress):以要查詢的地址名為參數(shù),通過(guò)地址名在地圖中查找這個(gè)地址的GeoPoint。</p><p><b&
68、gt; ?。?)具體實(shí)現(xiàn)</b></p><p> 系統(tǒng)界面中用了三個(gè)控件:EditText,Button,MapView。用戶在EditText中輸入要查詢的地點(diǎn)名稱(chēng),單擊查詢按鈕以后調(diào)用getGeoByAddress(String strSearchAddress)函數(shù)進(jìn)行查詢,將獲得的結(jié)果傳遞給refreshMapViewByGeoPoint(GeoPoint gp, MapView mv,
69、int zoomLevel, Boolean bIfSatellite) ,對(duì)顯示的地圖進(jìn)行更新,更新至查詢地點(diǎn),并用紅色圓圈標(biāo)注要查詢的地點(diǎn)。</p><p><b> ?。?)文件說(shuō)明</b></p><p> searchLocation.java:查詢定位的Java源文件。</p><p><b> ?。?)輸入項(xiàng)</
70、b></p><p><b> 所要地點(diǎn)名稱(chēng)。</b></p><p><b> ?。?)輸出項(xiàng)</b></p><p> 將查詢到的結(jié)果在地圖中標(biāo)注出來(lái)。</p><p> (6)處理流程如圖5-2所示。</p><p> 圖5-2 查找定位模塊處理流程<
71、;/p><p> 2、公交查詢功能模塊</p><p> 2.1 車(chē)次查詢模塊</p><p><b> ?。?)模塊描述</b></p><p> 該模塊的主要功能是:查詢某一路車(chē)的信息,包括公交車(chē)名,通車(chē)起始時(shí)間以及通車(chē)路線。</p><p> 模塊功能實(shí)現(xiàn)類(lèi): ForBusInfo類(lèi)。&
72、lt;/p><p><b> 接口中用到的變量:</b></p><p> private String busline:保存獲取的公交車(chē)的通車(chē)路線。</p><p> ForBusInfo類(lèi)主要變量和方法如下:</p><p><b> 主要變量:</b></p><p&
73、gt; ?、?private databsehHelper events:數(shù)據(jù)庫(kù)的輔助類(lèi)對(duì)象,用來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。</p><p> ② SQLiteDatabase db :數(shù)據(jù)庫(kù)類(lèi)的對(duì)象。</p><p> ③ Cursor mCursor:從數(shù)據(jù)庫(kù)中查詢到得結(jié)果進(jìn)行讀取、寫(xiě)入的接口,存儲(chǔ)查詢結(jié)果列表。</p><p><b> 主要方法:&l
74、t;/b></p><p> public void ok ():?jiǎn)螕舸_定后響應(yīng)的函數(shù),在數(shù)據(jù)庫(kù)中查詢EditText中的車(chē)次信息,將查詢到的信息顯示在busdetailedinfo布局界面中。</p><p><b> (2)具體實(shí)現(xiàn)</b></p><p> 點(diǎn)擊確定按鈕后判斷EditText是否為空,若為空給出提示,否則在數(shù)據(jù)
75、庫(kù)中進(jìn)行查詢,關(guān)鍵代碼:</p><p> SQLiteDatabase db = events.getReadableDatabase();</p><p> Cursor mCursor =db.query(true, TABLE_NAME, new String[] {BUSNUM, TIME, </p><p> BUSLINE}, " BU
76、SNUM=? ",new String[] { edit1.getText().toString()}, null, null, null,</p><p><b> null);</b></p><p> 查詢結(jié)果為空彈出對(duì)話框進(jìn)行提示,若結(jié)果不為空就將查詢到結(jié)果顯示在busdetailedinfo布局界面中。對(duì)于這個(gè)界面中的“在地圖中顯示”按鈕進(jìn)行監(jiān)
77、聽(tīng),單擊時(shí)則將所查到結(jié)果中的busline存入Bundle中,以Intent的方式啟動(dòng)drawLine這個(gè)Java類(lèi),將通車(chē)路線在地圖上畫(huà)出來(lái)。</p><p><b> ?。?)文件說(shuō)明</b></p><p> ForBusInfo.java:查詢某一路公交車(chē)的信息的類(lèi)源文件。</p><p><b> ?。?)輸入項(xiàng)</
78、b></p><p><b> 要查詢的公交車(chē)名。</b></p><p><b> (5)輸出項(xiàng)</b></p><p> 該路公交車(chē)的詳細(xì)信息,如起始時(shí)間、通車(chē)路線等。</p><p><b> (6)流程邏輯</b></p><p>
79、 流程邏輯如圖5-3所示。</p><p> 圖5-3 車(chē)次查詢模塊流程邏輯</p><p> 2.2 站點(diǎn)查詢模塊</p><p><b> (1)模塊描述</b></p><p> 該模塊的主要功能是:查詢經(jīng)過(guò)某個(gè)站點(diǎn)的所有公交車(chē),查詢結(jié)果以列表的的形式列出,列表每一項(xiàng)包括公交車(chē)名,通車(chē)起始時(shí)間以及通車(chē)路線
80、。焦點(diǎn)移到某一項(xiàng)時(shí)該路公交車(chē)的通車(chē)路線以走馬燈(文字從右向左滑動(dòng)顯示)的效果顯示。點(diǎn)擊其中一項(xiàng),會(huì)顯示這一路公交車(chē)的詳細(xì)信息。</p><p> 模塊功能實(shí)現(xiàn)類(lèi): BusStopInfo,ShowStopInfo,showclick類(lèi)。</p><p><b> 接口中用到的變量:</b></p><p> Public stopname
81、:保存要查詢的站點(diǎn)名稱(chēng)。</p><p> BusStopInfo 類(lèi)主要變量和方法如下:</p><p><b> 主要變量:</b></p><p> Bundle bundle :將不同類(lèi)型的變量映射到一個(gè)字符串,在這里將編輯框中的內(nèi)容映射到stopname中,以便與其他activity進(jìn)行通信傳遞要查詢的站點(diǎn)名稱(chēng)。</p&g
82、t;<p> ShowStopInfo類(lèi)主要變量和方法如下:</p><p><b> 主要變量:</b></p><p> ?、?private static String[] FROM = {BUSNUM,TIME, BUSLINE }:與后面的TO數(shù)組相結(jié)合,顯示查詢結(jié)果時(shí),公交車(chē)名,起始時(shí)間,通車(chē)路線3個(gè)字段與他們的位置的映射關(guān)系。</
83、p><p> ② private static int[] TO = { R.id.num, R.id.time , R.id.busline}。</p><p> ?、?SimpleCursorAdapter adapter:將查詢結(jié)果按照FROM,TO的方式進(jìn)行映射,顯示在列表中。</p><p><b> 主要方法:</b></p&
84、gt;<p> protected void onListItemClick(ListView arg0, View arg1, int arg2, long arg3):?jiǎn)螕袅斜碇心骋豁?xiàng)后響應(yīng)的函數(shù),根據(jù)arg2判斷單擊的是哪一項(xiàng),將這一路公交車(chē)的信息存入Bundle中,將這些參數(shù)傳遞給showclick類(lèi),在showclick類(lèi)中顯示公交車(chē)的詳細(xì)信息。</p><p><b> ?。?/p>
85、2)具體實(shí)現(xiàn)</b></p><p> 點(diǎn)擊確定按鈕后判斷EditText是否為空,若為空給出提示,否則在數(shù)據(jù)庫(kù)中進(jìn)行查詢,關(guān)鍵代碼:</p><p> SQLiteDatabase db = events.getReadableDatabase();</p><p> Cursor c = db.query(TABLE_NAME, new St
86、ring[] {_ID,BUSNUM,TIME, </p><p> BUSLINE}, "BUSLINE LIKE ? ", new String[]{"%"+stopname+"%"},null, null, null); </p><p> 查詢結(jié)果為空彈出對(duì)話框進(jìn)行提示,若結(jié)果不為空就將查詢到結(jié)果顯示在stopinfo
87、布局界面中。界面最上方的標(biāo)題設(shè)置為"經(jīng)過(guò)"+stopname+"的公交車(chē)有:"。然后對(duì)單擊事件進(jìn)行監(jiān)聽(tīng),單擊某一項(xiàng)以后將該項(xiàng)公交車(chē)信息傳遞給showclick類(lèi),在showclick類(lèi)中完成公交車(chē)詳細(xì)信息的顯示。</p><p><b> ?。?)文件說(shuō)明</b></p><p> BusStopInfo.java:提示用戶輸
88、入要查詢的站點(diǎn)名稱(chēng)的類(lèi)源文件;</p><p> ShowStopInfo.java :對(duì)BusStopInfo傳入的站點(diǎn)名稱(chēng)進(jìn)行查詢,并將查尋結(jié)果顯示在列表中;</p><p> Showclick.java:顯示所單擊公交車(chē)的詳細(xì)信息。</p><p><b> (4)輸入項(xiàng)</b></p><p><b
89、> 要查詢的站點(diǎn)名稱(chēng)。</b></p><p><b> ?。?)輸出項(xiàng)</b></p><p> 經(jīng)過(guò)該站點(diǎn)的所有公交車(chē),以及這些公交車(chē)的信息。</p><p><b> ?。?)流程邏輯</b></p><p> 流程邏輯如圖5-4所示。</p><p
90、> 2.3 站站查詢模塊</p><p><b> ?。?)模塊描述</b></p><p> 該模塊的主要功能是:與站點(diǎn)查詢類(lèi)似,查詢?cè)趦蓚€(gè)站點(diǎn)之間通車(chē)的所有公交車(chē),查詢結(jié)果以列表的的形式列出,列表每一項(xiàng)包括公交車(chē)名,通車(chē)起始時(shí)間以及通車(chē)路線。焦點(diǎn)移到某一項(xiàng)時(shí)該路公交車(chē)的通車(chē)路線以走馬燈(文字從右向左滑動(dòng)顯示)的效果顯示。點(diǎn)擊其中一項(xiàng),會(huì)顯示這一路公交車(chē)的
91、詳細(xì)信息。</p><p> 模塊功能實(shí)現(xiàn)類(lèi):Stop2StopResult,Stop2Stop,showclick類(lèi)。</p><p> 主要變量方法等與站點(diǎn)查詢類(lèi)似,在這里不再贅述。</p><p> 圖5-4 站點(diǎn)查詢模塊流程邏輯</p><p><b> ?。?)具體實(shí)現(xiàn)</b></p>&l
92、t;p> 點(diǎn)擊確定按鈕后判斷兩個(gè)EditText是否都不為空,若有一個(gè)或者兩個(gè)為空給出提示,否則在數(shù)據(jù)庫(kù)中進(jìn)行查詢,關(guān)鍵代碼:</p><p> SQLiteDatabase db = events.getReadableDatabase();</p><p> Cursor c = db.query(TABLE_NAME, new String[] {_ID, BUSNUM,
93、 TIME, </p><p> BUSLINE}, "BUSLINE LIKE ? OR BUSLINE LIKE ? ", new </p><p> String[]{"%"+stopname+"%"+stopname2+"%","%"+stopname2+"%"
94、;+stopname+"</p><p> %"},null, null, null);</p><p> 查詢結(jié)果為空彈出對(duì)話框進(jìn)行提示,若結(jié)果不為空就將查詢到結(jié)果顯示在stopinfo布局界面中。界面最上方的標(biāo)題設(shè)置為"經(jīng)過(guò)"+stopname+"和"+stopname2+"的公交車(chē)有:"。然后對(duì)單擊事
95、件進(jìn)行監(jiān)聽(tīng),單擊某一項(xiàng)以后將該項(xiàng)公交車(chē)信息傳遞給showclick類(lèi),在showclick類(lèi)中完成公交車(chē)詳細(xì)信息的顯示。</p><p><b> ?。?)文件說(shuō)明</b></p><p> ?、?Stop2Stop.java: 提示用戶輸入要查詢的兩個(gè)站點(diǎn)名稱(chēng)的類(lèi)源文件。</p><p> ?、?Stop2StopResult.java :對(duì)
96、Stop2Stop傳入的站點(diǎn)名稱(chēng)進(jìn)行查詢,并將查尋結(jié)果顯示在列表中。</p><p> ?、?Showclick.java:顯示所單擊公交車(chē)的詳細(xì)信息。</p><p><b> (4)輸入項(xiàng)</b></p><p> 要查詢的兩個(gè)站點(diǎn)名稱(chēng)。</p><p><b> ?。?)輸出項(xiàng)</b>&l
97、t;/p><p> 在這兩個(gè)站點(diǎn)間通車(chē)的所有公交車(chē),以及這些公交車(chē)的信息。</p><p><b> (6)流程邏輯</b></p><p> 流程邏輯如圖5-5所示。</p><p> 2.4 公交換乘模塊</p><p><b> ?。?)模塊描述</b></p
98、><p> 該模塊功能:在兩個(gè)地點(diǎn)之間進(jìn)行路徑規(guī)劃,可以尋找三種交通工具(自己開(kāi)車(chē)、乘坐公交車(chē)、步行)的最佳的行車(chē)路線,如果兩個(gè)站點(diǎn)之間沒(méi)有直達(dá)的公交車(chē),系統(tǒng)會(huì)給出可行的換乘方案。這個(gè)模塊是利用Android系統(tǒng)中內(nèi)置的路徑規(guī)劃模塊實(shí)現(xiàn)。</p><p><b> ?。?)關(guān)鍵代碼</b></p><p> Intent intent = ne
99、w Intent(); </p><p> intent.setAction(Android.content.Intent.ACTION_VIEW); </p><p> /* 傳入路徑規(guī)劃所需要的地標(biāo)地址 */ </p><p> intent.setData ( Uri.parse("http://maps.google.com/maps?f=
100、d&saddr="+ </p><p> GeoPointToString (fromGeoPoint) +"&daddr="+GeoPointToString</p><p> ( ToGeoPoint )+ "&hl=cn" +"") ); </p><p> s
101、tartActivity (intent);</p><p><b> ?。?)輸入項(xiàng)</b></p><p> 起點(diǎn)、終點(diǎn)以及交通工具的選擇。</p><p><b> ?。?)輸出項(xiàng)</b></p><p><b> 給出行車(chē)方案。</b></p><
102、;p> 圖5-5 站站查詢模塊流程邏輯</p><p><b> ?。?)主要方法:</b></p><p> private String GeoPointToString(GeoPoint gp):將GeoPoint里的經(jīng)緯度以String,String返回。</p><p> ?。?)換乘算法流程圖(以2次以內(nèi)為例)</p
103、><p> 換乘算法流程圖[12]如圖5-6。</p><p> 3、公交數(shù)據(jù)下載模塊</p><p><b> (1)模塊描述</b></p><p> 該模塊功能:點(diǎn)擊更新公交數(shù)據(jù)時(shí),彈出選擇城市對(duì)話框,用戶點(diǎn)擊選擇后連接Tomcat服務(wù)器,下載公交數(shù)據(jù)文件,同時(shí)存入SQLITE數(shù)據(jù)庫(kù)。</p>&
104、lt;p> 模塊功能實(shí)現(xiàn)類(lèi):DownLoad,select2download,databse,databsehHelper類(lèi)</p><p><b> 主要變量和方法有:</b></p><p> 圖5-6 公交換乘模塊工作流程圖</p><p><b> 變量:</b></p><p&g
105、t; ?、?DownLoad load:定義一個(gè)下載類(lèi)的變量,用來(lái)下載文件。</p><p> ② private URL url:資源定位符。</p><p> ?、?private URLConnection uc:一個(gè)具有特定協(xié)議類(lèi)型的URL交換數(shù)據(jù)通信鏈路。</p><p><b> 方法:</b></p><p
106、> ?、?public void start():從服務(wù)器中下載數(shù)據(jù)然后寫(xiě)入文件。</p><p> ② public String getFileName(String str):獲得URL對(duì)應(yīng)的文件名,在sdcard中以相同的名稱(chēng)存放。</p><p> ?、?public void DevideToItem(String fileName):將原先的文本文件中的內(nèi)容切分成段,
107、將每個(gè)字段加入數(shù)據(jù)庫(kù)中。</p><p> ?、?private void addEvent(String string,String string1,String string2):向數(shù)據(jù)庫(kù)中添加一行。</p><p><b> ?。?)具體實(shí)現(xiàn)</b></p><p> 用戶點(diǎn)擊更新公交數(shù)據(jù)時(shí),彈出選擇城市對(duì)話框,用戶點(diǎn)擊確定后連接Tom
108、cat服務(wù)器,調(diào)用DownLoad類(lèi)中的函數(shù)start()開(kāi)始下載公交數(shù)據(jù)文件,下載同時(shí)保存選擇的城市名,傳遞城市名給databse類(lèi),在databse類(lèi)的onCreate()函數(shù)中調(diào)用DevideToItem(fileName)函數(shù),將文件中的每一輛公交車(chē)的信息切分成三段,并調(diào)用addEvent(String string,String string1, String string2)函數(shù)將這三段按照字段存入數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)中實(shí)體及屬性
109、如圖5-7。</p><p> 圖5-7 數(shù)據(jù)庫(kù)中公交車(chē)實(shí)體及屬性圖</p><p><b> (3)文件說(shuō)明</b></p><p> ?、?DownLoad.java: 從服務(wù)器下載文件到sdcard。</p><p> ?、?select2download.java::供用戶選擇要下載公交數(shù)據(jù)的城市名。<
110、/p><p> ③ databse.java: 數(shù)據(jù)庫(kù)操作類(lèi),將文件中的內(nèi)容分段,然后存入數(shù)據(jù)庫(kù)。</p><p> ?、?databsehHelper.java:數(shù)據(jù)庫(kù)輔助類(lèi),實(shí)現(xiàn)數(shù)據(jù)庫(kù)的建立,更新等。</p><p><b> ?。?)輸入項(xiàng)</b></p><p> 要下載公交數(shù)據(jù)的城市名。</p>
111、<p><b> (5)輸出項(xiàng)</b></p><p> 存有該城市的公交數(shù)據(jù)的數(shù)據(jù)庫(kù)event.db。</p><p> ?。?)公交數(shù)據(jù)下載模塊流程邏輯</p><p> 流程邏輯圖如圖5-8所示。</p><p><b> 4、數(shù)據(jù)更新模塊</b></p>&l
112、t;p><b> (1)模塊描述</b></p><p> 服務(wù)器端公交數(shù)據(jù)以文本形式存在,當(dāng)數(shù)據(jù)需要更新時(shí)管理員只需要更新新文件就可以了。</p><p><b> 5、地圖圖層模塊</b></p><p><b> ?。?)模塊描述</b></p><p>
113、本模塊完成在地圖中添加圖層的工作,例如在地圖上畫(huà)紅色的圓圈來(lái)標(biāo)志要查找的地點(diǎn),在地圖上畫(huà)公交路線等。</p><p> 這個(gè)模塊實(shí)現(xiàn)的類(lèi):OverLay,MyOverLay類(lèi),兩個(gè)類(lèi)均繼承自O(shè)verlay,Overlay是Android提供的在地圖上添加圖層的基類(lèi),只要重載其中的draw函數(shù)就可以在地圖上畫(huà)出不同的標(biāo)志。</p><p> 圖5-8 公交數(shù)據(jù)下載模塊流程邏輯</
114、p><p><b> ?。?)文件說(shuō)明</b></p><p> ?、?OverLay.java:畫(huà)紅色圓圈來(lái)表示指定位置。</p><p> ② MyOverLay.java:在某一路公交車(chē)的每個(gè)途經(jīng)站點(diǎn)畫(huà)藍(lán)色的圓圈,相鄰兩個(gè)站點(diǎn)之間畫(huà)藍(lán)色的線。</p><p><b> 6、本章小結(jié)</b>&l
115、t;/p><p> 本章詳細(xì)介紹了各個(gè)模塊的內(nèi)部處理流程,以及實(shí)現(xiàn)模塊的類(lèi),類(lèi)中的函數(shù)以及變量。</p><p> 六、系統(tǒng)測(cè)試及運(yùn)行結(jié)果分析</p><p><b> 1、 運(yùn)行環(huán)境</b></p><p> Android手機(jī)平臺(tái)。</p><p><b> 2、運(yùn)行測(cè)試<
116、;/b></p><p><b> 2.1 軟件運(yùn)行</b></p><p> 將.apk文件安裝,安裝步驟類(lèi)似于一般的手機(jī)軟件。安裝完成后點(diǎn)擊如圖6-1 所示的菜單位置,就會(huì)出現(xiàn)公交信心查詢系統(tǒng)的軟件圖標(biāo)(如圖6-2)。</p><p> 圖6-1 Android系統(tǒng)啟動(dòng)主界面 圖6-2 公交信息查詢系統(tǒng)的
117、軟件圖標(biāo)</p><p> 點(diǎn)擊圖標(biāo)就可以進(jìn)入軟件的運(yùn)行界面。</p><p><b> 2.2 運(yùn)行界面</b></p><p> 軟件開(kāi)始運(yùn)行后,首先出現(xiàn)如圖6-3的啟動(dòng)畫(huà)面。向下滑動(dòng)右側(cè)的滾動(dòng)條就可以看到所有的功能。</p><p> 2.3 軟件操作流程</p><p> 用戶在
118、“顯示當(dāng)前城市地圖”之前首先應(yīng)該“設(shè)置當(dāng)前城市”,點(diǎn)擊“設(shè)置當(dāng)前城市”后界面如下圖6-4所示,否則會(huì)彈出對(duì)話框提示用戶先設(shè)置當(dāng)前城市,用戶點(diǎn)擊確定按鈕后直接進(jìn)入當(dāng)前城市設(shè)置頁(yè)面(以北京市為例)。</p><p> 點(diǎn)擊“顯示當(dāng)前城市地圖”后會(huì)出現(xiàn)一個(gè)Toast顯示設(shè)置的當(dāng)前城市,持續(xù)3秒鐘后自動(dòng)消失,之后便會(huì)顯示當(dāng)前城市地圖,并以紅色圓圈標(biāo)注將當(dāng)前城市所在位置,點(diǎn)擊界面任意位置,會(huì)浮現(xiàn)出放大、縮小按鈕,將圖片放
119、大到合適的大小,如圖6-5所示。</p><p> 按返回鍵返回主界面,點(diǎn)擊“地圖瀏覽”就可以瀏覽地圖,可以對(duì)地圖進(jìn)行拖動(dòng)、放大、縮小等操作。</p><p> 圖6-3 程序啟動(dòng)畫(huà)面 圖6-4 設(shè)置當(dāng)前城市界面</p><p> 點(diǎn)擊主界面中的“查找定位”可以在地圖中查找編輯框中輸入的位置,并以紅色圓圈標(biāo)注(以黃島
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java的公交查詢系統(tǒng) ——畢業(yè)論文
- 公交查詢系統(tǒng)畢業(yè)論文
- 畢業(yè)論文-基于android平臺(tái)的車(chē)輛信息查詢系統(tǒng)的開(kāi)發(fā)設(shè)計(jì)
- 公交查詢系統(tǒng)畢業(yè)論文 (2)
- 公交線路查詢系統(tǒng)畢業(yè)論文
- 公交線路查詢系統(tǒng)畢業(yè)論文
- 基于java的城市公交查詢系統(tǒng)畢業(yè)論文
- 電子信息工程畢業(yè)論文公交查詢系統(tǒng)
- 畢業(yè)論文——信息查詢系統(tǒng)
- 畢業(yè)論文(設(shè)計(jì))公交路線查詢系統(tǒng)
- 畢業(yè)論文(設(shè)計(jì))公交路線查詢系統(tǒng)
- 城市公交線路查詢系統(tǒng)畢業(yè)論文
- 畢業(yè)論文-城市公交查詢系統(tǒng)設(shè)計(jì)
- 畢業(yè)論文——撫順城市公交在線查詢系統(tǒng)
- 高校信息查詢系統(tǒng)畢業(yè)論文
- 基于android的校園信息服務(wù)系統(tǒng)畢業(yè)論文
- 高校信息查詢系統(tǒng)畢業(yè)論文
- 城市公交線路查詢系統(tǒng)畢業(yè)論文設(shè)計(jì)
- 基于Android的校園信息服務(wù)系統(tǒng)畢業(yè)論文.doc
- 任文健畢業(yè)論文(公交查詢系統(tǒng)).doc
評(píng)論
0/150
提交評(píng)論