操鳳萍,余躍海,劉雪娟
(1.東南大學成賢學院 電子與計算機工程學院,江蘇 南京 210032; 2.江蘇金智教育信息股份有限公司,江蘇 南京 210000; 3.南京航空航天大學 計算機科學與技術學院,江蘇 南京 210016)
隨著移動通信與移動地理信息技術的飛速發展,基于位置服務(LBS)技術被廣泛應用于社交、旅游等領域。微信、陌陌等基于LBS的SNS開始普及,但其提供的LBS功能大都只涉及簽到、附近的人及群組等功能[1]。針對LBS在旅游信息服務方面的應用,學者們進行了大量研究。文獻[2-14]設計并實現了一種基于LBS與游客特征大數據分析的旅游信息個性化推送服務系統;文獻[3]實現基于LBS & GIS的旅游資源普查、評價與可視化查詢系統;文獻[5]提出的系統實現了地圖瀏覽、地圖搜索與路徑查詢等功能;文獻[8]提出的系統可實現地圖查看、移動定位、路線規劃、景區信息查詢、報警求援等功能。但這些APP的應用主要局限于旅游信息的查詢、推送、路徑規劃等基于位置的信息服務上,并未對旅行過程中,基于用戶實時位置的個性化分享進行深入研究。微信“朋友圈”的流行表明,“分享”成為旅行者傳播旅途所見所聞、傳遞快樂心情的重要方式。然而常用的微信“朋友圈”基于位置的分享功能相對有限,在分享地點時,只能分享人們當前所在位置,而無法對行進路線進行實時分享,也無法在“地圖應用”上進行路線規劃,且分享的各條信息之間較為獨立,信息連貫性較弱。
本文從旅行者在旅行中對移動位置信息分享的需求出發,提出基于LBS的足跡信息分享方式,用戶不僅可以進行旅行日志實時分享、旅行路徑規劃、收支記錄并對其進行量化分析,還能實時“發現”周圍用戶并關注他們的旅行信息。該設計不僅可以滿足用戶基于位置的個性化實時分享需求,同時在解決旅游信息推送延誤及信息不對稱問題方面發揮了重要作用[7]。
LBS 是指在移動計算條件下通過空間定位技術、地理信息技術、嵌入式技術及無線網絡技術,為用戶提供基于地理位置的服務[15]。基于LBS的服務被廣泛應用于各種商業活動中,如地圖服務、指南服務、緊急信息服務等[16]。美國社交服務網站 Foursquare 的出現,啟發了國內Social Networking Services(SNS) 網站增加基于地理位置服務的功能[17]。LBS 應用與 SNS 相結合成為目前 GIS 發展的熱點方向。用戶可以依托 LBS 服務,借助智能終端采集當前的旅游資源位置、查詢附近資源信息等[18-19]。國內市場占有率較高的微信、騰訊QQ、新浪微博、陌陌等社交軟件僅具備部分位置服務功能,隨著游客對旅游自主性及個性化分享要求的提升,傳統的信息分享方式很難滿足當今游客的需求。因此,建立一個基于位置服務(LBS)的旅行足跡移動分享系統是十分必要的。
由于旅游活動具有很強的位置移動性,基于LBS的足跡移動分享系統使用戶旅行時可以隨時將途中見聞、感想、照片等以“時間軸”為次序,編寫為旅行日志并發布;實時“發現”附近的其他用戶并關注其旅行日志,以實時掌握旅游動態;在電子地圖上自定義標記與路徑規劃;記錄途中的零碎開銷、收支情況,并對收支進行量化分析與直觀展示;調用第三方打車或訂餐服務。系統設計了關注、地圖、日志、賬本等模塊以滿足用戶需求,如圖1所示。

圖1 系統功能結構
關注模塊:該模塊用于展示被關注用戶的日志信息, 用戶以客戶端為入口,可以通過選擇距離,關注周邊用戶動態。
地圖模塊:用戶可以通過相應功能在地圖上自定義標記,可在地圖上繪制多邊形、折線,添加文字圖標,并進行路徑規劃。
日志模塊:用于用戶以“時間軸”為次序編寫旅行日志并發布。
賬本模塊:用戶在旅途中隨時記錄開銷,并進行收支直觀顯示。
其它模塊:作為第三方應用的調用接口,用戶需要時,點擊按鈕便可通過該接口直接在當前界面打開對應的第三方應用。
系統是基于移動定位技術(LBS)服務加以實現的,LBS服務為終端提供定位服務并針對用戶周邊位置進行分布查詢。LBS定位服務主要由移動終端、通訊網絡、服務中心、定位系統構成[20],如圖2所示。

