操鳳萍,余躍海,劉雪娟
(1.東南大學成賢學院 電子與計算機工程學院,江蘇 南京 210032; 2.江蘇金智教育信息股份有限公司,江蘇 南京 210000; 3.南京航空航天大學 計算機科學與技術學院,江蘇 南京 210016)
隨著移動通信與移動地理信息技術的飛速發(fā)展,基于位置服務(LBS)技術被廣泛應用于社交、旅游等領域。微信、陌陌等基于LBS的SNS開始普及,但其提供的LBS功能大都只涉及簽到、附近的人及群組等功能[1]。針對LBS在旅游信息服務方面的應用,學者們進行了大量研究。文獻[2-14]設計并實現(xiàn)了一種基于LBS與游客特征大數(shù)據(jù)分析的旅游信息個性化推送服務系統(tǒng);文獻[3]實現(xiàn)基于LBS & GIS的旅游資源普查、評價與可視化查詢系統(tǒng);文獻[5]提出的系統(tǒng)實現(xiàn)了地圖瀏覽、地圖搜索與路徑查詢等功能;文獻[8]提出的系統(tǒng)可實現(xiàn)地圖查看、移動定位、路線規(guī)劃、景區(qū)信息查詢、報警求援等功能。但這些APP的應用主要局限于旅游信息的查詢、推送、路徑規(guī)劃等基于位置的信息服務上,并未對旅行過程中,基于用戶實時位置的個性化分享進行深入研究。微信“朋友圈”的流行表明,“分享”成為旅行者傳播旅途所見所聞、傳遞快樂心情的重要方式。然而常用的微信“朋友圈”基于位置的分享功能相對有限,在分享地點時,只能分享人們當前所在位置,而無法對行進路線進行實時分享,也無法在“地圖應用”上進行路線規(guī)劃,且分享的各條信息之間較為獨立,信息連貫性較弱。
本文從旅行者在旅行中對移動位置信息分享的需求出發(fā),提出基于LBS的足跡信息分享方式,用戶不僅可以進行旅行日志實時分享、旅行路徑規(guī)劃、收支記錄并對其進行量化分析,還能實時“發(fā)現(xiàn)”周圍用戶并關注他們的旅行信息。該設計不僅可以滿足用戶基于位置的個性化實時分享需求,同時在解決旅游信息推送延誤及信息不對稱問題方面發(fā)揮了重要作用[7]。
LBS 是指在移動計算條件下通過空間定位技術、地理信息技術、嵌入式技術及無線網(wǎng)絡技術,為用戶提供基于地理位置的服務[15]?;贚BS的服務被廣泛應用于各種商業(yè)活動中,如地圖服務、指南服務、緊急信息服務等[16]。美國社交服務網(wǎng)站 Foursquare 的出現(xiàn),啟發(fā)了國內(nèi)Social Networking Services(SNS) 網(wǎng)站增加基于地理位置服務的功能[17]。LBS 應用與 SNS 相結(jié)合成為目前 GIS 發(fā)展的熱點方向。用戶可以依托 LBS 服務,借助智能終端采集當前的旅游資源位置、查詢附近資源信息等[18-19]。國內(nèi)市場占有率較高的微信、騰訊QQ、新浪微博、陌陌等社交軟件僅具備部分位置服務功能,隨著游客對旅游自主性及個性化分享要求的提升,傳統(tǒng)的信息分享方式很難滿足當今游客的需求。因此,建立一個基于位置服務(LBS)的旅行足跡移動分享系統(tǒng)是十分必要的。
由于旅游活動具有很強的位置移動性,基于LBS的足跡移動分享系統(tǒng)使用戶旅行時可以隨時將途中見聞、感想、照片等以“時間軸”為次序,編寫為旅行日志并發(fā)布;實時“發(fā)現(xiàn)”附近的其他用戶并關注其旅行日志,以實時掌握旅游動態(tài);在電子地圖上自定義標記與路徑規(guī)劃;記錄途中的零碎開銷、收支情況,并對收支進行量化分析與直觀展示;調(diào)用第三方打車或訂餐服務。系統(tǒng)設計了關注、地圖、日志、賬本等模塊以滿足用戶需求,如圖1所示。
圖1 系統(tǒng)功能結(jié)構(gòu)
關注模塊:該模塊用于展示被關注用戶的日志信息, 用戶以客戶端為入口,可以通過選擇距離,關注周邊用戶動態(tài)。
地圖模塊:用戶可以通過相應功能在地圖上自定義標記,可在地圖上繪制多邊形、折線,添加文字圖標,并進行路徑規(guī)劃。
日志模塊:用于用戶以“時間軸”為次序編寫旅行日志并發(fā)布。
賬本模塊:用戶在旅途中隨時記錄開銷,并進行收支直觀顯示。
其它模塊:作為第三方應用的調(diào)用接口,用戶需要時,點擊按鈕便可通過該接口直接在當前界面打開對應的第三方應用。
系統(tǒng)是基于移動定位技術(LBS)服務加以實現(xiàn)的,LBS服務為終端提供定位服務并針對用戶周邊位置進行分布查詢。LBS定位服務主要由移動終端、通訊網(wǎng)絡、服務中心、定位系統(tǒng)構(gòu)成[20],如圖2所示。
圖2 移動位置服務結(jié)構(gòu)
系統(tǒng)采用移動終端應用/系統(tǒng)服務/數(shù)據(jù)庫體系結(jié)構(gòu)。移動終端應用完成定位、搜尋周邊與日志發(fā)布服務,可獲取用戶實時位置,同時接收用戶的服務請求等數(shù)據(jù),繼而調(diào)用如定位、日志等相關功能模塊提供的服務,同時顯示返回結(jié)果。系統(tǒng)服務為終端提供日志生成、日志發(fā)布、定位服務并針對用戶周邊位置進行分布查詢。數(shù)據(jù)庫存放用戶信息、日志信息、賬本信息等。系統(tǒng)結(jié)構(gòu)如圖3所示。Android客戶端根據(jù)Android系統(tǒng)的特點將客戶端結(jié)構(gòu)分為三層:樣式界面(View)、功能實現(xiàn)(Class)、后臺數(shù)據(jù)(Data)。同時,系統(tǒng)通過集成百度地圖的開發(fā)工具包(BaiduMap SDK)進行基于LBS的相關功能開發(fā)。Servlet服務端為“登錄”、“記錄日志”、“獲取日志”等功能提供服務??蛻舳税l(fā)送GET/POST請求并與Servlet的相應方法進行交互。
圖3 系統(tǒng)結(jié)構(gòu)
客戶端應用通過HTTP請求將用戶產(chǎn)生的數(shù)據(jù)發(fā)送給服務端,并在服務端對數(shù)據(jù)進行解析。主要的系統(tǒng)對象有日志(LogEntity)和用戶(User)?!坝脩簟睂ο笊婕暗墓δ馨ǖ卿涷炞C、用戶信息展示,涉及的屬性有用戶名和密碼。對于這種涉及少數(shù)參數(shù)的數(shù)據(jù)傳輸,采用發(fā)送和接收請求時過程較為簡便的GET請求方式;“日志”對象涉及到的功能包括記錄日志、發(fā)布日志、查看日志,涉及到的屬性有時間、日期、日志內(nèi)容、圖片內(nèi)容等涉及多個參數(shù)的數(shù)據(jù)傳輸,采用保密性與數(shù)據(jù)封裝性較好的POST請求方式。在客戶端接收服務端返回的數(shù)據(jù)時,則采用輕量級的JSON格式進行傳輸,然后在客戶端通過Gson進行數(shù)據(jù)解析。
服務端使用MySQL作為數(shù)據(jù)庫存儲用戶與日志相關數(shù)據(jù)?!坝脩粜畔⒈怼庇脕碛涗浰杏脩粜畔?,包括用戶姓名、用戶密碼、用戶性別等屬性;“日志表”用來記錄所有用戶發(fā)布的日志信息,包括:用戶姓名、日志年份、日志月份、日志文字內(nèi)容、日志圖片內(nèi)容等信息。利用Android系統(tǒng)的SQLite數(shù)據(jù)庫即可輕松、高效地進行存儲,從而滿足了緩存需求。系統(tǒng)的“賬本”功能便是使用SQLite數(shù)據(jù)庫進行數(shù)據(jù)存儲,既方便用戶隨時記錄,又能很好地對數(shù)據(jù)進行實時統(tǒng)計。
采用C/S計算模式,客戶端使用Android SDK。設計重點包含兩部分:Servlet服務端、Android 客戶端。Android客戶端部分在Window操作系統(tǒng)上使用安裝了Android ADT的Eclipse進行編碼實現(xiàn),數(shù)據(jù)庫使用MySQL數(shù)據(jù)庫,服務端程序采用Servlet并將程序放在Tomcat服務器上運行。
客戶端主界面包括主界面菜單與主界面功能區(qū)。由于系統(tǒng)中的“地圖”和“日志”子模塊的呈現(xiàn)方式都需要盡量大的空間,所以選擇“側(cè)滑菜單+主界面”的布局結(jié)構(gòu)。界面最頂層采用Android系統(tǒng)的抽屜布局——DrawerLayout,該容器內(nèi)部包含兩個區(qū)域,一個用來展示界面主要內(nèi)容,另一個用來展示左側(cè)菜單。界面主要內(nèi)容的展現(xiàn)則是采取Android系統(tǒng)最新的“碎片化布局”,通過在該Activity里加載不同模塊對應的Fragment進行功能切換。主界面如圖4、圖5所示。
系統(tǒng)服務端采用Servlet作為客戶端與數(shù)據(jù)庫之間交互的橋梁,Android客戶端發(fā)送的GET/POST請求在服務端被Servlet對應的方法攔截到,進行數(shù)據(jù)處理后與數(shù)據(jù)庫交互。其在Eclipse的JavaEE內(nèi)置模塊下進行Servlet開發(fā),編寫Servlet相關方法為“登錄”、“記錄日志”、“獲取日志”等功能提供服務。客戶端發(fā)送的GET/POST請求在服務端被Servlet類進行處理,主要包括登錄操作類LoginByGet與日志存儲類Log_sava。登錄操作類處理GET請求,接受客戶端傳來的用戶名與密碼進行驗證,并返回驗證結(jié)果;日志存儲類處理POST請求,接受傳來的日志信息進行存儲。由于一條日志內(nèi)容會包含數(shù)字、文字等內(nèi)容,而且參數(shù)數(shù)量較多,因此采用POST請求進行傳輸與交互。
圖4 系統(tǒng)啟動頁
圖5 菜單界面
該模塊的主體是一張放在Fragment中的電子地圖,通過繼承并重寫百度地圖開發(fā)包的MapFragment,以開發(fā)自己的MapFragment。在地圖右下角添加功能入口按鈕,包括:標記開關、繪圖及地圖菜單按鈕。用戶進入該子模塊界面后,系統(tǒng)會自動在地圖上定位用戶位置。用戶可以通過手勢拖動縮放地圖進行查看,在需要標記某個位置時點擊右下角的“標記”按鈕,對地圖進行標記,點擊地圖時會調(diào)用百度地圖SDK的點擊監(jiān)聽:com.baidu.mapapi.map.BaiduMap.OnMapClickListener;用戶進入該子模塊時會自動進行定位,在代碼監(jiān)聽到定位成功信號之后,通過百度地圖API中的類RadarUploadInfo對用戶位置與昵稱等信息進行封裝,并通過代碼調(diào)用類UploadInfoRequest自動上傳;在地圖菜單中使用“周邊”選定范圍發(fā)現(xiàn)周邊用戶,點擊地圖上發(fā)現(xiàn)的用戶圖標,可以查看昵稱和距離信息,然后點擊“關注”按鈕即可進行關注;用戶在地圖菜單中點擊“繪制”功能按鈕,可以在地圖上繪制自定義的圖形和文字內(nèi)容進行標注與路徑規(guī)劃。如圖6、圖7所示。
圖6 地圖
圖7 路徑規(guī)劃
該模塊用于展示被關注用戶的日志信息, 用戶以客戶端為入口,可以通過選擇距離關注周邊用戶動態(tài)。布局上分為兩塊區(qū)域:日志標題與日志內(nèi)容。日志標題用來展示被關注對象的頭像、昵稱、性別、行程等信息;日志內(nèi)容用來展示被關注對象的最新日志信息。當進入“關注”選項卡時,如果用戶之前還未關注任何其他用戶,則會在界面顯示“可以去關注下他人哦!”的提示;如果用戶之前已關注過他人,該界面會顯示被關注對象的日志信息,如圖8、圖9所示。
圖8 發(fā)現(xiàn)周邊用戶
圖9 關注周邊用戶
“日志”子模塊是專門讓用戶編寫旅行日志的模塊。該模塊界面分為兩部分:日志標題與日志內(nèi)容。日志標題顯示該日志的年份、出發(fā)地、目的地、簡介等信息。用戶點擊“添加”按鈕可以進行日志添加,并在添加日志時編輯文字與圖片內(nèi)容(可選)。在選擇圖片時可以現(xiàn)場拍照獲取圖片,也可直接從相冊中選擇已有圖片,從而極大地方便了用戶使用。該模塊Fragment的布局使用Android系統(tǒng)的ListView控件作為頂層布局,展示每條日志內(nèi)容,并將每條日志按照發(fā)布時間進行排序。同時,選擇在ListView控件中嵌入GridView控件,使日志中的圖片能夠清晰、有序地展示給用戶。在實現(xiàn)過程中,該模塊布局中ListView與GridView都是自帶滑動效果的容器。該模塊區(qū)別于微信“朋友圈”功能,是根據(jù)“時間軸”進行界面設計,讓用戶在編寫日志的同時,也能詳細記錄下日志時間,配上自動生成的“時間節(jié)點”,使日志形成一個整體,如圖10所示。
圖10 “日志”展示
“賬本”子模塊可方便用戶在旅途中隨時記錄下零散開銷。用戶可以通過“記一筆”進行記錄,記錄時可以自己選擇時間,也可選擇當前時間,通過輸入金額、選擇類型、設置備注進行記錄。在該模塊中,數(shù)據(jù)庫使用Android系統(tǒng)內(nèi)部的一種輕量級數(shù)據(jù)庫SQLite,賬本數(shù)據(jù)庫直接在代碼中進行創(chuàng)建與操作。該模塊界面采取簡約風格,能簡明地顯示總支出和總收入,并且用戶可以通過點擊時間板進行特定日期記錄查詢。
為了方便用戶使用,系統(tǒng)在主界面菜單中添加了兩個第三方應用調(diào)用接口,用戶點擊按鈕便可通過該接口直接在當前界面打開對應的第三方應用。代碼中使用Intent的方法,傳入需要調(diào)用的第三方應用的包名(例如:com.sdu.didi.psnger)與主類名(例如:com.didi.sdk.splashActivity)實現(xiàn)調(diào)用。
測試是軟件工程中必不可少的一項重要環(huán)節(jié),測試具體內(nèi)容是根據(jù)軟件功能設計的測試用例。主要測試用例如表1所示。
表1 主要測試用例
此外,針對系統(tǒng)界面、控件、數(shù)據(jù)庫訪問、提示信息與數(shù)據(jù)準確性進行了統(tǒng)一測試。同時,在測試過程中對代碼規(guī)范化與數(shù)據(jù)庫功能也進行了相應優(yōu)化。測試結(jié)果表明,該系統(tǒng)所有功能均能按照要求運行,具有較好的可擴展性。
通過測試與實際運行,基于 LBS 的足跡分享方式使用戶在旅游中可以輕松規(guī)劃旅行路線,分享個性化的旅行日志,關注附近用戶以了解周邊用戶的實時旅行動態(tài),為旅行者提供了極大方便;其次,系統(tǒng)內(nèi)置“收支記錄”功能,可讓用戶準確記錄途中所有收支及用途,對收支進行直觀展示與量化分析,從而幫助用戶有效地控制花銷。
本文通過分析旅行者對移動位置的信息需求,設計并實現(xiàn)了基于LBS的足跡移動分享系統(tǒng),實現(xiàn)了旅行路徑規(guī)劃、實時旅行日志發(fā)布、周邊用戶信息關注、收支情況記錄等功能。系統(tǒng)充分利用移動定位技術實現(xiàn)旅行者的個性化需求,在一定程度上為游客在旅游地的信息不對稱問題提供了解決方案。