余尤騁
(南京林業大學 人文社會科學學院,南京 210037)
當前,旅游已經成為我國普通民眾重要的休閑娛樂方式之一,同時,隨著計算機技術和移動通訊技術的發展,智能手機已經和工作、生活的各個方面相融合,成為不可缺少的必需品。在此種情況下,傳統的旅游模式不能滿足游客的需求,他們對旅游信息化的期望水平更高,既希望通過智能手機平臺實現自助旅游,自助游覽景區[1],同時通過電子地圖確定自己所在的位置,防止走失或者迷糊,自由組合旅游路線。
近年來,地圖導航定位系統已經比較成熟,應用也越來越廣泛,如谷歌的 Google Map、百度地圖等,極大的促進了基于地理位置服務的發展,尤其是Android 開源移動開發平臺的發展,國內很多學者開始基于手機平臺開發各種旅游應用系統,如基于云平臺的手機導游系統、海南自助游導航系統[2]、景區移動終端服務平臺[3]等,這些研究的應用滿足了游客對于自助旅游的信息化需求,但是自助旅游系統的功能和性能還有很高的進步發展空間。
本系統在Android手機操作平臺上開發的一種旅游軟件,用戶安裝該軟件系統之后,先進行注冊,然后再進行登錄,選擇相應的功能模塊,比如景點位置的查詢、景點天氣的查詢等等,本系統的整體流程,如圖1所示。
由圖1可知,自助旅游系統主要由客戶端和服務器兩部分組成,客戶端展示給用戶,實現和用戶的交互,服務器則是對用戶的數據進行整理,它們之間進行的主要操作是數據交換。

圖1 系統整體流程
結合系統的基本功能需求,在設計過程中將系統分成3個功能模塊,如圖2所示。

圖2 系統功能需求圖
3個功能模塊分別為會員模塊、功能模塊、后臺模塊,設計的自助旅游客戶端是最終呈現給用戶的界面,負責系統與用戶的交互,同時系統的各項功能都是通過該層向用戶展示的,用戶通過選擇不同的選項來請求服務,可以提供給用戶登錄注冊、路徑規劃、路徑導航、實時定位、緊急救援、即時聊天、景點查詢、天氣查詢、景點講解、汽車票預訂、火車票預訂、飛機票預訂。后臺管理模塊是整個系統的核心,由服務器模塊、數據處理模塊兩個子模塊組成,服務器模塊包括百度地圖數據庫服務器、Web服務器、業務服務器。數據獲取模塊主要是數據處理模塊對獲取的信息進行處理,如實時定位;從百度熱力地圖獲取景點周邊的天氣情況,方便為出游做出安排,導航出行等;后臺處理通過用戶界面Internet啟動或通過對話框進行搜索和查詢。數據存儲器包含了對文件和SD存儲卡的訪問,也封裝了所有對SQLite數據庫操作的方法,用戶界面和后臺處理會調用它來實現數據庫操作。
為了便于系統后期的擴展和維護,采用HTTP(Hyper Text Transfer Protocol)超文本傳輸協議實現手機客戶端與Web服務器、數據庫服務器之間的網絡連接,手機客戶端只存儲少量的數據,大部分數據來自于后臺服務器,可以在沒有網絡的情況下實現離線導航,手機Android客戶端使用SQLite數據庫保存數據。SQLite數據庫是一種輕量級數據庫,占用空間非常少,運行高效可靠,可移植性好,并且提供零配置運行模式。每個應用程序的SQLite數據被保存在各自的/data/data/

