




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 . . . 論文題目 基于Android的驢友導(dǎo)航系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)專 業(yè) 年 級(jí) 學(xué) 號(hào) 姓 名 指導(dǎo)老師 目 錄1 緒論11.1 課題背景11.2 課題容11.3 課題目的與其意義22 系統(tǒng)開發(fā)環(huán)境與相關(guān)技術(shù)22.1 Android開發(fā)介紹與環(huán)境搭建22.2 JSON簡介32.3 Struts2框架簡介與環(huán)境搭建32.4 Baidu Maps API簡介43 系統(tǒng)分析43.1 研究目標(biāo)43.2 需求分析43.3 性能分析54 系統(tǒng)設(shè)計(jì)54.1 用戶界面設(shè)計(jì)54.2 數(shù)據(jù)庫設(shè)計(jì)64.3 程序模塊設(shè)計(jì)85 系統(tǒng)功能模塊設(shè)計(jì)95.1 文件結(jié)構(gòu)與用途95.2 后臺(tái)定位服務(wù)115.3 MapAppli
2、cation.java類135.4 登錄模塊155.5 首頁模塊155.6 導(dǎo)航模塊205.7 周邊信息查詢模塊215.8 個(gè)人資料模塊236 系統(tǒng)測試257 總結(jié)26參考文獻(xiàn)27致2829 / 31基于Android的智能導(dǎo)游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)摘 要:本文首先分析討論Android手機(jī)軟件開發(fā)主要技術(shù),以與國景區(qū)導(dǎo)游系統(tǒng)與智能導(dǎo)游的現(xiàn)狀。然后講述了基于百度地圖Android SDK以與定位SDK技術(shù)所設(shè)計(jì)的Android平臺(tái)智能導(dǎo)游系統(tǒng)的實(shí)現(xiàn)。該系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)了后臺(tái)定位、景點(diǎn)導(dǎo)航、景點(diǎn)信息瀏覽與下載、周邊查詢等實(shí)用功能,具有良好的通用性與靈活性。關(guān)鍵字:Android;智能導(dǎo)游;導(dǎo)航軟件;移動(dòng)開
3、發(fā);百度地圖1 緒論1.1 課題背景中國工業(yè)和信息部最新公布數(shù)據(jù)表明,中國智能手機(jī)的市場增長率不斷攀升,而且,隨著移動(dòng)3G和Wifi熱點(diǎn)的不斷覆蓋,用戶對手機(jī)的互動(dòng)娛樂體驗(yàn)也提出了更高要求,各種應(yīng)用軟件開始進(jìn)入,手機(jī)日漸成為互動(dòng)娛樂的焦點(diǎn)。有關(guān)資料顯示,我國的旅游業(yè)發(fā)展實(shí)力巨大。首先,是旅游收入增長迅速:2013年春節(jié)黃金周全國接待游客達(dá)到2.03億人次,實(shí)現(xiàn)旅游收入1170.6億元人民幣,同比增長達(dá)到15.1%和15.4%1;其次,固定資產(chǎn)投入力度的不斷加大:2009年12月,關(guān)于加快發(fā)展旅游業(yè)意見首次提出“中國旅游日”的概念,旅游業(yè)已經(jīng)出現(xiàn)在了中國國家戰(zhàn)略性產(chǎn)業(yè)中。然而,國旅游業(yè)的迅猛發(fā)展
4、使得傳統(tǒng)的人工導(dǎo)游方式不能滿足新時(shí)代用戶的多元化需求。長期以來,游客在景點(diǎn)旅游時(shí)只能走馬觀花,對景點(diǎn)的多媒體信息了解甚少,就本人經(jīng)驗(yàn)來說,對于外來游客來說更會(huì)由于語言的障礙而使得游覽質(zhì)量下降!于是,基于上述,手機(jī)終端的智能導(dǎo)游應(yīng)用便應(yīng)運(yùn)而生。1.2 課題容本課題結(jié)合現(xiàn)代景區(qū)的相關(guān)特性和用戶需求,使用JAVA語言,應(yīng)用百度地圖、百度定位(GPS+基站)、JSON數(shù)據(jù)交換和無線通訊等技術(shù),開發(fā)一個(gè)基于Android的C/S式智能導(dǎo)航軟件系統(tǒng)。這軟件使得用戶可以利用無線網(wǎng)絡(luò)以與手機(jī)的便捷性無時(shí)無刻地享受到景點(diǎn)信息查詢、自身位置查詢、周邊查詢、導(dǎo)航等功能所帶來的暢快旅游體驗(yàn)。1.3 課題目的與其意義本
5、課題的主要目的是將Javaweb后臺(tái)服務(wù)端、百度地圖、定位導(dǎo)航技術(shù)與景區(qū)導(dǎo)游相結(jié)合,從而實(shí)現(xiàn)景區(qū)導(dǎo)游系統(tǒng)的真正智能化。智能導(dǎo)游系統(tǒng)可以儲(chǔ)存大量的景區(qū)景點(diǎn)信息,不僅可以廣泛傳播,而且科學(xué)環(huán)保、方便快捷。此外,系統(tǒng)還提供了自定位、導(dǎo)航的實(shí)用功能,讓用戶可以徹底拋棄紙質(zhì)地圖,減少路癡的認(rèn)路障礙。這不僅能直接為游客帶來更暢快的旅游體驗(yàn),同時(shí)還完善了景區(qū)的旅游管理體制。2 系統(tǒng)開發(fā)環(huán)境與相關(guān)技術(shù)2.1 Android開發(fā)介紹與環(huán)境搭建Android是Google公司開發(fā)的基于Linux核的開源操作系統(tǒng)。它包括:操作系統(tǒng)、用戶界面和應(yīng)用程序,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙2。Android
6、 系統(tǒng)提供了四大基本組件,包括:Activity、Contentprovide、Service、Intentreceiver,每個(gè)組件都是一個(gè)視圖(view)。但上述四大組件對于一個(gè)Android應(yīng)用程序來說,卻并不是必須的,可能只需要其中的幾種酒可以滿足設(shè)計(jì)需求。Manifext.xml配置文件時(shí)Android應(yīng)用程序不可或缺的一個(gè)XML配置文件,其中定義了程序所用到的組件、組件功能以與一些必要條件和權(quán)限。Android的上層應(yīng)用程序一般是由java語言開發(fā),所以首先應(yīng)該有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)以與Java主流集
7、成開發(fā)環(huán)境Eclipse IDE。此外,還需要Android開發(fā)專用Google提供的Android SDK和安裝在Eclipse的插件Android ADT,為Android開發(fā)提供開發(fā)工具的升級(jí)或者變更,是Eclipse下開發(fā)工具的升級(jí)下載的工具3。Android開發(fā)平臺(tái)搭建步驟4:(1)首先到 /downloads/下載Eclipse集成開發(fā)環(huán)境并且解壓,這里推薦下載Java EE 集成版本,可以為平臺(tái)的搭建省下不少工作。接著再去java.sun./javase/downloads/index.jsp 站點(diǎn)下載SDK后安裝,下載dl.google./android/
8、android-sdk-windows-1.5_r1.zip,Android SDK1.5后解壓。(2)雙擊Eclipse解壓后目錄中的eclipse.exe然后啟動(dòng),選擇Eclipse菜單中的Help-> Install New Software-> 選項(xiàng)卡上的Available Software,點(diǎn)擊右側(cè)的“Add”輸入dl-ssl.google./android/eclipse/后確定,然后在“Work with”下拉菜單中選擇剛才輸入的網(wǎng)址。過一會(huì)就會(huì)出現(xiàn)一個(gè)Developer Tools選項(xiàng),勾上以后點(diǎn)擊Next以后Eclipse會(huì)自動(dòng)網(wǎng)上查找Android 開發(fā)工具插件
9、,然后找到Android DDMS和Android Development Tools,選中這兩個(gè)點(diǎn)擊Finish,Eclipse就會(huì)自動(dòng)下載并安裝Android插件了,最后會(huì)提示重啟Eclipse。(3)重啟后選擇Eclipse菜單中的Windows-> Preferences 在左側(cè)的Android項(xiàng)目中SDK Location中填入Android SDK解壓后的目錄,然后點(diǎn)擊Apply。(4)在Windows7的系統(tǒng)變量中的path變量中添加一個(gè)值,該值指向解壓后的Android SDK目錄下的tools文件夾。2.2 JSON簡介JSON(javaScript Object No
10、tation)是一種輕量級(jí)的數(shù)據(jù)交換格式,它基于javascript卻采用了完全獨(dú)立于語言的文本格式。JSON基于“名稱/值”對的集合和值的有效序列表這兩種格式,用JSON表示一組值時(shí)不但可以減少復(fù)雜性也能提高可讀性,是網(wǎng)絡(luò)編程中數(shù)據(jù)交換的常用格式。2.3 Struts2框架簡介與環(huán)境搭建Struts是采用Java Servlet/JavaServer Pages技術(shù),開發(fā)Web應(yīng)用程序的開放源碼的Framework。采用Struts能開發(fā)出基于MVC(Model-View-Controller)設(shè)計(jì)模式的應(yīng)用構(gòu)架。而Struts2是在原有Struts和Webwork的技術(shù)基礎(chǔ)上進(jìn)行合并的全新
11、的框架,其體系結(jié)構(gòu)而原有Strcts差異巨大。Structs2是以Webwork為核心,采用攔截器機(jī)制來處理用戶請求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯能夠與Servlet API完全分離,使應(yīng)用結(jié)構(gòu)更為合理。Struts2框架的開發(fā)需要使用Myeclipse集成開發(fā)環(huán)境。由于Myeclipse是Eclipse的一個(gè)插件,所以在這忽略Eclipse的安裝。Myeclipse的安裝:首先應(yīng)該到 myeclipseide./index.php? name =Downloads&req=viewsdownload&sid=15下載文件MyEclipse_5.5.1GA_E3.2.2_FullS
12、tackInstaller.exe并安裝。安裝完畢后將其安裝目錄下的feature和plugin兩個(gè)目錄覆蓋到Eclipse的安裝目錄下,最后卸載剛才安裝的Myeclipse5。Tomcat應(yīng)用服務(wù)器的安裝:首先,到 安裝文件,在安裝時(shí)選擇路徑把路徑選到JDK的安裝路徑下的jre。最后配置環(huán)境變量:在“我的電腦”上點(diǎn)右鍵>“屬性”>“高級(jí)”> “環(huán)境變量(N)”。 新建系統(tǒng)變量CATALINA_HOME:C:Program FilesApache Software FoundationTomcat 5.5(我的tomcat安裝目錄,你寫你自己的) 在系統(tǒng)變CLASSPATH的
13、值的后面加入:%CATALINA_HOME%commonlib; 在系統(tǒng)變量Path的值中"%JAVA_HOME%bin;"的后面加入以下容:%CATALINA_HOME%bin; 到這里,Tomcat安裝完畢6。Structs2框架的搭建,包括以下步驟:首先創(chuàng)建web項(xiàng)目并導(dǎo)入Structs2所需要的包struts2core-.jar、xwork-core-.jar、commonsfileupload-1.2.1.jar comm.ons-io-1.3.2.jar、freemarker-2.3.16.jar、ognl-3.0.jar、javas
14、sist-3.7.ga.jar;配置Structs在當(dāng)前web項(xiàng)目中,在web.xml中配置Struts2所需的核心過濾器。2.4 Baidu Maps API簡介百度地圖API是為開發(fā)者免費(fèi)提供的一套基于百度地圖服務(wù)的應(yīng)用接口,包括JavaScript API、Web服務(wù)API、Android SDK、iOS SDK、定位SDK、車聯(lián)網(wǎng)API、LBS云等多種開發(fā)工具與服務(wù),提供基本地圖展現(xiàn)、搜索、定位、逆/地理編碼、路線規(guī)劃、LBS云存儲(chǔ)與檢索等功能,適用于PC端、移動(dòng)端、服務(wù)器等多種設(shè)備,多操作系統(tǒng)下的地圖應(yīng)用開發(fā)7。3 系統(tǒng)分析3.1 研究目標(biāo)(1) 學(xué)習(xí)熟悉Android應(yīng)用程序的框架
15、、開發(fā)過程;(2) 學(xué)習(xí)熟悉Struts2框架、開發(fā)過程;(3) 基于Android的智能導(dǎo)游軟件主要實(shí)現(xiàn)Android系統(tǒng)訪問服務(wù)端,利用基于JAVA的網(wǎng)絡(luò)編程(Apache Client項(xiàng)目)與Webservice調(diào)用,針對手機(jī)所在的地理位置,實(shí)時(shí)查詢相關(guān)景點(diǎn)的基本信息與天氣信息,并智能導(dǎo)航;(3) 學(xué)習(xí)熟悉基于Android的地圖GIS開發(fā)。3.2 需求分析本軟件是一個(gè)基于Android的智能導(dǎo)游系統(tǒng),故使用者應(yīng)該為成分構(gòu)成比較廣泛的游客,所以UI必須簡潔大方,有顯淺易懂。而要實(shí)現(xiàn)智能導(dǎo)游,首先就必須要求軟件起碼如人工導(dǎo)游般,能夠?yàn)橛脩籼峁┚包c(diǎn)的基本信息講解、位置描述、導(dǎo)航等服務(wù)考慮到景
16、區(qū)信息與用戶信息等的數(shù)據(jù)量可能十分巨大,本系統(tǒng)應(yīng)該使用本地/服務(wù)器模式以節(jié)省用戶的移動(dòng)設(shè)備儲(chǔ)存空間以與數(shù)據(jù)流量。綜上所述,本系統(tǒng)應(yīng)該完成以下功能:(1) 采用C/S模式,基于Struts2框架服務(wù)端儲(chǔ)存用戶信息以與顯示地圖所必須的靜態(tài)信息,供Android客戶端的查詢?yōu)g覽與下載;(2) 用戶信息管理,包括:登錄與注冊、本地景點(diǎn)信息的管理;(3) 以城市為基本的景點(diǎn)信息查詢與模糊查詢,包括:名稱、地址、圖片、經(jīng)緯度、票價(jià)與其優(yōu)惠活動(dòng)等,并提供景點(diǎn)信息的本地緩存、下載;(4) 用戶自定位,景點(diǎn)位置的地圖顯示與導(dǎo)航;(5) 周邊餐飲、衛(wèi)生間、住宿、醫(yī)院、加油站等信息的查詢。3.3 性能分析本項(xiàng)目的目
17、標(biāo)是提升游客的旅游體驗(yàn),所以對程序的性能要求較高,程序應(yīng)該具有以下的良好性能:(1) 響應(yīng)速度快。(2) 安全性高(3) 信息處理速度快4 系統(tǒng)設(shè)計(jì)4.1 用戶界面設(shè)計(jì)根據(jù)設(shè)計(jì),本軟件系統(tǒng)有以下幾個(gè)界面:登錄界面、景點(diǎn)查詢綜合界面、景點(diǎn)信息顯示界面、景點(diǎn)信息本地收藏界面、周邊查詢界面、景點(diǎn)導(dǎo)航界面。景點(diǎn)查詢綜合界面是軟件的首頁,其主體是百度地圖。它能根據(jù)當(dāng)前城市(自選或定位默認(rèn))或模糊查詢用百度地圖顯示出景點(diǎn)的分布情況。景點(diǎn)信息顯示界面為用戶顯示當(dāng)前景點(diǎn)的詳細(xì)情況,包括:名稱、地址、門票、優(yōu)惠、簡介、圖片等資料,并能根據(jù)用戶意愿選擇下載當(dāng)前景點(diǎn)信息。景點(diǎn)信息本地收藏界面,其主體是一個(gè)ListV
18、iew。它能夠顯示出用戶的本地景點(diǎn)信息,并實(shí)現(xiàn)管理(刪除)。周邊查詢界面,其主體是一個(gè)百度地圖。用戶可以通過它來查詢到周邊諸如餐飲、酒店、加油站等信息。景點(diǎn)導(dǎo)航界面,其主體是一個(gè)百度地圖。它可以為用戶進(jìn)行實(shí)時(shí)導(dǎo)航服務(wù)。根據(jù)對用戶界面顯示容的分析,繪制出用戶界面的草圖,如圖4-1、4-2所示。 我的收藏景點(diǎn) 首頁城市景點(diǎn)信息景點(diǎn)簡介搜索圖4-1 用戶界面草圖目的地導(dǎo)航 周邊查詢圖4-2 用戶界面草圖4.2 數(shù)據(jù)庫設(shè)計(jì)本軟件中有一下數(shù)據(jù)需要存儲(chǔ):用戶信息、景點(diǎn)信息、景點(diǎn)信息收藏、全國城市名稱??紤]到用戶信息與景點(diǎn)信息的龐大數(shù)據(jù)量,本系統(tǒng)將其存儲(chǔ)在服務(wù)器端的MySQL數(shù)據(jù)庫,需要時(shí)再請求;城市名稱數(shù)
19、據(jù)量較少,為減少用戶數(shù)據(jù)流量,將其存儲(chǔ)在手機(jī)的SQLite數(shù)據(jù)庫中;而景點(diǎn)信息收藏則存放于SD卡的文件中,綜上所述,本系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)如下:在服務(wù)端的MySQL數(shù)據(jù)庫中建立新數(shù)據(jù)庫maps_traverse,并建立新表,包括用戶信息表gpsuser和景點(diǎn)信息表spot。如表4-1和表4-2所示。表4-1用戶信息表gpsuser的結(jié)構(gòu)屬性數(shù)據(jù)類型說明idInt(11)自動(dòng)增加的主鍵usernamevarchar(50)用戶名passwordvarchar(50)密碼Emailvarchar(50)電子地址registertimevarchar(50)注冊時(shí)間powerlimitsvarchar(5
20、0)權(quán)限statevarchar(50)用戶登錄狀態(tài)表4-2 景點(diǎn)信息表spot的結(jié)構(gòu)屬性數(shù)據(jù)類型說明idInt(11)自動(dòng)增加的主鍵namevarchar(45)景點(diǎn)名稱addressvarchar(45)地址phonevarchar(45)咨詢imageurlvarchar(45)圖片路徑IntroductionTEXT簡介LatDOUBLE經(jīng)度LngDOUBLE緯度FaresFLOAT門票價(jià)cityvarchar(45)所在城市編號(hào)btimeTIME始開放時(shí)間ntimeTIME終開放時(shí)間Favourableinfovarchar(45)優(yōu)惠信息由于全國城市的分布是相對固定的,為了減少操作
21、的麻煩,本軟件直接將整個(gè)城市數(shù)據(jù)庫city.s3db導(dǎo)入到Android項(xiàng)目的res/raw目錄中,直接使用。其中包括省表province,城市表city。如表4-3和表4-4所示。表4-3省表province的結(jié)構(gòu)屬性數(shù)據(jù)類型說明_idinteger自動(dòng)增加的主鍵codevarchar(6)省編號(hào)namevarchar(60)省名表4-2 城市表city的結(jié)構(gòu)屬性數(shù)據(jù)類型說明_idInteger自動(dòng)增加的主鍵codevarchar(6)城市編號(hào)namevarchar(60)城市名pcodevarchar(6)城市所在省編號(hào)從設(shè)計(jì)思路上考慮,儲(chǔ)存在手機(jī)本地的景點(diǎn)信息收藏?cái)?shù)據(jù)包括JSON文本和J
22、PG格式的圖片,將其直接寫入SD卡目錄以指定規(guī)則命名的目錄,此方案可以簡化對其的讀寫操作。4.3 程序模塊設(shè)計(jì)從功能需求上分析,整個(gè)軟件應(yīng)劃分為首頁、個(gè)人資料、導(dǎo)航、周邊查詢,四個(gè)模塊。首頁負(fù)責(zé)景點(diǎn)信息的各類查詢、城市的切換、定位,是整個(gè)軟件的核心;個(gè)人資料模塊負(fù)責(zé)管理用戶的信息以與本地景點(diǎn)數(shù)據(jù);導(dǎo)航負(fù)責(zé)對用戶進(jìn)行景點(diǎn)、指定位置的目的地導(dǎo)航;周邊查詢負(fù)責(zé)為用戶提供周邊信息的查詢。系統(tǒng)模塊功能智能導(dǎo)航系統(tǒng)首頁我的資料 導(dǎo)航 周邊景點(diǎn)標(biāo)示查詢下載位置顯示、當(dāng)前城市收藏景點(diǎn)查詢收藏景點(diǎn)管理景點(diǎn)導(dǎo)航指定地點(diǎn)導(dǎo)航個(gè)人資料管理登錄圖如圖4-2。圖4-2 系統(tǒng)模塊功能圖5 系統(tǒng)功能模塊設(shè)計(jì)5.1 文件結(jié)構(gòu)與
23、用途在程序開發(fā)階段,首先確定“基于Android的智能導(dǎo)游系統(tǒng)”的工程名為guidemap。工程源代碼的結(jié)構(gòu)如圖5-1所示。為了使源代碼文件的結(jié)構(gòu)更加清晰,guidemap工程設(shè)置了多個(gè)命名空間,分別用來保存用戶界面、數(shù)據(jù)庫、后臺(tái)服務(wù)和工具實(shí)體的源代碼文件,源代碼文件的名稱以與說明如表5-1所示。圖5-1guidemap工程的源代碼文件表5-1 guidemap工程的文件用途說明包 名 稱文 件 名說 明.guidemap.adapterMyAdapter.java資源適配器.guidemap monConstants.java公共工具類.guidemap.controlImageLoader
24、.java遠(yuǎn)程圖片加載類.guidemap.controlMapApplication.javaApplication.guidemap.controlMyOverLay.java景點(diǎn)覆蓋層類.guidemap.controlOverItemT.java定位覆蓋層類.guidemap monUrler.javaurl公共類.guidemap.dbDAO.java城市信息數(shù)據(jù)庫操作.guidemap.dbDBManager.javaSQLite管理類.guidemap.entityMyListItem.java地圖Item實(shí)體類.guidemap.entityPosition.java景點(diǎn)位置實(shí)
25、體類.guidemap.entitySpot.java景點(diǎn)信息實(shí)體類.guidemap.entityUser.java用戶信息實(shí)體類.guidemap.serviceGetLocationService.java后臺(tái)定位service類.guidemap.viewCityActivity.java城市切換選擇.guidemap.viewGuideActivity.java導(dǎo)航.guidemap.viewMainActivity.java主框架.guidemap.viewMapsActivity.java首頁.guidemap.viewSearchActivity.java周邊查詢.guidem
26、ap.viewSpotActivity.java景點(diǎn)信息查詢Android的資源文件保存在/res的子目錄中。/res/drawable/目錄中保存的是圖像文件,/res/values目錄中保存的是用來自定義字符串和選項(xiàng)列表的文件;/res/layout目錄中保存的是布局XML文件;/res/raw保存的是城市信息數(shù)據(jù)庫文件;而/res/anim保存的是動(dòng)畫效果文件。所有在程序開發(fā)階段可以被調(diào)用的資源都保存在這些目錄中AndroidManifest.xml文件主要是Activity、Service類的注冊和相關(guān)權(quán)限的許可設(shè)置。5.2后臺(tái)定位服務(wù)GetLocationService.java類的
27、后臺(tái)定位服務(wù)是整個(gè)軟件的基礎(chǔ),它綁定在軟件的Application,從軟件運(yùn)行開始,貫穿整個(gè)軟件生命周期的始末。其主要功能是不斷為系統(tǒng)提供實(shí)時(shí)的所在經(jīng)緯度以與所在城市,并存放到公共類Constants的City變量??紤]到本應(yīng)用的用戶對象主要為國用戶,在地圖方案上采用了由百度公司開發(fā)的免費(fèi)地圖Baidu Maps API。而定位方案采用了Baidu Location API,通過調(diào)用此API來實(shí)時(shí)獲取當(dāng)前位置坐標(biāo)將其存入Binder類中,而當(dāng)前城市信息的獲取通過百度地圖SDK中MKSearch來獲取。此模塊的實(shí)現(xiàn)流程圖如圖5-2所示。其核心代碼如下。MapApplicationapp = (M
28、apApplication) this.getApplication();if (app.bMap = null) app.bMap = new BMapManager(getApplication();app.bMap.init(app.MAP_KEY,new MapApplication.MyGeneralListener(); 開始初始化百度地圖API監(jiān)聽位置變化,并實(shí)時(shí)獲取當(dāng)前坐標(biāo)根據(jù)坐標(biāo)查詢、獲取當(dāng)前地址信息將獲取的信息存入MapApplication 結(jié)束圖5-2 后臺(tái)定位服務(wù)模塊功能流程圖app.bMap.start();final MKSearch mMKSearch = ne
29、w MKSearch();mMKSearch.init(app.bMap, new GeoCoderParser();Log.d("service map", "started");mLocationListener = new LocationListener() Overridepublicvoid onLocationChanged(Location location) /Log.d(TAG, "location change");if (location != null) String strLog = String.form
30、at("經(jīng)度:%frn" + "緯度:%f", location.getLongitude(),location.getLatitude();pt = new GeoPoint(int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6);mMKSearch.reverseGeocode(pt);app.setPt(pt);elseLog.v("Service", "getLocation error!");MKSearch的查詢結(jié)
31、果在GeoCoderParse.onGetResult方法中給出。publicvoidonGetAddrResult(MKAddrInfo arg0, int arg1) if (arg1 != 0) String str = String.format("%d", arg1);Log.d(TAG, str);return;MKGeocoderAddressComponent address = arg0.addressComponents;Constants.CITY=address.city;Log.d(TAG, "Location info:" +
32、 vince + address.city + address.district+address.street+address.streetNumber);5.3 MapApplication.java類該類是整個(gè)軟件的基石,它綁定了后臺(tái)定位服務(wù),初始化了百度地圖SDK,諸如:BMapManager、MKSearch、MKSearchListener等公共類,避免了各Activity之間的沖突與提高了系統(tǒng)的流暢性,它還定義了軟件的公共變量。綜上,系統(tǒng)可以通過它來控制著整個(gè)軟件的行為。其核心代碼如下。首先,應(yīng)該在androidmanifest.xml文件中聲明。<ap
33、plicationandroid:icon="drawable/ic_launcher"android:label="string/app_name"android:hardwareAccelerated="false"android:theme="style/AppTheme"android:name=".guidemap.control.MapApplication">綁定后臺(tái)服務(wù)以與初始化百度地圖。MapApplicationmApp=this;bMap=new BMapManage
34、r(mApp);boolean is=bMap.init(MAP_KEY, new MyGeneralListener();if(is)/設(shè)置定位監(jiān)聽時(shí)間間隔bMap.getLocationManager().setNotifyInternal(5, 2);bMap.getLocationManager().enableProvider(MKLocationManager.MK_NETWORK_PROVIDER);bMap.getLocationManager().enableProvider(MKLocationManager.MK_GPS_PROVIDER);elseToast.makeT
35、ext(this, "地圖DSK啟動(dòng)失敗",Toast.LENGTH_LONG).show();final Intent intent=new Intent();intent.setAction(".guidemap.ss");bindService(intent, scon, Service.BIND_AUTO_CREATE);其中,MyGeneralListener()類的作用在于在初始化百度地圖SDK時(shí)檢測錯(cuò)誤的發(fā)生,并為用戶提供提醒服務(wù)。用于為用戶提供導(dǎo)航、周邊信息搜索的MKSearch關(guān)鍵代碼如下(由于篇幅問題,此處只寫出了代碼框架,具體流程在
36、導(dǎo)航、周邊信息查詢模塊處給出)。MKSearch mKSearch=new MKSearch();mKSearch.init(app.bMap, new MKSearchListener() Overridepublicvoid onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) Overridepublicvoid onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) Overridepublicvoid onGetSuggestionResult(MKS
37、uggestionResult arg0, int arg1) Overridepublicvoid onGetRGCShareUrlResult(String arg0, int arg1) Overridepublicvoid onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) Overridepublicvoid onGetPoiDetailSearchResult(int arg0, int arg1) Overridepublicvoid onGetDrivingRouteResult(MKDrivingRouteResult a
38、rg0, int arg1) Overridepublicvoid onGetBusDetailResult(MKBusLineResult arg0, int arg1) Overridepublicvoid onGetAddrResult(MKAddrInfo arg0, int arg1) );5.4 登錄模塊登錄模塊是整個(gè)系統(tǒng)的門戶,在現(xiàn)實(shí)中它的功能是否健全關(guān)系到整個(gè)系統(tǒng)給用戶的第一印象。在這個(gè)系統(tǒng)中,登錄模塊主要為用戶提供賬號(hào)登錄與注冊,記住最后一次賬號(hào)與密碼,對系統(tǒng)進(jìn)行GPS、WIFI等狀態(tài)的檢測,以與系統(tǒng)權(quán)限等功能。其界面圖如圖5-3所示。圖5-3 登錄界面圖 當(dāng)用戶打開系統(tǒng),首
39、先便進(jìn)入這個(gè)登錄界面。假如用戶上一次成功登錄并勾選記住密碼,則系統(tǒng)會(huì)自動(dòng)為用戶填上上一次登錄所用賬號(hào)密碼。與此同時(shí),該模塊后臺(tái)會(huì)自動(dòng)檢測當(dāng)前手機(jī)的GPS、WIFI網(wǎng)絡(luò)狀態(tài),因?yàn)橄到y(tǒng)所實(shí)現(xiàn)的功能是基于上述兩種功能的,假如檢測到上述狀態(tài)為關(guān)閉時(shí)會(huì)提示打開。當(dāng)用戶輸入正確賬號(hào)信息時(shí),系統(tǒng)便會(huì)跳轉(zhuǎn)至系統(tǒng)主界面。在注冊功能中,用戶可以填寫賬號(hào)、密碼、E-mail等信息,注冊成功的條件是輸入的賬號(hào)不重復(fù),各類輸入格式正確。其中,登錄的功能流程圖如圖5-4所示。圖5-4 登錄功能流程圖 開始服務(wù)端檢測賬號(hào)數(shù)據(jù)并將結(jié)果反饋至系統(tǒng)登錄,向服務(wù)端發(fā)送賬號(hào)信息讀取上一次記錄并填上對應(yīng)的框存在上一次賬號(hào)記錄?登錄失敗
40、用戶輸入賬號(hào)密碼的信息登錄成功賬號(hào)密碼正確?結(jié)束NNYY5.5 首頁模塊由上述可知,首頁模塊是軟件功能的核心,正是它奠定了軟件的屬性:智能導(dǎo)游。它由兩個(gè)核心界面構(gòu)成:主界面、景點(diǎn)信息界面。其對應(yīng)的界面圖如圖5-5所示。圖5-5 首頁界面圖首先,用戶一旦登錄成功后,系統(tǒng)就會(huì)根據(jù)定位信息向服務(wù)端的MySQL數(shù)據(jù)庫請求當(dāng)?shù)氐木包c(diǎn)數(shù)據(jù),并將其顯示在地圖上。此后,用戶可以根據(jù)需要,使用以下功能:(1)、模糊搜索,在輸入框中輸入用戶需要了解的景點(diǎn)名稱,系統(tǒng)就會(huì)將其單獨(dú)顯示出來然后將其置于地圖中心;(2)、切換城市,系統(tǒng)默認(rèn)城市是用戶當(dāng)前所在城市,如果需要,用戶可以實(shí)時(shí)切換城市以了解更多景點(diǎn);(3)、查詢、
41、下載景點(diǎn)詳細(xì)信息。其模塊功能流程圖如圖5-6所示。為了更好地處理想Web站點(diǎn)請求,包括處理Session、Cookie等細(xì)節(jié)問題,Apache開源組織提供了一個(gè) Client項(xiàng)目,作為一個(gè)簡單的 客戶端(而不是瀏覽器)。它可以用于發(fā)送 請求,接受 響應(yīng)8。由于本系統(tǒng)需要從服務(wù)端遠(yuǎn)程獲取景點(diǎn)信息,我采用這個(gè)Apache Client,數(shù)據(jù)格式采用JSON,從服務(wù)端獲取信息的核心方法如下。publicstatic String doGet(String url,Context context) /判斷網(wǎng)絡(luò)if(checkNetwork(context)=false)returnnull;else
42、Get get =new Get(url);Basic Params Params = new Basic Params(); ConnectionParams.setConnectionTimeout( Params, 5000); 開始初始化百度地圖N標(biāo)注景點(diǎn)向后臺(tái)定位服務(wù)請求實(shí)時(shí)位置信息位置為空?Y獲取上一次定位的信息根據(jù)位置信息向服務(wù)端請求景點(diǎn)數(shù)據(jù) 結(jié)束圖5-6 景點(diǎn)信息標(biāo)注功能流程圖 ConnectionParams.setSoTimeout( Params, 5000); Client cliend=new Default Client( Params);String result
43、=new String();try Response response= cliend.execute( get); Entity entity= response.getEntity();InputStream inputstream= entity.getContent();BufferedReader buff=new BufferedReader(new InputStreamReader(inputstream);String line=new String();while(line=buff.readLine()!=null)result=result+line;/System.o
44、ut.println(result); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();result=null;return result; 根據(jù)信息將景點(diǎn)標(biāo)注:public OverItemT(Drawable marker, MapsActivity context, ArrayList<Spot> slist) super(boundCenterBottom(marker);/ TODO Auto-generated constructor stubthis.marker=mar
45、ker;this.slist=slist;this.ma=context;/根據(jù)gplist來制作OverlayItem List<GeoPoint> lgp=new ArrayList<GeoPoint>(); OverlayItem ot;for(Spot spot:slist) Log.e("getLayer", String.valueOf(spot.getPoi().getLat()+"+"+String.valueOf(spot.getPoi().getLng();lgp.add(new GeoPoint(int)(s
46、pot.getPoi().getLat()*1e6),(int)(spot.getPoi().getLng()*1e6); for(int i=0;i<lgp.size();i+)GeoPoint gp=(GeoPoint)lgp.get(i); if("null".equals(slist.get(i).getFavourableinfo() ot=newOverlayItem(gp,slist.get(i).getName()+"(優(yōu)惠景點(diǎn))","gpoint"+i); elseot=new OverlayItem(gp,s
47、list.get(i).getName(),"gpoint"+i);if(i=0)setFirstSpot(gp);mGeoList.add(ot); populate();/更新5.6導(dǎo)航模塊導(dǎo)航模塊,顧名思義,它的設(shè)計(jì)目標(biāo)是為游客提供景點(diǎn)的導(dǎo)航服務(wù),它彌補(bǔ)了人工導(dǎo)游難以隨時(shí)為旅游指路的缺點(diǎn),豐富了導(dǎo)游的服務(wù),讓游客可以更加方便地在旅游區(qū)瀏覽。導(dǎo)航模塊界面如圖5-7所示。圖5-7 導(dǎo)航模塊界面圖此模塊設(shè)計(jì)了兩種功能:任意地點(diǎn)的導(dǎo)航和指定景點(diǎn)的導(dǎo)航。而每種導(dǎo)航功能可以為旅游查詢出三種路徑:公交車、自駕、步行。在導(dǎo)航方案的選擇上,本模塊采用了基于Baidu Maps API的
48、MKSearch與MKSearchListener。當(dāng)用戶將搜索條件輸入系統(tǒng)時(shí),系統(tǒng)即調(diào)用MKSearch中的TransitSearch(String city,MKplanNode start, MKplanNode end) 或WalkingSearch(String startC ity,MK planNode start, String endCity,MKplanNode end)發(fā)起搜索,得到信息后為用戶在地圖顯示出路徑。導(dǎo)航模塊功能流程圖如圖5-8所示。 開始初始化百度地圖API實(shí)時(shí)從MapApplication中獲取位置信息獲取用戶輸入的搜索條件調(diào)用MKSearch查詢路徑信息
49、,并返回至MKSearchListener 結(jié)束從MKSearchListener獲取路徑信息,地圖顯示圖5-8 導(dǎo)航模塊功能流程圖5.7 周邊信息查詢模塊周邊信息查詢模塊為用戶提供了對某城市一定圍的諸如餐飲、衛(wèi)生間、加油站、酒店等豐富信息等關(guān)鍵詞的查詢。周邊信息查詢模塊界面如圖5-9所示。根據(jù)設(shè)計(jì),用戶可以指定搜索中心點(diǎn)(定位或自定義)、圍、搜索的Point類型,例如:學(xué)院圖書館、圍1000m、類型酒店,系統(tǒng)即可為用戶查詢到在學(xué)院圖書館周邊1000m圍的酒店。如導(dǎo)航模塊一般,采用了基于Baidu Maps API的MKSearch與MKSearchListener。當(dāng)用戶將搜索條件輸入系統(tǒng)時(shí)
50、,系統(tǒng)即調(diào)用MKSearch中的poiSearchNearby(String key,GeoPoint ptLB,int radius),方法發(fā)起周邊Point搜索。圖5-9 周邊信息查詢模塊界面圖 開始初始化百度地圖API實(shí)時(shí)從MapApplication中獲取位置信息調(diào)用MKSearch搜索周邊Point信息,并返回至MKSearchListener 結(jié)束從MKSearchListener獲取周邊Point信息,地圖顯示獲取用戶輸入的搜索條件周邊信息查詢模塊功能流程圖如圖5-10所示。圖5-10 周邊信息查詢模塊功能流程圖5.8 個(gè)人資料模塊個(gè)人資料管理模塊為用戶提供了個(gè)人信息查詢更新、個(gè)
51、人景點(diǎn)收藏的查詢與管理功能,其主要布局界面有兩個(gè),如圖5-11所示。圖5-11 個(gè)人資料模塊界面圖當(dāng)用戶選中“我的”選項(xiàng)卡后,進(jìn)入此模塊主界面。用戶可以在此模塊查看的個(gè)人賬號(hào)信息,包括賬號(hào)、注冊時(shí)間、賬號(hào)權(quán)限,并可以根據(jù)需要進(jìn)行包括賬號(hào)名、密碼在的信息修改,而在我的收藏方面,界面以Listview方式羅列了用戶收藏在本地的景點(diǎn)信息,可以讓用戶得以查看自己收藏到本地的景點(diǎn)信息,同時(shí)也可以通過特定手勢對其進(jìn)行刪除操作。模塊主界面的個(gè)人資料信息刷新、信息獲取與更新等由一個(gè)后臺(tái)核心線程進(jìn)行維護(hù)。個(gè)人資料管理線程功能流程圖如圖5-12所示。在個(gè)人收藏功能方面,景點(diǎn)信息在首頁模塊中下載,以JSON格式的T
52、XT文件方式儲(chǔ)存在手機(jī)SD卡中以項(xiàng)目名命名目錄下,文件夾則以景點(diǎn)的ID命名。在查看時(shí),該模塊會(huì)根據(jù)景點(diǎn)ID搜索到指定目錄的TXT文件,并加以解析,然后以LisView方式將其可視化。此時(shí),用戶則可以根據(jù)需要,按照指定手勢對信息進(jìn)行查詢、刪除。例如,在ListView的Item中滑動(dòng)手勢,將每個(gè)Item的刪除按鈕可視化,按下即可實(shí)現(xiàn)對信息的刪除。個(gè)人收藏功能流程圖如圖5-13所示。 開始從后臺(tái)定位服務(wù)獲取地址信息需要用戶信息?向服務(wù)端MySQL數(shù)據(jù)庫請求用戶信息數(shù)據(jù)Y需要更新用戶信息?Y更新服務(wù)端MySQL數(shù)據(jù)庫指定用戶信息刷新UINN 結(jié)束圖5-12 個(gè)人資料管理線程流程圖 開始遍歷讀取儲(chǔ)存有景點(diǎn)信息字符串獲取存放信息路徑的文件個(gè)數(shù)解析字符串,得到一個(gè)景點(diǎn)信息文件個(gè)數(shù)為0?讀取的景點(diǎn)個(gè)數(shù)等于文件個(gè)數(shù)?NYNY顯示讀取的景點(diǎn)信息 結(jié)束圖5-13 景點(diǎn)收藏功能流
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人投資版證券交易委托合同
- 2025年度室內(nèi)外裝飾裝修合同違約賠償標(biāo)準(zhǔn)與環(huán)保檢測協(xié)議
- 2025年度夜間搬運(yùn)工勞動(dòng)合同保障方案
- 2025年度個(gè)體工商戶現(xiàn)代農(nóng)業(yè)租賃服務(wù)協(xié)議
- 2025年度倉儲(chǔ)物流行業(yè)勞動(dòng)合同工傷賠償及倉儲(chǔ)安全協(xié)議
- 2025年度農(nóng)業(yè)生態(tài)環(huán)境評(píng)估與合作協(xié)議
- 2025年度XX互聯(lián)網(wǎng)企業(yè)股東退股及網(wǎng)絡(luò)安全協(xié)議
- 咖啡廳裝修簡易合同模板
- 2025年度人體模特?cái)z影作品授權(quán)使用協(xié)議
- 2025年江蘇省安全員《A證》考試題庫
- 中建某公司技術(shù)質(zhì)量工作會(huì)講稿總工
- 施工圖紙接收及分發(fā)臺(tái)賬
- Visio圖標(biāo)最全網(wǎng)絡(luò)通信圖標(biāo)庫(可用于VISIO等)課件
- 馬工程西方經(jīng)濟(jì)學(xué)(第二版)教學(xué)課件-8
- 小??Х仍耘嗉夹g(shù)措施課件
- 部編版二年級(jí)道德與法治下冊全冊課件
- 六年級(jí)下冊信息技術(shù)教學(xué)計(jì)劃
- 臺(tái)塑關(guān)系企業(yè)資材管理規(guī)則
- 沉井施工方案
- 民法典侵權(quán)責(zé)任編課件
- 10KV系統(tǒng)短路電流整定計(jì)算表格
評(píng)論
0/150
提交評(píng)論