余尤騁
(南京林業(yè)大學(xué) 人文社會科學(xué)學(xué)院,南京 210037)
當前,旅游已經(jīng)成為我國普通民眾重要的休閑娛樂方式之一,同時,隨著計算機技術(shù)和移動通訊技術(shù)的發(fā)展,智能手機已經(jīng)和工作、生活的各個方面相融合,成為不可缺少的必需品。在此種情況下,傳統(tǒng)的旅游模式不能滿足游客的需求,他們對旅游信息化的期望水平更高,既希望通過智能手機平臺實現(xiàn)自助旅游,自助游覽景區(qū)[1],同時通過電子地圖確定自己所在的位置,防止走失或者迷糊,自由組合旅游路線。
近年來,地圖導(dǎo)航定位系統(tǒng)已經(jīng)比較成熟,應(yīng)用也越來越廣泛,如谷歌的 Google Map、百度地圖等,極大的促進了基于地理位置服務(wù)的發(fā)展,尤其是Android 開源移動開發(fā)平臺的發(fā)展,國內(nèi)很多學(xué)者開始基于手機平臺開發(fā)各種旅游應(yīng)用系統(tǒng),如基于云平臺的手機導(dǎo)游系統(tǒng)、海南自助游導(dǎo)航系統(tǒng)[2]、景區(qū)移動終端服務(wù)平臺[3]等,這些研究的應(yīng)用滿足了游客對于自助旅游的信息化需求,但是自助旅游系統(tǒng)的功能和性能還有很高的進步發(fā)展空間。
本系統(tǒng)在Android手機操作平臺上開發(fā)的一種旅游軟件,用戶安裝該軟件系統(tǒng)之后,先進行注冊,然后再進行登錄,選擇相應(yīng)的功能模塊,比如景點位置的查詢、景點天氣的查詢等等,本系統(tǒng)的整體流程,如圖1所示。
由圖1可知,自助旅游系統(tǒng)主要由客戶端和服務(wù)器兩部分組成,客戶端展示給用戶,實現(xiàn)和用戶的交互,服務(wù)器則是對用戶的數(shù)據(jù)進行整理,它們之間進行的主要操作是數(shù)據(jù)交換。
圖1 系統(tǒng)整體流程
結(jié)合系統(tǒng)的基本功能需求,在設(shè)計過程中將系統(tǒng)分成3個功能模塊,如圖2所示。
圖2 系統(tǒng)功能需求圖
3個功能模塊分別為會員模塊、功能模塊、后臺模塊,設(shè)計的自助旅游客戶端是最終呈現(xiàn)給用戶的界面,負責系統(tǒng)與用戶的交互,同時系統(tǒng)的各項功能都是通過該層向用戶展示的,用戶通過選擇不同的選項來請求服務(wù),可以提供給用戶登錄注冊、路徑規(guī)劃、路徑導(dǎo)航、實時定位、緊急救援、即時聊天、景點查詢、天氣查詢、景點講解、汽車票預(yù)訂、火車票預(yù)訂、飛機票預(yù)訂。后臺管理模塊是整個系統(tǒng)的核心,由服務(wù)器模塊、數(shù)據(jù)處理模塊兩個子模塊組成,服務(wù)器模塊包括百度地圖數(shù)據(jù)庫服務(wù)器、Web服務(wù)器、業(yè)務(wù)服務(wù)器。數(shù)據(jù)獲取模塊主要是數(shù)據(jù)處理模塊對獲取的信息進行處理,如實時定位;從百度熱力地圖獲取景點周邊的天氣情況,方便為出游做出安排,導(dǎo)航出行等;后臺處理通過用戶界面Internet啟動或通過對話框進行搜索和查詢。數(shù)據(jù)存儲器包含了對文件和SD存儲卡的訪問,也封裝了所有對SQLite數(shù)據(jù)庫操作的方法,用戶界面和后臺處理會調(diào)用它來實現(xiàn)數(shù)據(jù)庫操作。
為了便于系統(tǒng)后期的擴展和維護,采用HTTP(Hyper Text Transfer Protocol)超文本傳輸協(xié)議實現(xiàn)手機客戶端與Web服務(wù)器、數(shù)據(jù)庫服務(wù)器之間的網(wǎng)絡(luò)連接,手機客戶端只存儲少量的數(shù)據(jù),大部分數(shù)據(jù)來自于后臺服務(wù)器,可以在沒有網(wǎng)絡(luò)的情況下實現(xiàn)離線導(dǎo)航,手機Android客戶端使用SQLite數(shù)據(jù)庫保存數(shù)據(jù)。SQLite數(shù)據(jù)庫是一種輕量級數(shù)據(jù)庫,占用空間非常少,運行高效可靠,可移植性好,并且提供零配置運行模式。每個應(yīng)用程序的SQLite數(shù)據(jù)被保存在各自的/data/data/
圖3 手機終端開發(fā)項目列表
Android客戶端在設(shè)計過程中十分重視用戶體驗,只將Andorid系統(tǒng)需要的狀態(tài)欄和操作欄保留在客戶端主界面,其他位置全部被地圖空間占據(jù),使游客需要的信息能夠大部分在地圖上展示,提高了軟件的使用效果,使其操作更加流暢,客戶端的菜單采用彈出式,只有點擊菜單或者是在邊緣滑動按鈕時才會顯示出來。本研究僅以地圖加載實現(xiàn)和路徑規(guī)劃與導(dǎo)航兩個功能模塊的開發(fā)進行簡要概述,具體如下。
3.1.1 地圖加載實現(xiàn)
通過解析Android Manifest.xml文件可知,可以將一個Android項目當做一個Application對象。系統(tǒng)設(shè)計過程中使用設(shè)計模式中的單例設(shè)計重寫了Application類,這樣可以確保系統(tǒng)一個類和一個實例相對應(yīng),且該實例易于外界訪問,降低了實例個數(shù)控制的難度并節(jié)約了系統(tǒng)資源。系統(tǒng)在進行地圖加載時,需要首先驗證地圖功能是否授權(quán),即是否匹配Baidu API key正確,而這個對象只需要實例化一個即可,因此設(shè)計過程中使用單例設(shè)計模式,要求只存在一個該Application類的對象。具體實現(xiàn)步驟如下:
(1)首先對一個靜態(tài)的類圖像進行定義:private static MyApplication mInstance=null;
(2)再通過定義一個靜態(tài)類讓其只能實例化一個自身對象并返回:public static My Application getInstance(){return mInstance;};
(3)創(chuàng)建單例設(shè)計模式之后,在每個界面只需要如下代碼就可以完成百度開發(fā)身份授權(quán)的驗證及加載:
3.1.2 路徑規(guī)劃與導(dǎo)航
路徑規(guī)劃與導(dǎo)航主要是滿足游客自助旅游出行過程中的線路規(guī)劃,百度地圖導(dǎo)航SDK的代碼Jar包具有路徑規(guī)劃和導(dǎo)航、自定義圖層和語音播報等功能[4],它由Java源代碼編譯打包而成,資源Jar包由導(dǎo)航需要的基礎(chǔ)數(shù)據(jù)、配置數(shù)據(jù)及導(dǎo)航功能設(shè)計的布局、字符串等資源打包形成,路徑導(dǎo)航和規(guī)劃SDK代碼包實現(xiàn)具體如下:
(1)創(chuàng)建一個 Activity及一個Activity的子類,在子類中,采用onCreate()實現(xiàn)系統(tǒng)回調(diào),On Get Route Plan Result Listener和On Map Click Listener接口。
(2)獲取游客自助游過程中輸入的地址信息,并將地圖控件初始化。
(3)創(chuàng)建一個Route Plan Search對象,添加設(shè)置路線檢索監(jiān)聽者(set On Get Route Plan Result Listener(On Get Route Plan Result Listener))。
(4)游客規(guī)劃路徑方式之后(公交、步行或自駕),向Route Plan Search實例設(shè)置并添加出行方式,待路徑規(guī)劃成功之后,通過route.Get All Step()獲得Object對象數(shù)據(jù),并根據(jù)選擇的出行方式判斷Object對象的類型,根據(jù)判斷的類型獲得百度地圖提供的出行路線。
(5)導(dǎo)航(部分代碼)
服務(wù)器端包括地圖服務(wù)器和業(yè)務(wù)服務(wù)器,地圖服務(wù)器為百度地圖數(shù)據(jù)庫服務(wù)器,發(fā)布相關(guān)的地圖信息數(shù)據(jù)。業(yè)務(wù)服務(wù)器使用Spring、Struts、Hibernate框架調(diào)用百度數(shù)據(jù)庫提供的函數(shù)進行空間關(guān)系判斷,并將執(zhí)行的結(jié)果返回到手機Android客戶端。
手機Android客戶端與服務(wù)器之間的交互是該系統(tǒng)實現(xiàn)的重要基礎(chǔ),系統(tǒng)中旅游信息的查詢、地圖導(dǎo)航等關(guān)鍵的應(yīng)用都需要通過手機Android客戶端與服務(wù)器之間的交互來實現(xiàn)。交互過程中需要的數(shù)據(jù)格式可以選擇JSON、XML、普通表單數(shù)據(jù)等。使用普通表單數(shù)據(jù)容易出錯,不能復(fù)用。XML文本傳輸數(shù)據(jù)和JSON格式相比數(shù)據(jù)量要多,因此本系統(tǒng)的交互數(shù)據(jù)格式選擇JSON。JSON數(shù)據(jù)格式是一種JavaScript表示數(shù)據(jù)對象的文本格式。客戶端發(fā)送信息時的JSON字符串作為HTTP請求的data參數(shù)的值,服務(wù)器端的處理程序?qū)ο嚓P(guān)的請求進行解析,獲得data中的JSON字符串,利用C#的JSON庫方法對客戶端的請求進行解析,再調(diào)用業(yè)務(wù)邏輯層的相應(yīng)方法獲得數(shù)據(jù),以JSON數(shù)據(jù)格式封裝之后將結(jié)果傳回客戶端??蛻舳私邮辗?wù)器回傳的JSON數(shù)據(jù),解析之后顯示在界面。
系統(tǒng)設(shè)計完成之后,需要經(jīng)過前期的基礎(chǔ)測試才會在小范圍內(nèi)部署和應(yīng)用,通過測試可知,手機Android客戶端可以訪問后臺服務(wù)器中的數(shù)據(jù),完成了上述系統(tǒng)基本功能的設(shè)計,并且系統(tǒng)運行穩(wěn)定,輸入相關(guān)的景點名稱可以實現(xiàn)路徑規(guī)劃與導(dǎo)航,顯示天氣情況等。系統(tǒng)應(yīng)用過程中的地圖定位,如圖4所示。
圖4 地圖定位
本文設(shè)計的基于Android系統(tǒng)和百度地圖的自助旅游導(dǎo)航系統(tǒng)基本上可以滿足游客出行,打造了專屬的旅游軟件,通過景點查詢可以快速了解景點的具體情況,在出行過程中還可以快速實現(xiàn)路徑的規(guī)劃和導(dǎo)航,同時還有酒店和票務(wù)模塊,為出行的規(guī)劃提供了便利。同時系統(tǒng)的后臺運行良好,在下一步的計劃中,將進一步完善游客出行的需求調(diào)研,使自助旅游系統(tǒng)的功能更加完善,提高其實用性。