圖3 手機終端開發項目列表
Android客戶端在設計過程中十分重視用戶體驗,只將Andorid系統需要的狀態欄和操作欄保留在客戶端主界面,其他位置全部被地圖空間占據,使游客需要的信息能夠大部分在地圖上展示,提高了軟件的使用效果,使其操作更加流暢,客戶端的菜單采用彈出式,只有點擊菜單或者是在邊緣滑動按鈕時才會顯示出來。本研究僅以地圖加載實現和路徑規劃與導航兩個功能模塊的開發進行簡要概述,具體如下。
3.1.1 地圖加載實現
通過解析Android Manifest.xml文件可知,可以將一個Android項目當做一個Application對象。系統設計過程中使用設計模式中的單例設計重寫了Application類,這樣可以確保系統一個類和一個實例相對應,且該實例易于外界訪問,降低了實例個數控制的難度并節約了系統資源。系統在進行地圖加載時,需要首先驗證地圖功能是否授權,即是否匹配Baidu API key正確,而這個對象只需要實例化一個即可,因此設計過程中使用單例設計模式,要求只存在一個該Application類的對象。具體實現步驟如下:
(1)首先對一個靜態的類圖像進行定義:private static MyApplication mInstance=null;
(2)再通過定義一個靜態類讓其只能實例化一個自身對象并返回:public static My Application getInstance(){return mInstance;};
(3)創建單例設計模式之后,在每個界面只需要如下代碼就可以完成百度開發身份授權的驗證及加載:

3.1.2 路徑規劃與導航
路徑規劃與導航主要是滿足游客自助旅游出行過程中的線路規劃,百度地圖導航SDK的代碼Jar包具有路徑規劃和導航、自定義圖層和語音播報等功能[4],它由Java源代碼編譯打包而成,資源Jar包由導航需要的基礎數據、配置數據及導航功能設計的布局、字符串等資源打包形成,路徑導航和規劃SDK代碼包實現具體如下:
(1)創建一個 Activity及一個Activity的子類,在子類中,采用onCreate()實現系統回調,On Get Route Plan Result Listener和On Map Click Listener接口。
(2)獲取游客自助游過程中輸入的地址信息,并將地圖控件初始化。
(3)創建一個Route Plan Search對象,添加設置路線檢索監聽者(set On Get Route Plan Result Listener(On Get Route Plan Result Listener))。
(4)游客規劃路徑方式之后(公交、步行或自駕),向Route Plan Search實例設置并添加出行方式,待路徑規劃成功之后,通過route.Get All Step()獲得Object對象數據,并根據選擇的出行方式判斷Object對象的類型,根據判斷的類型獲得百度地圖提供的出行路線。
(5)導航(部分代碼)

服務器端包括地圖服務器和業務服務器,地圖服務器為百度地圖數據庫服務器,發布相關的地圖信息數據。業務服務器使用Spring、Struts、Hibernate框架調用百度數據庫提供的函數進行空間關系判斷,并將執行的結果返回到手機Android客戶端。
手機Android客戶端與服務器之間的交互是該系統實現的重要基礎,系統中旅游信息的查詢、地圖導航等關鍵的應用都需要通過手機Android客戶端與服務器之間的交互來實現。交互過程中需要的數據格式可以選擇JSON、XML、普通表單數據等。使用普通表單數據容易出錯,不能復用。XML文本傳輸數據和JSON格式相比數據量要多,因此本系統的交互數據格式選擇JSON。JSON數據格式是一種JavaScript表示數據對象的文本格式??蛻舳税l送信息時的JSON字符串作為HTTP請求的data參數的值,服務器端的處理程序對相關的請求進行解析,獲得data中的JSON字符串,利用C#的JSON庫方法對客戶端的請求進行解析,再調用業務邏輯層的相應方法獲得數據,以JSON數據格式封裝之后將結果傳回客戶端??蛻舳私邮辗掌骰貍鞯腏SON數據,解析之后顯示在界面。
系統設計完成之后,需要經過前期的基礎測試才會在小范圍內部署和應用,通過測試可知,手機Android客戶端可以訪問后臺服務器中的數據,完成了上述系統基本功能的設計,并且系統運行穩定,輸入相關的景點名稱可以實現路徑規劃與導航,顯示天氣情況等。系統應用過程中的地圖定位,如圖4所示。

圖4 地圖定位
本文設計的基于Android系統和百度地圖的自助旅游導航系統基本上可以滿足游客出行,打造了專屬的旅游軟件,通過景點查詢可以快速了解景點的具體情況,在出行過程中還可以快速實現路徑的規劃和導航,同時還有酒店和票務模塊,為出行的規劃提供了便利。同時系統的后臺運行良好,在下一步的計劃中,將進一步完善游客出行的需求調研,使自助旅游系統的功能更加完善,提高其實用性。