王亞州


摘 要
針對目前景區導游APP缺少路線規劃功能,設計了Android平臺下的景區路線規劃系統,提出了可變權值的Floyd最短路算法并應用到系統中。系統采用手繪地圖作為底圖,設計三個圖層完成標記、路線的顯示,通過記錄關鍵點的經緯度和圖片像素映射關系實現游客定位功能。測試結果表明系統能夠根據游客選擇的目的地和個性需求設計最優路線,系統具有實用性。
【關鍵詞】Android 最短路 Floyd算法 景區路線規劃
隨著社會經濟高速發展、人們生活水平的提高,旅游產業得了到迅猛發展。目前,我國旅游景區的導視形式主要包括傳統的人工導游和基于位置信息的語音講解設備,這些方式提供的景區信息比較固定,而且費用較高,導致游客的游覽體驗不佳。與此同時,互聯網技術和移動通信技術的快速發展為開發全新的景區導游方式提供了條件,特別是Android系統的出現,憑借著便捷的操作界面、豐富的功能和較低的學習成本迅速占領了市場,基于Android平臺的景區導游系統開始出現在各大應用市場。
通過研究現有的景區導游APP,發現其功能集中于景區景點基本介紹和周邊飲食住宿推廣,在景區內部的路徑規劃方面涉及較少。本文設計了一個Android平臺下的景區路線規劃系統,并將改進的Floyd算法應用到系統中,能夠根據游客選擇的目標景點安排游覽路線。
1 相關技術
Android是由Google公司推出的基于Linux平臺的開源移動設備操作系統。Android操作系統采用了分層的架構,包括應用程序層、應用程序框架層、系統運行庫層和Linux內核層。應用程序層包括系統內置的核心應用和用戶開發的應用,開發人員使用Java語言調用應用程序框架層的API完成應用開發。Android平臺具有開放性,允許任何廠商加入Android聯盟,并且開發其應用程序的Java語言也是開源免費的,打破了以往阻礙移動產業創新發展的壁壘。
2 景區圖結構表示法
關于景區內部路線規劃的研究,傳統方法往往將景區圖抽象為圖論中的一個連通圖,圖中各個頂點代表景點,景點間的最短路定義為圖中兩點間的最短路。傳統方法雖然可行,但是不具有實際應用意義,因為景區圖的設計過于抽象,不能包含景區內部的復雜情況。
本文意在設計一個能夠實際應用的景區路線規劃系統,對景區圖結構進行了細致定義。景區圖中除了包含有“景點”點之外,還應包含有“路口”點、“公共服務”點、“路線定位”點,多種類型點構成了景區連通圖中的頂點,景區中的道路定義為圖中各點之間的連線。其中“路線定位”點是景區道路上具有代表意義的點,用來定位Android手機的位置。
3 系統設計實現
3.1 系統框架設計
該系統采用C/S模式,客戶端為搭載Android系統的智能手機,支持無線上網、GPS定位等功能,用來從服務器下載查詢景區信息、上傳游客位置信息;服務器端為運行在Apache Tomcat下的javaweb項目,為客戶端提供查詢、下載服務。系統整體架構如圖1所示。
3.2 最短路算法設計
Floyd算法是圖論中求解兩點間最短距離的經典算法,但是算法只給出了求解最短路的基本思想,并沒有給出最短路包括的點以及遍歷順序。并且在實際應用中需考慮游客的特殊需求,比如不走陡峭道路、避開擁擠人流等,這時在求解到達目標景點的最優路線前需要重新計算圖中個邊的權值,不能直接使用距離作為權值。本文設計的最短路求解流程如下:
(1)根據游客在系統中選擇的條件計算圖中各條邊的權值,權值計算公式為:
qij=dij+(a+b)dij (1)
式(1)中dij代表點i到點j的實際距離;a取1時代表游客期望平坦道路,取0代表游客不在意此項;b取1時代表游客期望回避擁擠人流,取0代表游客不在意此項;qij代表點i到點j的路線權值。
(2)計算當前游客所在點到目標景點最優路徑,使用Floyd算法計算最短路矩陣R的偽代碼描述如下,其中rij的初始值為j時,表示i與j直接相鄰;初始值為0時,表示i與j不直接相鄰:
for k←1 to m do
for i←1 to m do
for j←1 to m do
if (qik+qkj qij← qik+qkj; rij ← rik; 在最短路矩陣R中通過如下方法能夠得到點vi到vj的路線:如果rij=j,vi到vj最短路為vi→vj;如果rij=k,rkj=j,vi到vj最短路為vi→vk→vj。依此類推,任意兩點vi與vj的最短路均可在R中求得。 3.3 系統實現 由于景區內部地圖比較復雜,現有地圖引擎不包括景區詳細路線數據,繪制地圖數據成本較高,所以本系統采用手繪地圖作為底圖。手繪地圖不僅能夠展示詳細的景區內部路線,而且其獨特的風格更能夠吸引游客。具體實現包括以下方面: 3.3.1 圖層實現 本系統設計了以下三個圖層,用來展示手繪地圖、標記物、路線: MapView層:用來顯示手繪地圖,通過加載Bitmap,將普通圖片顯示在屏幕上; MarkLayer層:用來顯示標記物,包括景區、服務點等,該圖層位于最上方,通過監聽標記物的點擊事件播放景點語言介紹; RouteLayer層:用來顯示計算后得到的路線,該圖層位于MapView和MarkLayer之間,通過android.graphics包中的Canvas等類進行路線的繪制。 3.3.2 手繪地圖GPS定位實現 為了將游客位置比較準確的顯示在手繪地圖上,本系統設計了一個映射表,記錄景區內關鍵點的實際經緯度和圖片像素點之間的關系。系統通過安卓提供的LocationMangager類的getLatitude()方法獲取游客緯度信息,通過getLongitude()方法獲取游客經度信息。當游客到達某一記錄點的定位范圍后,根據映射表將其位置顯示到手繪地圖上。記錄點的定位范圍設計為一個正方形,邊長根據景點規模和GPS定位誤差來計算,如圖2所示。 系統采用同樣的定位方式,選取道路上的關鍵點最為定位點,統計某條道路上的游客人數。 3.4 實現結果 游客選擇出發點和目標景點后,根據提示選擇路線要求,包括是否避開人流、是否避開陡峭路段;最終得到一條當前點到目標景點的最優路線,最終結果如圖3所示。 4 結束語 本文設計的景區路線規劃系統,加入了可變權值的Floyd算法。測試結果表明系統能夠根據游客選擇的目的地和個性需求設計最優路線,采用的手繪地圖不僅繪制簡單而且更能吸引游客。 參考文獻 [1]陳裕雄.安卓系統的手機定位軟件開發與設計[J].無線互聯科技,2015(17):52-54. [2]曾風山.基于LBS的智能導游系統設計與實現[D].長沙:湖南大學,2014. [3]何清林.Floyd算法的景區最短路徑查詢系統的設計與實現[J].電腦編程技巧與維護,2010,01(19):36-38. 作者單位 沈陽理工大學信息科學與工程學院 遼寧省沈陽市 110159