劉豐年
(三門峽職業(yè)技術(shù)學(xué)院 信息傳媒學(xué)院,河南 三門峽 472000)
隨著我國(guó)經(jīng)濟(jì)的飛速發(fā)展,汽車保有量逐年增加,交通擁塞、交通事故、能源危機(jī)、環(huán)境污染問題愈加嚴(yán)重,城市交通管理問題引起了社會(huì)各界的廣泛關(guān)注.為緩解城市交通管理壓力,公共交通工具已成為城市居民出行的重要交通工具.然而,隨著城市的不斷擴(kuò)建,交通線路不斷延伸,城市交通錯(cuò)綜復(fù)雜、四通八達(dá),城市居民特別是外地游客很難獲取最佳公交路線,為出行帶來不便.智慧城市建設(shè)對(duì)智慧交通提出了新的要求.因此,急需一種準(zhǔn)確、高效、智能的公交查詢APP系統(tǒng),為乘客及時(shí)全面、高效準(zhǔn)確地獲取公交信息提供可靠參考.
為此,本文立足城市公交管理現(xiàn)狀,使用Android Studio、HBuilder和Java工具,選用MySQL數(shù)據(jù)庫(kù),設(shè)計(jì)并實(shí)現(xiàn)了一種基于Android系統(tǒng)的智能公交查詢系統(tǒng)[1]78-83.該系統(tǒng)采用JS與原生交互的混合式開發(fā)技術(shù),實(shí)現(xiàn)了頁(yè)面布局和數(shù)據(jù)交互,嵌入了百度地圖API技術(shù)框架,簡(jiǎn)化了APP的邏輯設(shè)計(jì)和代碼編寫,后臺(tái)使用SSM框架提高了系統(tǒng)的運(yùn)行效率,簡(jiǎn)化了邏輯編碼,避免了代碼冗余.界面簡(jiǎn)單,操作方便,深受市民喜愛,具有一定的實(shí)際應(yīng)用和推廣價(jià)值.
通過調(diào)研,根據(jù)城市居民對(duì)公交實(shí)時(shí)查詢的功能需求,本文設(shè)計(jì)的智能公交查詢系統(tǒng)應(yīng)包含公交查詢、線路搜索、公交導(dǎo)航3個(gè)功能.
公交查詢主要是獲取用戶周邊最近站點(diǎn)的公交車信息,線路搜索主要是搜索公交的線路信息和該線路上的公交車信息,公交導(dǎo)航主要是獲取用戶當(dāng)前位置與目的位置,為用戶進(jìn)行導(dǎo)航.系統(tǒng)如圖1所示.

