徐永康 高文超 廖宏科 崔長潤 丁雨萌 劉旭昭 左家昌



摘要:個人出行逐漸成為人們出游的首選,但是市場上缺少可以為用戶深度定制旅行路線的軟件。該文介紹了一種基于SpringBoot后端和Android客戶端的個性化旅游路線推薦系統,實現了北京區域內景點的推薦功能。經過測試,可以實現用戶登錄注冊以及路線規劃功能。
關鍵詞:Android;SpringBoot;Mybatis;個性化旅游;TSP
1 背景
隨著移動互聯網的發展和人們生活水平的提高,旅游逐漸成為民眾娛樂的重要途徑。然而如今的旅游規劃軟件大多是起到預定門票酒店的功能,并不能發揮路線規劃和景點推薦的作用。本文將介紹基于安卓平臺的個性化旅游路線推薦軟件的設計與實現。
2 當今個人旅游系統發展現狀
在當今的移動互聯網時代,越來越多的在線旅游服務如雨后春筍般涌現。目前這些旅游類的服務大可以分為兩類。 第一類是提供基本的訂機票、火車票、訂酒店之類的服務。作為代表的應用主要有:攜程、去哪旅行、飛豬、藝龍旅行、同程旅行等。這些應用往往是將大量的信息提供給用戶,讓用戶自行篩選,服務商較為被動,優點是信息較為全面。可見此類的服務還有很大的提升空間。 第二類則是為用戶提供旅行的行程規劃服務,屬于傳統的旅行社的線上升級版,提供成套的解決方案。代表App有:氫氣球旅行,蟬游記,面包旅行,行程助手,百度旅游。這類應用可以初步對信息進行篩選,效率相比第一種有一定的提高。但是隨旅行社出游并不靈活,可定制化程度比較低,仍有提升空間。 在未來旅游類 App 的發展趨向將是強自動化的。軟件應該盡可能變被動為主動,幫用戶完成旅行的整體大致規劃,提供私人的成套的旅行解決方案。讓系統依據用戶的出行方式、出行人數、個人偏好來自動地為用戶規劃好行程,為用戶提供一整套出行方案,降低用戶的決策成本。
3 路線規劃算法(蟻群算法)
TSP問題(Travel Salesperson Problem即旅行商問題)是一種NP-hard問題,在大型事件中很難獲得最優解,一般需要啟發式算法就近似解,如遺傳算法(GA),蟻群算法(ACO),微粒群算法(PSO)。蟻群算法是一種以螞蟻覓食行為為依據逐漸發展出來的一種啟發式優化算法[1],算法的目的是尋找優化路徑,最初是用來解決TSP問題而產生的。該算法在系統中起到了為用戶安排游覽路徑的作用。
4 所用技術
4.1 安卓平臺
安卓是一種基于Linux內核的自由開源的操作系統。主要使用于移動設備,使用java語言作為開發語言[2]。Android的開發包括四大組件:活動(Activity),服務(Service),廣播接收器(Broadcast Receiver),內容提供商(Content Provider)。
Activity中包含了所有程序的運行流程,是Android 當中最基本的模塊。每一個頁面需要通過setContentView()指定界面布局。
4.2 百度地圖sdk
百度地圖API是一套應用程序接口,為開發者提供基于百度地圖的各種功能,涵蓋iOS、Andriod、Web服務等多種版本,提供基本地圖、位置搜索、周邊搜索、公交路線查詢等功能。只需導入百度地圖的sdk即可使用。 景點、路線和用戶數據存儲在云服務器端,云服務器鏈接mysql云數據庫存儲數據。景點的初始信息一部分手動導入,一部分通過爬蟲獲取以后存儲在服務器端,供App調用。
4.3 spring boot
Spring框架是Java平臺上的一種開源應用框架,而SpringBoot 是大量開發框架的整合,它簡化了Spring大部分的繁雜配置工作[3]。SpringBoot的整合解決了依賴包之間的沖突和不可靠性等問題。大大簡化了開發人員在后端開發的難度,支持jar項目打包方式,可以實現項目快速部署。Springboot的總體框架如圖1所示。
實體層(entity)主要用于和數據庫對象相對應的屬性,需要有set/get方法,無參和有參的構造函數。控制層(controller)實現具體的模塊流程控制,主要是調用service層內的接口實現,負責從前端接受請求。業務層(service)和持久層(dao)一樣都是先設計接口,再創建要實現的類,然后在配置文件中進行配置其實現的關聯[4]。接下來就可以在service層調用接口進行業務邏輯應用的處理。封裝Service層的業務邏輯有利于業務邏輯的獨立性和重復利用性。持久層與數據庫進行聯系,持久層的數據源和數據庫連接的參數都是在配置文件中進行配置的。
YAML是一種基于Unicode容易閱讀,容易和腳本語言交互的,用來表達資料序列的編程語言。文件后綴為yml。本項目使用application.yml作為配置文件,相較于application.properties,YAML文件具有樹狀結構以及更易于理解的特點。此外,YAML還具有編程語言可移植性的優點。
在本項目內,controller層調用了Service層的方法,Service層調用Dao層的方法,其中調用的參數是使用Entity層進行傳遞的。
5 數據庫結構設計
系統的數據庫設計有三個表,分別是用戶信息表(表1),景點數據表(表2)和公共交通路程時間矩陣表(表3)。景點類型存儲在景點數據表的type列中,所有景點一共分為6種類型,分別是博物館,文物古跡,公園,游樂園,風景區和其他。
6 Android應用程序設計
本系統的總體框架如下:springboot作為服務端,提供數據庫查詢和數據返回功能。Android應用提供客戶端服務。
服務端使用Maven 對項目進行構建、依賴管理。dao層(data access object)使用Mybatis框架實現,service層和controller層用于后端操作邏輯控制。服務端主要實現數據庫的維護工作。