何 苑,郝夢(mèng)巖
(長(zhǎng)治學(xué)院 計(jì)算機(jī)系,山西 長(zhǎng)治 046011)
隨著公共交通的日益便捷以及人們?cè)鰪?qiáng)的環(huán)保意識(shí),越來越多的人們選擇公共交通作為首選的出行方式。但日益擴(kuò)大的城市規(guī)模,繁雜的公交路線,給不熟悉路線的市民以及外來務(wù)工、求學(xué)、旅游等急需了解乘車路線的人們帶來很大的困擾。隨著智能手機(jī)終端的普及和Android 開發(fā)的興起,傳統(tǒng)基于B/S 頁面模式的公交查詢系統(tǒng)已經(jīng)無法滿足人們對(duì)便捷性的要求[1-5]。當(dāng)前基于地圖服務(wù)的移動(dòng)公交查詢系統(tǒng)以其直觀、便捷的特點(diǎn),具有明顯的優(yōu)勢(shì)。目前常用的提供地圖服務(wù)的地圖API 有:高德地圖API、Google API、百度地圖API。經(jīng)過對(duì)比分析發(fā)現(xiàn),其中高德地圖API 的android 版本提供的位置信息不是很全面。Google 地圖在國內(nèi)由于各種原因,經(jīng)常出現(xiàn)服務(wù)不穩(wěn)定和定位精確度不足的問題,影響使用。相對(duì)而言百度地圖提供的免費(fèi)服務(wù)非常完善,定位精確度高,獲得授權(quán)后可以無次數(shù)限制的進(jìn)行API接口調(diào)用,因此成為許多有地圖服務(wù)需求應(yīng)用程序的首選。
本文基于Android 平臺(tái),通過對(duì)百度地圖API 的調(diào)用,結(jié)合SQLite 數(shù)據(jù)庫,實(shí)現(xiàn)了基于位置服務(wù)的移動(dòng)公交查詢系統(tǒng)。系統(tǒng)能夠滿足用戶查詢公交路線的需求,實(shí)現(xiàn)地圖查看、實(shí)時(shí)定位、公交路線站點(diǎn)查詢、乘車方案查詢等功能。
移動(dòng)公交查詢系統(tǒng)的開發(fā)環(huán)境的主要包括:基本Java環(huán)境JDK(Java Develop Kit)、Eclipse、Android SDK(Software Development Kit,SDK)、ADT 插 件(Android Development Tools,開發(fā)工具包)和百度地圖SDK,各個(gè)組成部分的關(guān)系如圖1 系統(tǒng)開發(fā)環(huán)境示意圖所示。搭建步驟如下:1)安裝JDK 基本java 環(huán)境。2)安裝Eclipse 集成開發(fā)環(huán)境。3)在Eclipse 中安裝ADT 插件,并在Eclipse 中進(jìn)行環(huán)境設(shè)置。4)在Eclipse 環(huán)境中按照并配置Android SDK。5)建立Android虛擬設(shè)備(AVD)。
圖1 系統(tǒng)開發(fā)環(huán)境示意圖
在需求分析的基礎(chǔ)上進(jìn)行系統(tǒng)總體設(shè)計(jì),移動(dòng)公交查詢系統(tǒng)由地圖、導(dǎo)航、系統(tǒng)設(shè)置等三個(gè)功能模塊組成,如圖2 移動(dòng)公交查詢系統(tǒng)功能模塊圖所示。
圖2 移動(dòng)公交查詢系統(tǒng)功能模塊圖
在系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)中,對(duì)于公交信息、線路信息均通過百度地圖API 獲取并未進(jìn)行本地存儲(chǔ),因此系統(tǒng)僅對(duì)常用地址采用SQLite 數(shù)據(jù)庫[6]進(jìn)行了存儲(chǔ),以便于多次查詢。常用地址表結(jié)構(gòu)如表1 所示。
表1 常用地址表結(jié)構(gòu)
通過鏈 接(http://api.map.baidu.com/lbsapi/cloud/geosdk-android-download.htm)下載百度地圖Android SDK 的相應(yīng)開發(fā)包[7],根據(jù)百度地圖Android SDK 來配置Eclipse 開發(fā)環(huán)境。申請(qǐng)獲取百度地圖移動(dòng)版的開發(fā)密鑰,通過SDK顯示百度地圖數(shù)據(jù)接口進(jìn)行相應(yīng)的操作,在系統(tǒng)中顯示百度地圖。在系統(tǒng)中添加地圖事件監(jiān)聽方法,使用戶進(jìn)行拖動(dòng)、雙擊、旋轉(zhuǎn)等操作時(shí)可以改變地圖的狀態(tài)。
地圖視圖切換模塊根據(jù)百度地圖Android SDK 提供的三種類型的地圖資源:普通矢量地圖(2D、3D)、衛(wèi)星圖、實(shí)時(shí)路況圖,在系統(tǒng)中通過mapType 方法設(shè)置地圖類型。
搜索定位功能模塊調(diào)用百度地圖 API 搜索類MarkeSearch 進(jìn)行查詢,根據(jù)返回的包含經(jīng)緯度的坐標(biāo)點(diǎn),調(diào)用百度地圖API 的定位類LocationClient 對(duì)該坐標(biāo)點(diǎn)進(jìn)行定位。圖3 顯示了系統(tǒng)的定位功能,圖4 顯示了以上海為關(guān)鍵詞進(jìn)行搜索時(shí)城市切換功能。
圖3 定位功能
圖4 城市切換功能
路線查詢功能模塊能提供指定線路的站點(diǎn)信息,并且在地圖上呈現(xiàn)相應(yīng)的行車路線。該功能通過調(diào)用百度地圖API 中的BusLineSearch 類進(jìn)行查詢,并返回相應(yīng)路線上節(jié)點(diǎn)的相關(guān)坐標(biāo)點(diǎn)集合。調(diào)用百度地圖API TextOption 類根據(jù)坐標(biāo)點(diǎn)集合在地圖上進(jìn)行繪制,從而在地圖上顯示出該線路公交的行車路線。圖5 顯示了查詢303 路公交時(shí),地圖上顯示出的303 路公交車的行車路線。單擊地圖下方出現(xiàn)的前后圖標(biāo)按鈕,相應(yīng)按鈕的單擊事件通過修改查詢索引下標(biāo),調(diào)用TextOption 類在百度地圖上顯示出公交站點(diǎn)名稱。通過點(diǎn)擊向前向后按鈕,即可查看303 路公交車的所有站點(diǎn),在圖5 中路線上顯示的站點(diǎn)是交警支隊(duì),圖6 為點(diǎn)擊向前按鈕后顯示的前一站點(diǎn)康園小區(qū)站。
圖5 公交路線查詢-交警支隊(duì)站
圖6 公交路線查詢-康園小區(qū)站
乘車方案功能模塊能根據(jù)用戶提供的起點(diǎn)和終點(diǎn),顯示二者之間的所有換乘路線方案,并且能顯示出所有換乘路線中用時(shí)最短、距離最短、換乘最少的方案。
根據(jù)用戶輸入的乘車起點(diǎn)和目的站,在進(jìn)行查詢操作時(shí)百度API 相關(guān)類會(huì)傳入一個(gè)名為onGetTransitRouteResult 的類,該類中封裝了公交路線的距離、起點(diǎn)、終點(diǎn)、節(jié)點(diǎn)、時(shí)間、換乘等公交路線的所有基本信息,通過比較算法可篩選出距離最短,換乘最少,時(shí)間最短的乘車路線。圖7 顯示長(zhǎng)治學(xué)院到西客運(yùn)中心站的換乘信息,其中2 路車是距離最短、時(shí)間最短并且換乘最少的乘車路線。圖8 顯示長(zhǎng)治學(xué)院到火車站的乘車方案,其中9 路轉(zhuǎn)13 路時(shí)間最短,13 路距離最短且無需換乘。
圖7 到客運(yùn)中心公交乘車方案
圖8 到火車站公交乘車方案
常用地址功能用來保存經(jīng)常用到的地址信息,該功能通過SQLite 實(shí)現(xiàn)。SQLite 繼承了SQLiteOpenHelper 類單例模式的實(shí)現(xiàn),通過SQLiteDatabase 數(shù)據(jù)庫工具類,可以對(duì)常用地址信息表進(jìn)行增刪改操作。退出系統(tǒng)功能通過調(diào)用android.app.activity 類的方法實(shí)現(xiàn)。
基于百度地圖的移動(dòng)公交查詢系統(tǒng)通過對(duì)Android API、百度地圖Android SDK、數(shù)據(jù)庫SQLite 等的應(yīng)用,實(shí)現(xiàn)了地圖顯示、定位、公交查詢、乘車方案查詢等基本功能,使用戶可通過本系統(tǒng)進(jìn)行合理的乘車安排,方便出行。系統(tǒng)基于Android 平臺(tái)和百度地圖的開放性,同時(shí)利用各種插件開發(fā)包的設(shè)計(jì)實(shí)現(xiàn)方法為移動(dòng)公交查詢系統(tǒng)提供了一種解決方案。
[1]張永梅,韓焱,陳立潮.城市公交查詢系統(tǒng)的研究與設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用,2005,25(2) :422-425.
[2]連劍,許欽泰,王永,等.基于GIS 公交查詢系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].交通運(yùn)輸工程與信息學(xué)報(bào),2009,7(3) :68-72.
[3]劉曉艷,閆宏印.太原市公交查詢系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)[J].電腦開發(fā)與應(yīng)用,2008,21(4) :70-72.
[4]王進(jìn).實(shí)時(shí)公交查詢系統(tǒng)的優(yōu)化設(shè)計(jì)和實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2013:32-38.
[5]周繼芳.基于J2EE 的公交線路查詢系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2009:23-26.
[6]Grant Allen,Mike Owens,楊謙,等.SQLite 權(quán)威指南[M].北京:電子工業(yè)出版社,2012:5-11.18-23.
[7]Yanlis.LBS 云[EB/OL].http://baike.baidu.com/view/9431479.htm? fr=Aladdin,2015-5-20.
[8]Reto Meier.Android 4 高級(jí)編程[M].第3 版.佘建偉,趙凱,譯.北京:清華大學(xué)出版社,2013:30-65.