圖1 系統(tǒng)用例圖
總體設(shè)計(jì)又稱總體概要設(shè)計(jì),是軟件設(shè)計(jì)的一項(xiàng)重要任務(wù).主要包括:硬件支持基礎(chǔ)配置設(shè)計(jì)、系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì).
手機(jī)客戶端:安卓系統(tǒng)手機(jī)客戶端要求Android系統(tǒng)版4.4及其以上,手機(jī)內(nèi)存應(yīng)大于1 024 M以上,主頻在800 HZ及其以上[2]1139-1144.
服務(wù)器端:服務(wù)器系統(tǒng)要求win7、win8、win10或Linux,處理器應(yīng)為英特爾處理器i5以上,內(nèi)存8 G及其以上,硬盤1 024 G及其以上.
智能公交查詢系統(tǒng)應(yīng)包含用戶登錄注冊(cè)功能模塊和公交實(shí)時(shí)查詢功能模塊.系統(tǒng)結(jié)構(gòu)圖如圖2所示.
用戶登錄注冊(cè)功能模塊:該模塊包括注冊(cè)、登錄和修改密碼3項(xiàng)功能.在注冊(cè)中有短信驗(yàn)證信息功能,即根據(jù)短信驗(yàn)證碼進(jìn)行匹配,判斷輸入的手機(jī)號(hào)驗(yàn)證碼與系統(tǒng)生成的驗(yàn)證碼是否相同,相同則返回成功,通過驗(yàn)證;在登錄中,有網(wǎng)絡(luò)數(shù)據(jù)回調(diào)功能,用戶在頁(yè)面上輸入手機(jī)號(hào)和密碼,點(diǎn)擊登錄時(shí)把輸入的手機(jī)號(hào)和密碼通過移動(dòng)網(wǎng)絡(luò)發(fā)給服務(wù)器,服務(wù)器接收到數(shù)據(jù)后,進(jìn)一步去數(shù)據(jù)庫(kù)進(jìn)行搜索,判斷輸入的手機(jī)號(hào)和密碼是否正確,若不正確則返回手機(jī)客戶端驗(yàn)證錯(cuò)誤,并提示相應(yīng)的錯(cuò)誤信息給客戶端,若驗(yàn)證正確則進(jìn)入手機(jī)軟件客戶端首頁(yè);在修改密碼中,點(diǎn)擊忘記密碼,輸入手機(jī)號(hào),點(diǎn)擊發(fā)送短信驗(yàn)證碼,通過手機(jī)進(jìn)行驗(yàn)證,驗(yàn)證成功會(huì)提示重置密碼,按要求設(shè)置即可.
公交實(shí)時(shí)查詢模塊:該模塊包括公交查詢、線路搜索與公交導(dǎo)航3項(xiàng)功能.公交的實(shí)時(shí)查詢會(huì)自動(dòng)訪問到用戶手機(jī)定位權(quán)限,獲取用戶的經(jīng)緯度信息,并調(diào)用百度地圖的SDK,根據(jù)百度SDK的定位經(jīng)緯度返回百度的bd0911格式定位結(jié)果坐標(biāo)系[3]65-69.當(dāng)點(diǎn)擊周邊公交的時(shí)候會(huì)自動(dòng)獲取到用戶的經(jīng)緯度,客戶端通過網(wǎng)絡(luò)將用戶的GPS坐標(biāo)發(fā)送給服務(wù)器,服務(wù)器接收到用戶GPS信息的數(shù)據(jù)后,將會(huì)與GPS坐標(biāo)內(nèi)的所有站點(diǎn)信息做距離判斷的比較,取出距離最近的站點(diǎn)信息為用戶的當(dāng)前站點(diǎn),然后返回當(dāng)前站點(diǎn)上所有的公交車線路,如果用戶點(diǎn)擊了公交車線路,服務(wù)器將會(huì)獲取到該線路所有的站點(diǎn)信息,并獲取到距離用戶所在站點(diǎn)最近的3輛公交車信息;在線路搜索中,會(huì)讓用戶輸入要查詢的線路信息,服務(wù)器將會(huì)根據(jù)用戶輸入的線路信息,模糊查詢到公交的所有線路信息,并返回到界面上,如果用戶點(diǎn)擊某個(gè)線路,同樣會(huì)獲取到該線路的所有站點(diǎn)信息,與該線路上的3輛公交車信息;公交導(dǎo)航主要是針對(duì)坐公交人群從起點(diǎn)到目的地的線路規(guī)劃,讓用戶輸入起點(diǎn)和終點(diǎn)信息,系統(tǒng)根據(jù)信息調(diào)用百度API獲取到線路規(guī)劃分析.
2.3.2數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)
數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)中最重要的就是實(shí)體-聯(lián)系圖,即E-R圖,它可以有效幫助軟件開發(fā)者理清實(shí)體之間的關(guān)聯(lián).在智能公交查詢系統(tǒng)客戶端的實(shí)體-聯(lián)系圖中,實(shí)體大致類型有用戶類型、公交車類型,每一種類型都可以獨(dú)立的存在.用戶類型包括用戶實(shí)體和用戶登錄的實(shí)體;公交車類型中存在著公交車實(shí)體、公交車站點(diǎn)實(shí)體、公交車線路實(shí)體、公交車GPS的實(shí)體.其中,公交車與線路是多對(duì)一關(guān)系,由于一個(gè)公交車站點(diǎn)可以對(duì)應(yīng)多個(gè)公交車線路信息,一個(gè)線路又會(huì)有多個(gè)站點(diǎn),因此,站點(diǎn)與線路是多對(duì)多關(guān)系.一個(gè)公交車只有一個(gè)公交車信息,所以公交車與公交的GPS信息是一對(duì)一的關(guān)系.公交查詢E-R圖如圖3所示.