圖2 移動位置服務結構
系統采用移動終端應用/系統服務/數據庫體系結構。移動終端應用完成定位、搜尋周邊與日志發布服務,可獲取用戶實時位置,同時接收用戶的服務請求等數據,繼而調用如定位、日志等相關功能模塊提供的服務,同時顯示返回結果。系統服務為終端提供日志生成、日志發布、定位服務并針對用戶周邊位置進行分布查詢。數據庫存放用戶信息、日志信息、賬本信息等。系統結構如圖3所示。Android客戶端根據Android系統的特點將客戶端結構分為三層:樣式界面(View)、功能實現(Class)、后臺數據(Data)。同時,系統通過集成百度地圖的開發工具包(BaiduMap SDK)進行基于LBS的相關功能開發。Servlet服務端為“登錄”、“記錄日志”、“獲取日志”等功能提供服務。客戶端發送GET/POST請求并與Servlet的相應方法進行交互。

圖3 系統結構
客戶端應用通過HTTP請求將用戶產生的數據發送給服務端,并在服務端對數據進行解析。主要的系統對象有日志(LogEntity)和用戶(User)。“用戶”對象涉及的功能包括登錄驗證、用戶信息展示,涉及的屬性有用戶名和密碼。對于這種涉及少數參數的數據傳輸,采用發送和接收請求時過程較為簡便的GET請求方式;“日志”對象涉及到的功能包括記錄日志、發布日志、查看日志,涉及到的屬性有時間、日期、日志內容、圖片內容等涉及多個參數的數據傳輸,采用保密性與數據封裝性較好的POST請求方式。在客戶端接收服務端返回的數據時,則采用輕量級的JSON格式進行傳輸,然后在客戶端通過Gson進行數據解析。
服務端使用MySQL作為數據庫存儲用戶與日志相關數據。“用戶信息表”用來記錄所有用戶信息,包括用戶姓名、用戶密碼、用戶性別等屬性;“日志表”用來記錄所有用戶發布的日志信息,包括:用戶姓名、日志年份、日志月份、日志文字內容、日志圖片內容等信息。利用Android系統的SQLite數據庫即可輕松、高效地進行存儲,從而滿足了緩存需求。系統的“賬本”功能便是使用SQLite數據庫進行數據存儲,既方便用戶隨時記錄,又能很好地對數據進行實時統計。
采用C/S計算模式,客戶端使用Android SDK。設計重點包含兩部分:Servlet服務端、Android 客戶端。Android客戶端部分在Window操作系統上使用安裝了Android ADT的Eclipse進行編碼實現,數據庫使用MySQL數據庫,服務端程序采用Servlet并將程序放在Tomcat服務器上運行。
客戶端主界面包括主界面菜單與主界面功能區。由于系統中的“地圖”和“日志”子模塊的呈現方式都需要盡量大的空間,所以選擇“側滑菜單+主界面”的布局結構。界面最頂層采用Android系統的抽屜布局——DrawerLayout,該容器內部包含兩個區域,一個用來展示界面主要內容,另一個用來展示左側菜單。界面主要內容的展現則是采取Android系統最新的“碎片化布局”,通過在該Activity里加載不同模塊對應的Fragment進行功能切換。主界面如圖4、圖5所示。
系統服務端采用Servlet作為客戶端與數據庫之間交互的橋梁,Android客戶端發送的GET/POST請求在服務端被Servlet對應的方法攔截到,進行數據處理后與數據庫交互。其在Eclipse的JavaEE內置模塊下進行Servlet開發,編寫Servlet相關方法為“登錄”、“記錄日志”、“獲取日志”等功能提供服務。客戶端發送的GET/POST請求在服務端被Servlet類進行處理,主要包括登錄操作類LoginByGet與日志存儲類Log_sava。登錄操作類處理GET請求,接受客戶端傳來的用戶名與密碼進行驗證,并返回驗證結果;日志存儲類處理POST請求,接受傳來的日志信息進行存儲。由于一條日志內容會包含數字、文字等內容,而且參數數量較多,因此采用POST請求進行傳輸與交互。

圖4 系統啟動頁