圖2 系統(tǒng)結(jié)構(gòu)圖

圖3 公交查詢E-R圖
2.3.2數(shù)據(jù)庫(kù)物理結(jié)構(gòu)設(shè)計(jì)
根據(jù)數(shù)據(jù)庫(kù)的概念結(jié)構(gòu)設(shè)計(jì),可以得到智能公交查詢系統(tǒng)中5個(gè)數(shù)據(jù)庫(kù)表結(jié)構(gòu)主要有.
用戶登錄表主要存儲(chǔ)用戶登錄信息,包括用戶名、密碼、登錄狀態(tài)、注冊(cè)時(shí)間和用戶信息外鍵等字段.
用戶信息詳情表主要存儲(chǔ)用戶的詳細(xì)信息,包括用戶的主鍵ID、用戶登錄表的主鍵ID、真實(shí)姓名、年齡、昵稱、性別、頭像圖片地址、用戶類型、用戶圖片信息等字段.
公交車信息表主要存儲(chǔ)公交車詳細(xì)信息,包括車輛編號(hào)、車輛唯一標(biāo)識(shí)、公交車票價(jià)、版本號(hào)、車載機(jī)唯一運(yùn)營(yíng)編號(hào)、車載機(jī)運(yùn)營(yíng)編號(hào)、客戶代碼等字段.
公交車線路表主要存儲(chǔ)公交車線路信息,包括公交車線路名稱、版本號(hào)、公交車線路票價(jià)、運(yùn)營(yíng)時(shí)間等字段,其運(yùn)營(yíng)時(shí)間包括夏天運(yùn)營(yíng)時(shí)間和冬天運(yùn)營(yíng)時(shí)間.
公交站點(diǎn)表主要存儲(chǔ)公交站點(diǎn)信息,包括站點(diǎn)名稱與站點(diǎn)經(jīng)緯度等字段.
根據(jù)總體設(shè)計(jì)完成登錄注冊(cè)模塊和公交實(shí)時(shí)查詢模塊的詳細(xì)設(shè)計(jì).由于智能公交查詢系統(tǒng)一般是在非WIFI環(huán)境下運(yùn)行,因此詳細(xì)設(shè)計(jì)時(shí)必須考慮節(jié)約流量問題.鑒于此,本設(shè)計(jì)中所有數(shù)據(jù)傳輸格式全部采用json格式[4]55-58,這樣便于數(shù)據(jù)交換,可以大大節(jié)約傳輸流量.
登錄注冊(cè)模塊設(shè)計(jì)主要包括注冊(cè)、登錄和修改密碼設(shè)計(jì).
客戶端的注冊(cè),會(huì)提示用戶輸入手機(jī)號(hào),點(diǎn)擊發(fā)送驗(yàn)證碼,調(diào)用后臺(tái)的發(fā)送驗(yàn)證碼接口,手機(jī)上會(huì)得到驗(yàn)證碼;再讓用戶輸入短信驗(yàn)證碼、密碼、確認(rèn)密碼.其中注冊(cè)的用戶名為手機(jī)號(hào)碼,密碼與確認(rèn)密碼必須保持一致.當(dāng)用戶手機(jī)號(hào)已經(jīng)注冊(cè)時(shí),將會(huì)提示手機(jī)號(hào)已有注冊(cè)賬號(hào),當(dāng)兩次賬號(hào)輸入不一致時(shí),則會(huì)提示用戶兩次密碼輸入不一致.所有驗(yàn)證通過時(shí),服務(wù)端會(huì)將請(qǐng)求的數(shù)據(jù)放入用戶登錄數(shù)據(jù)庫(kù)中,并返回給客戶端注冊(cè)成功,客戶端會(huì)跳轉(zhuǎn)到登錄界面,提示用戶登錄.
客戶端登錄,會(huì)提示用戶輸入用戶名和密碼,然后進(jìn)行驗(yàn)證,驗(yàn)證通過則提示登錄成功,否則將提示密碼錯(cuò)誤,重新輸入.
修改密碼與一般的APP客戶端一樣,在這里不再一一贅述.注冊(cè)登錄界面如圖4所示.
公交實(shí)時(shí)查詢?cè)O(shè)計(jì)中,會(huì)自動(dòng)獲取用戶手機(jī)的GPS坐標(biāo),得到位置信息后會(huì)調(diào)用獲取周邊最近站點(diǎn)的接口,并將GPS信息傳遞給該接口,服務(wù)器接收請(qǐng)求之后,返回距離該地點(diǎn)最近的站點(diǎn)信息與途徑該站點(diǎn)的所有公交線路信息[5]31-35.用戶可以選擇線路信息,客戶端發(fā)起請(qǐng)求并將線路和站點(diǎn)信息傳遞給服務(wù)器,客戶端調(diào)用獲取線路上所有站點(diǎn)信息和獲取該線路上的3輛公交車接口.由于公交車有上下行,服務(wù)器接收請(qǐng)求后,會(huì)先判斷站點(diǎn)的上下行方向,獲取該方向上線路的所有站點(diǎn),計(jì)算出距離當(dāng)前站點(diǎn)最近的3輛公交車信息,將計(jì)算的時(shí)間距離返回客戶端,客戶端接收返回?cái)?shù)據(jù)后,利用js動(dòng)態(tài)的寫入頁(yè)面供用戶參考.在顯示頁(yè)面上設(shè)置有一分鐘一刷新功能,在用戶使用時(shí),如果用戶鎖定了該頁(yè)面,系統(tǒng)會(huì)一分鐘更新數(shù)據(jù),頁(yè)面上也有刷新鍵,用戶也可點(diǎn)擊刷新鍵進(jìn)行刷新.在頁(yè)面中還有一個(gè)線路反轉(zhuǎn)鍵,用戶可以點(diǎn)擊反轉(zhuǎn)獲取線路反方向的信息.
線路搜索設(shè)計(jì)中,當(dāng)用戶輸入線路信息,客戶端會(huì)調(diào)用模糊查詢線路的接口,服務(wù)器返回模糊查詢的結(jié)果,客戶端利用js在頁(yè)面動(dòng)態(tài)顯示,用戶選擇線路之后,客戶端會(huì)調(diào)用線路查詢公交(默認(rèn)方向?yàn)樯闲?方向上的信息,同樣會(huì)返回該線路上的所有公交車和該方向的3輛公交車信息,但是由于是線路搜索,所以不會(huì)顯示到達(dá)時(shí)間和距離.在該頁(yè)面上也設(shè)置的有刷新鍵和線路反轉(zhuǎn)鍵,點(diǎn)擊可進(jìn)行刷新和反轉(zhuǎn).
公交導(dǎo)航設(shè)計(jì)中,讓用戶輸入起點(diǎn)(起點(diǎn)默認(rèn)為當(dāng)前位置,也可手動(dòng)輸入)和終點(diǎn)位置信息,系統(tǒng)會(huì)調(diào)用百度的線路公交規(guī)劃API,返回相應(yīng)的線路信息,點(diǎn)擊相應(yīng)的線路,會(huì)顯示具體的乘車信息,再次點(diǎn)擊顯示在地圖上,用戶可以根據(jù)地圖標(biāo)注的點(diǎn),到相應(yīng)的位置坐車.
經(jīng)緯度距離計(jì)算功能代碼如下:
* @Description: 獲取兩點(diǎn)經(jīng)緯之間的距離 * @param lat_a
* @param lng_a
* @param lat_b
* @param lng_b
* @param @return
* @return double
* @author
* @date
Public double getDistanceFromTwoPoints
(double lat_a, double lng_a, double lat_b, double lng_b)
{double t1 = Math.cos(lat_a / PK) * Math.cos(lng_a / PK) * Math.cos(lat_b / PK) *
Math.cos(lng_b / PK);
double t2 = Math.cos(lat_a / PK) * Math.sin(lng_a / PK) * Math.cos(lat_b / PK) *
Math.sin(lng_b / PK);
double t3 = Math.sin(lat_a / PK) * Math.sin(lat_b / PK);
double tt = Math.acos(t1 + t2 + t3);
//System.out.println("兩點(diǎn)間的距離:" + 6366000 * tt + " 米");
return 6366000 * tt; }
公交查詢客戶端如圖5所示.
智能公交查詢系統(tǒng)以洛陽(yáng)城市公交為例進(jìn)行了應(yīng)用測(cè)試.首先按照要求完成了硬件環(huán)境搭建和軟件配置,然后點(diǎn)擊周邊公交,獲取到最近的公交站點(diǎn),如圖6所示,點(diǎn)擊50路進(jìn)入公交實(shí)時(shí)查詢頁(yè)面,如圖7所示.
點(diǎn)擊公交導(dǎo)航,輸入起點(diǎn)(河南科技大學(xué)開元校區(qū))和終點(diǎn)(王城公園動(dòng)物園),會(huì)自動(dòng)搜索出路線信息,如圖8所示.點(diǎn)擊線路信息時(shí)會(huì)調(diào)用百度的API,獲取公交線路規(guī)劃具體信息,點(diǎn)擊該線路的信息會(huì)在地圖上標(biāo)注出線路信息,如圖9所示.

圖4 注冊(cè)登錄界面

圖5 公交查詢客戶端

圖6 獲取最近公交站點(diǎn)

圖7 50路公交信息

圖8 公交導(dǎo)航搜索路線信息

圖9 公交導(dǎo)航圖
經(jīng)過測(cè)試發(fā)現(xiàn)智能公交查詢系統(tǒng)符合實(shí)際,整個(gè)系統(tǒng)運(yùn)行正常、功能完善、操作方便、高效準(zhǔn)確,但網(wǎng)絡(luò)必須正常,否則會(huì)出現(xiàn)卡帶現(xiàn)象.因此,要想正常使用該系統(tǒng),必須確保手機(jī)網(wǎng)絡(luò)信號(hào)穩(wěn)定.
為順應(yīng)智慧城市建設(shè)的需求,緩解城市交通擁塞、交通事故、能源危機(jī)和環(huán)境污染問題,本文立足城市公交管理實(shí)際,以方便乘客出行為宗旨,使用Android Studio、HBuilder和Java工具,設(shè)計(jì)了一種智能公交查詢APP客戶端系統(tǒng),實(shí)現(xiàn)了城市公交實(shí)時(shí)查詢、線路搜索和公交導(dǎo)航功能.該系統(tǒng)嵌入了百度地圖API接口,后臺(tái)采用SSM框架,方便了設(shè)計(jì),簡(jiǎn)化了代碼.通過洛陽(yáng)城市公交查詢測(cè)試,系統(tǒng)運(yùn)行正常、功能完善、操作方便、高效準(zhǔn)確,深受市民喜愛,具有一定的實(shí)際應(yīng)用和推廣價(jià)值.
商丘職業(yè)技術(shù)學(xué)院學(xué)報(bào)2018年2期