圖5 菜單界面
該模塊的主體是一張放在Fragment中的電子地圖,通過繼承并重寫百度地圖開發包的MapFragment,以開發自己的MapFragment。在地圖右下角添加功能入口按鈕,包括:標記開關、繪圖及地圖菜單按鈕。用戶進入該子模塊界面后,系統會自動在地圖上定位用戶位置。用戶可以通過手勢拖動縮放地圖進行查看,在需要標記某個位置時點擊右下角的“標記”按鈕,對地圖進行標記,點擊地圖時會調用百度地圖SDK的點擊監聽:com.baidu.mapapi.map.BaiduMap.OnMapClickListener;用戶進入該子模塊時會自動進行定位,在代碼監聽到定位成功信號之后,通過百度地圖API中的類RadarUploadInfo對用戶位置與昵稱等信息進行封裝,并通過代碼調用類UploadInfoRequest自動上傳;在地圖菜單中使用“周邊”選定范圍發現周邊用戶,點擊地圖上發現的用戶圖標,可以查看昵稱和距離信息,然后點擊“關注”按鈕即可進行關注;用戶在地圖菜單中點擊“繪制”功能按鈕,可以在地圖上繪制自定義的圖形和文字內容進行標注與路徑規劃。如圖6、圖7所示。

圖6 地圖

圖7 路徑規劃
該模塊用于展示被關注用戶的日志信息, 用戶以客戶端為入口,可以通過選擇距離關注周邊用戶動態。布局上分為兩塊區域:日志標題與日志內容。日志標題用來展示被關注對象的頭像、昵稱、性別、行程等信息;日志內容用來展示被關注對象的最新日志信息。當進入“關注”選項卡時,如果用戶之前還未關注任何其他用戶,則會在界面顯示“可以去關注下他人哦!”的提示;如果用戶之前已關注過他人,該界面會顯示被關注對象的日志信息,如圖8、圖9所示。

圖8 發現周邊用戶

圖9 關注周邊用戶
“日志”子模塊是專門讓用戶編寫旅行日志的模塊。該模塊界面分為兩部分:日志標題與日志內容。日志標題顯示該日志的年份、出發地、目的地、簡介等信息。用戶點擊“添加”按鈕可以進行日志添加,并在添加日志時編輯文字與圖片內容(可選)。在選擇圖片時可以現場拍照獲取圖片,也可直接從相冊中選擇已有圖片,從而極大地方便了用戶使用。該模塊Fragment的布局使用Android系統的ListView控件作為頂層布局,展示每條日志內容,并將每條日志按照發布時間進行排序。同時,選擇在ListView控件中嵌入GridView控件,使日志中的圖片能夠清晰、有序地展示給用戶。在實現過程中,該模塊布局中ListView與GridView都是自帶滑動效果的容器。該模塊區別于微信“朋友圈”功能,是根據“時間軸”進行界面設計,讓用戶在編寫日志的同時,也能詳細記錄下日志時間,配上自動生成的“時間節點”,使日志形成一個整體,如圖10所示。

圖10 “日志”展示
“賬本”子模塊可方便用戶在旅途中隨時記錄下零散開銷。用戶可以通過“記一筆”進行記錄,記錄時可以自己選擇時間,也可選擇當前時間,通過輸入金額、選擇類型、設置備注進行記錄。在該模塊中,數據庫使用Android系統內部的一種輕量級數據庫SQLite,賬本數據庫直接在代碼中進行創建與操作。該模塊界面采取簡約風格,能簡明地顯示總支出和總收入,并且用戶可以通過點擊時間板進行特定日期記錄查詢。
為了方便用戶使用,系統在主界面菜單中添加了兩個第三方應用調用接口,用戶點擊按鈕便可通過該接口直接在當前界面打開對應的第三方應用。代碼中使用Intent的方法,傳入需要調用的第三方應用的包名(例如:com.sdu.didi.psnger)與主類名(例如:com.didi.sdk.splashActivity)實現調用。
測試是軟件工程中必不可少的一項重要環節,測試具體內容是根據軟件功能設計的測試用例。主要測試用例如表1所示。

表1 主要測試用例
此外,針對系統界面、控件、數據庫訪問、提示信息與數據準確性進行了統一測試。同時,在測試過程中對代碼規范化與數據庫功能也進行了相應優化。測試結果表明,該系統所有功能均能按照要求運行,具有較好的可擴展性。
通過測試與實際運行,基于 LBS 的足跡分享方式使用戶在旅游中可以輕松規劃旅行路線,分享個性化的旅行日志,關注附近用戶以了解周邊用戶的實時旅行動態,為旅行者提供了極大方便;其次,系統內置“收支記錄”功能,可讓用戶準確記錄途中所有收支及用途,對收支進行直觀展示與量化分析,從而幫助用戶有效地控制花銷。
本文通過分析旅行者對移動位置的信息需求,設計并實現了基于LBS的足跡移動分享系統,實現了旅行路徑規劃、實時旅行日志發布、周邊用戶信息關注、收支情況記錄等功能。系統充分利用移動定位技術實現旅行者的個性化需求,在一定程度上為游客在旅游地的信息不對稱問題提供了解決方案。