




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
智能GPS功能的實(shí)現(xiàn)摘要所謂的GPS是指利用GPS定位衛(wèi)星,在全球范圍內(nèi)實(shí)時(shí)進(jìn)行定位、導(dǎo)航的系統(tǒng),其全稱(chēng)為全球衛(wèi)星定位系統(tǒng)。在空間技術(shù)和通信技術(shù)的推動(dòng)下,GPS自誕生40余年以來(lái),得到了迅猛的開(kāi)展。同時(shí)隨著智能移動(dòng)終端的不斷開(kāi)展,GPS技術(shù)從過(guò)去的單一設(shè)備逐步滲入到智能設(shè)備的開(kāi)發(fā)上。智能GPS功能的實(shí)現(xiàn)作為GPS技術(shù)與智能技術(shù)的結(jié)合,從導(dǎo)航具有便攜性好、價(jià)格較低、永遠(yuǎn)在線(xiàn)等方面來(lái)說(shuō),所以說(shuō)在全球最流行的安卓智能上研制GPS導(dǎo)航系統(tǒng)是非常有意義的。論文首先概要介紹了GPS技術(shù)的開(kāi)展現(xiàn)狀和前景,研究了基于基于Android平臺(tái)的移動(dòng)終端GPS系統(tǒng)開(kāi)發(fā)的可信性及需求分析;然后詳細(xì)闡述了Android系統(tǒng)的由來(lái)與安裝;接著在分析用戶(hù)需求的根底上,對(duì)系統(tǒng)的功能模塊進(jìn)行了劃分;最后進(jìn)行了具體的程序編寫(xiě)以及測(cè)試工作,測(cè)試結(jié)果說(shuō)明,該系統(tǒng)已能完成GPS手持終端的根本功能,在目前安卓智能普及的情況下,野外無(wú)需再專(zhuān)門(mén)購(gòu)置設(shè)備,使用本錢(qián)大大降低,且攜帶方便,可隨時(shí)進(jìn)行野外作業(yè)。因此,本系統(tǒng)有著廣闊的應(yīng)用前景。關(guān)鍵詞:GPSAndroid全球定位系統(tǒng)衛(wèi)星定位安卓智能目錄TOC\o"1-4"\h\z\u第一章緒論………………………11.1引言…………11.2研究?jī)?nèi)容……………………11.3論文結(jié)構(gòu)安排………………2第二章Android系統(tǒng)下的軟件開(kāi)發(fā)…………32.1Android系統(tǒng)簡(jiǎn)介…………32.1.1Android的由來(lái)……………………32.1.2Android的系統(tǒng)架構(gòu)………………32.1.3Android的應(yīng)用程序開(kāi)發(fā)…………42.2Android開(kāi)發(fā)環(huán)境的構(gòu)建…………………42.2.2JAVAJDK的安裝…………………42.2.3Eclipse的安裝……………………62.2.4ADT的安裝…………62.2.5AndroidSDK的安裝………………6第三章系統(tǒng)分析與設(shè)計(jì)………83.1研究目標(biāo)…………………83.2需求分析…………………83.3系統(tǒng)功能設(shè)計(jì)……………8第四章系統(tǒng)實(shí)現(xiàn)………………94.1Elipse文件的結(jié)構(gòu)及功能………………94.2界面設(shè)計(jì)…………………104.3程序模塊以及功能設(shè)計(jì)…………………104.3.1程序模塊介紹……………………104.3.2程序模塊的功能…………………104.4主要功能的實(shí)現(xiàn)…………11獲得GoogleMapAPIKey………124.4.2布局及按鈕的設(shè)置………………144.4.3配置窗體部件字符串文件………15關(guān)于應(yīng)用配置及聲明的設(shè)置……154.4.5主程序框架介紹…………………16地圖放大縮小的相關(guān)操作…………………17對(duì)衛(wèi)星視圖的相關(guān)設(shè)定……18對(duì)坐標(biāo)顯示區(qū)域的設(shè)置……18第五章系統(tǒng)測(cè)試………………19結(jié)論………………23致謝………………24參考文獻(xiàn)…………25第一章緒論1.1引言GPS是英文GlobalPositioningSystem〔全球定位系統(tǒng)〕的簡(jiǎn)稱(chēng),最早它是20世紀(jì)70年代由美國(guó)陸??杖娐?lián)合研制的空間衛(wèi)星導(dǎo)航定位系統(tǒng)。其主要目的是為陸、海、空三大領(lǐng)域提供實(shí)時(shí)、全天候和全球性的導(dǎo)航效勞,并用于情報(bào)收集、核爆監(jiān)測(cè)和應(yīng)急通訊等一些軍事目的,經(jīng)過(guò)40余年的研究實(shí)驗(yàn),GPS技術(shù)的運(yùn)用已去向平民化,且日益成熟。由于GPS系統(tǒng)所具有的全天候,高精度,和自動(dòng)測(cè)量的特點(diǎn),作為先進(jìn)的測(cè)量手段和新的生產(chǎn)力,已經(jīng)融入到了國(guó)民經(jīng)濟(jì)建設(shè),國(guó)防建設(shè)和社會(huì)開(kāi)展的各個(gè)應(yīng)用領(lǐng)域。其運(yùn)用提高了生產(chǎn)力,作業(yè)效率,科學(xué)水平以及人們生活質(zhì)量,因此可以說(shuō)GPS技術(shù)在經(jīng)濟(jì)全球化的今天起著舉足輕重的作用,而且可以預(yù)見(jiàn)的是全球定位技術(shù)對(duì)于人們的生活也將越來(lái)越凸顯它的重要性,人們的生活也將越來(lái)越離不開(kāi)它的存在。目前,全球共有四種全球定位系統(tǒng),包括美國(guó)的GPS,俄羅斯的格洛納斯,歐洲的伽利略和中國(guó)的北斗,相比擬而言,美國(guó)的GPS全球定位系統(tǒng)組建的最早,技術(shù)也最為成熟,但由我國(guó)自主研發(fā)的北斗定位系統(tǒng)也毫不遜色。北斗衛(wèi)星導(dǎo)航系統(tǒng)是中國(guó)自行研制開(kāi)發(fā)的區(qū)域性有源三維衛(wèi)星定位,可在全球范圍內(nèi)全天候、全天時(shí)為各類(lèi)用戶(hù)提供高精度、高可靠的定位、導(dǎo)航、授時(shí)效勞[1]??梢哉f(shuō),上至航空航天,下至工業(yè)、漁業(yè)、農(nóng)業(yè)生產(chǎn)和日常生活,全球衛(wèi)星導(dǎo)航定位技術(shù)無(wú)所不在。正如人們所說(shuō)的:“全球衛(wèi)星導(dǎo)航系統(tǒng)的應(yīng)用,僅受人類(lèi)想象力的制約?!?.2研究?jī)?nèi)容為了實(shí)現(xiàn)智能GPS功能,我事先做了大量的準(zhǔn)備。包括前期對(duì)智能實(shí)現(xiàn)GPS功能這個(gè)課題的研究意義及需求進(jìn)行了分析,也制定出了相應(yīng)的研究目標(biāo)及所實(shí)現(xiàn)的GPS的性能指標(biāo)。然后,我查找了大量書(shū)籍,深入了解了安卓操作系統(tǒng),明白了Android操作系統(tǒng)的由來(lái)系統(tǒng)構(gòu)架以及開(kāi)發(fā)Android應(yīng)用程序所必須具備的計(jì)算機(jī)運(yùn)行環(huán)境。我根據(jù)書(shū)上的性息,在自己的計(jì)算機(jī)上搭建了Android開(kāi)發(fā)環(huán)境平臺(tái)。在論文的中期,我研究了安卓的定位方式,其相對(duì)來(lái)說(shuō)還是比擬簡(jiǎn)單的,目前我們可以使用位置管理器和位置提供者進(jìn)行g(shù)etLocation的調(diào)用。這個(gè)方法返回本機(jī)的當(dāng)前位置的一個(gè)快照,這個(gè)快照將以L(fǎng)ocation對(duì)象形式提供。在手持設(shè)備中,我們可以獲得當(dāng)前位置的經(jīng)度和緯度。這樣就完成了自己位置確實(shí)定,如果需要查看自己所在的位置的話(huà)還需要調(diào)用一個(gè)地圖的API比方GoogleMap[2]。調(diào)用之后就可以在地圖顯示自己的位置了。在本次的工程中主要用到的就是當(dāng)前的經(jīng)度和緯度,并通過(guò)GoogleMap調(diào)用當(dāng)前的地理位置信息,還可以通過(guò)視圖切換按鈕,從的視圖框中觀察到當(dāng)前位置的衛(wèi)星視圖。有以上研究結(jié)果,我編寫(xiě)出了程序的初步代碼。論文后期,已經(jīng)完成了基于安卓GPS定位工程的代碼編寫(xiě)工作,并對(duì)此工程進(jìn)行運(yùn)行測(cè)試,在安卓2.2智能平臺(tái),運(yùn)行此工程,所得到的結(jié)果還是比擬讓人滿(mǎn)意的。1.3論文結(jié)構(gòu)安排論文將按照下面的描述進(jìn)行內(nèi)容的安排。第一章引言,簡(jiǎn)要介紹了GPS技術(shù)的開(kāi)展,指出了課題研究的背景、意義和主要內(nèi)容。第二章Android系統(tǒng)下的軟件開(kāi)發(fā),對(duì)安卓系統(tǒng)的由來(lái)及系統(tǒng)構(gòu)架做了分析和探討,然后詳細(xì)介紹了安卓的開(kāi)發(fā)環(huán)境且在自己的計(jì)算機(jī)上完成了運(yùn)行環(huán)境的搭建。第三章系統(tǒng)分析與設(shè)計(jì),明確了系統(tǒng)研究的目標(biāo),描述了系統(tǒng)的功能結(jié)構(gòu),對(duì)系統(tǒng)需求進(jìn)行了分析。第四章系統(tǒng)實(shí)現(xiàn),對(duì)程序進(jìn)行了操作界面的設(shè)計(jì),以及具體的編寫(xiě)和模塊搭建工作。第五章系統(tǒng)測(cè)試,描述了對(duì)安卓智能實(shí)體機(jī)運(yùn)行軟件的測(cè)試。說(shuō)明了程序運(yùn)行及安裝的方法,進(jìn)行了現(xiàn)實(shí)中的GPS定位。結(jié)論與致謝,總結(jié)了本課題的研究工作,提出了今后進(jìn)一步工作的方向,并向我?guī)椭完P(guān)心我的老師、同學(xué)和朋友們表示了衷心的感謝。第二章Android系統(tǒng)下的軟件開(kāi)發(fā)2.1Android系統(tǒng)簡(jiǎn)介2.1.1Android的由來(lái)Android是一種以L(fǎng)inux為根底的開(kāi)放源碼操作系統(tǒng),主要使用于便攜設(shè)備。目前尚未有統(tǒng)一中文名稱(chēng),中國(guó)大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由AndyRubin開(kāi)發(fā),最初主要支持[3]。2005年由Google收購(gòu)注資,并組建開(kāi)放聯(lián)盟開(kāi)發(fā)改進(jìn),逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上。Android的主要競(jìng)爭(zhēng)對(duì)手是蘋(píng)果公司的iOS以及RIM的AndroidOS。2011年第一季度,Android在全球的市場(chǎng)份額首次超過(guò)塞班系統(tǒng),躍居全球第一。2012年2月數(shù)據(jù),Android占據(jù)全球智能操作系統(tǒng)市場(chǎng)52.5%的份額,中國(guó)市場(chǎng)占有率為68.4%。2.1.2Android的系統(tǒng)架構(gòu)Android的系統(tǒng)架構(gòu)和其它操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和linux核心層[4]。Android是以L(fǎng)inux為核心的操作平臺(tái),作為一款開(kāi)放式的操作系統(tǒng),隨著Android的快速開(kāi)展,如今已允許開(kāi)發(fā)者使用多種編程語(yǔ)言來(lái)開(kāi)發(fā)Android應(yīng)用程序,而不再是以前只能使用Java開(kāi)發(fā)Android應(yīng)用程序的單一局面,因而受到眾多開(kāi)發(fā)者的歡送,成為真正意義上的開(kāi)放式操作系統(tǒng)。在Android中,開(kāi)發(fā)者可以使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,也可以通過(guò)NDK使用C/C++作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,也可使用SL4A來(lái)使用其他各種腳本語(yǔ)言進(jìn)行編程,還有其他諸如:Qt〔qtforandroid〕、Mono〔monoforandroid〕等一些著名編程框架也開(kāi)始支持Android編程,甚至通過(guò)MonoDroid,開(kāi)發(fā)者還可以使用C#作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序。另外,谷歌還在2009年特別發(fā)布了針對(duì)初學(xué)者的AndroidSimple語(yǔ)言,類(lèi)似Basic語(yǔ)言。而在網(wǎng)頁(yè)編程語(yǔ)言方面,JavaScript,,HTML5,dojo、mobl、PhoneGap等等都已經(jīng)支持Android平臺(tái)。而在Android系統(tǒng)底層方面,Android使用C/C++作為開(kāi)發(fā)語(yǔ)言[5]。2.1.3Android的應(yīng)用程序開(kāi)發(fā)早期的Android應(yīng)用程序開(kāi)發(fā),通常通過(guò)AndroidSDK〔Android軟件開(kāi)發(fā)包〕下使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,但通過(guò)不同的軟件開(kāi)發(fā)包,那么使用的編程語(yǔ)言也不同。例如開(kāi)發(fā)者可以通過(guò)AndroidNDK〔AndroidNative開(kāi)發(fā)包〕使用C語(yǔ)言或者C++語(yǔ)言來(lái)作為編程語(yǔ)言開(kāi)發(fā)應(yīng)用程序。同時(shí)谷歌還推出了適合初學(xué)者編程使用的Simple語(yǔ)言,該語(yǔ)言類(lèi)似微軟公司的VisualBasic語(yǔ)言[6]。此外,谷歌公司還推出了GoogleAppInventor開(kāi)發(fā)工具,該開(kāi)發(fā)工具可以快速地構(gòu)建應(yīng)用程序,方便新手開(kāi)發(fā)者。2.2Android開(kāi)發(fā)環(huán)境的構(gòu)建2.2.1Android系統(tǒng)開(kāi)發(fā)環(huán)境根本組成Android的上層應(yīng)用程序是用Java語(yǔ)言開(kāi)發(fā),同時(shí)還需要基于Dalvik虛擬機(jī),所以,Google公司推薦使用主流的Java繼承開(kāi)發(fā)環(huán)境Eclipse。只有Eclipse還不夠,因?yàn)槭鞘褂肑ava語(yǔ)言進(jìn)行開(kāi)發(fā),還應(yīng)該有由SUN公司提供的JavaSDK(其中包括JRE:JavaRuntimeEnvironment)。此外,Android的應(yīng)用程序開(kāi)發(fā)和Java開(kāi)發(fā)有較大區(qū)別的,所以還需要有Google提供的AndroidSDK。同時(shí),還需要在Eclipse安裝ADT,為Android開(kāi)發(fā)提供開(kāi)發(fā)工具的升級(jí)或者變更,是Eclipse下開(kāi)發(fā)工具的升級(jí)下載的工具。簡(jiǎn)言之,需要以下軟件,才能搭建Android開(kāi)發(fā)環(huán)境,從而進(jìn)行Android應(yīng)用程序的開(kāi)發(fā)[7]。(1)JavaJDK(2)Eclipse(3)ADT(4)AndroidSDK2.2.2JAVAJDK的安裝首先登陸JAVAJDK官網(wǎng),,我由于是32位系統(tǒng)所以下載的時(shí)候選擇32位的,我下載的是jdk-7u3-windows-x32然后安裝JavaJDK。安裝完成后,還需要設(shè)置環(huán)境變量,翻開(kāi)我的電腦->屬性->高級(jí)系統(tǒng)設(shè)置->環(huán)境變量->系統(tǒng)變量中添加以下環(huán)境變量,如圖2.1所示。圖2.1添加系統(tǒng)環(huán)境變量〔1〕JAVA_HOME指明JDK安裝路徑,就是剛剛安裝時(shí)的路徑C:\ProgramFiles\Java\jdk1.6.0_21,此路徑下包括lib,bin,jre等文件夾〔2〕PATHPath使得系統(tǒng)可以在任何路徑下識(shí)別java命令,設(shè)為:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin〔3〕CLASSPATHCLASSPATH為java加載類(lèi)(classorlib)路徑,只有類(lèi)在classpath中,java命令才能識(shí)別,設(shè)為:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(要加.表示當(dāng)前路徑,%JAVA_HOME%就是引用前面指定的JAVA_HOME。)上述環(huán)境變量設(shè)置好了后,從開(kāi)始菜單欄中運(yùn)行cmd,在命令窗口里面運(yùn)行“java–version”命令,如果可以從窗口中看到類(lèi)似圖2.2的信息,即為安裝成功。圖2.2環(huán)境變量成功提示2.2.3Eclipse的安裝登陸Eclipse的官網(wǎng)并下載Eclipse,下載完成后,雙擊Eclipse解壓后目錄中的eclipse.exe然后啟動(dòng),選擇Eclipse菜單中的Help->InstallNewSoftware->選項(xiàng)卡上的AvailableSoftware,點(diǎn)擊右側(cè)的“Add”輸入后確定,然后在“Workwith”下拉菜單中選擇剛剛輸入的網(wǎng)址。過(guò)一會(huì)就會(huì)出現(xiàn)一個(gè)DeveloperTools選項(xiàng),勾上以后點(diǎn)擊Next以后Eclipse會(huì)自動(dòng)網(wǎng)上查找Android開(kāi)發(fā)工具插件,然后找到AndroidDDMS和AndroidDevelopmentTools,選中這兩個(gè)點(diǎn)擊Finish,Eclipse就會(huì)自動(dòng)下載并安裝Android插件了,最后會(huì)提示重啟Eclipse[8]。2.2.4ADT的安裝重啟后翻開(kāi)Eclipse菜單Help>installnewsoftware選擇ADT,輸入Name:ADT;Location:按OK,然后全部全部打勾,安裝。一直按Next,接受其中的協(xié)議,最后會(huì)自動(dòng)安裝。2.2.5AndroidSDK的安裝登陸AndroidSDK下載頁(yè)面下載AndroidSDK,下載完成后解壓。然后選擇Eclipse菜單中的Windows->Preferences在左側(cè)的Android工程中SDKLocation中填入AndroidSDK解壓后的目錄,然后點(diǎn)擊Apply,如圖2.3所示。圖2.3SDK安裝成功界面按“確定”后,重新啟動(dòng)計(jì)算機(jī)。重啟計(jì)算機(jī)以后,進(jìn)入cmd命令窗口運(yùn)行android-h如果有類(lèi)似以下的輸出,如圖2.4所示,說(shuō)明SDK安裝成功:圖2.4驗(yàn)證AndroidSDK是否安裝成功至此Android的開(kāi)發(fā)環(huán)境搭建成功[15]。第三章系統(tǒng)分析與設(shè)計(jì)3.1研究目標(biāo)使用組件技術(shù)在Android平臺(tái)實(shí)現(xiàn)GPS軟件的開(kāi)發(fā)。具體目標(biāo)包括:〔1〕界面友好,簡(jiǎn)單實(shí)用,可操作性強(qiáng),適合各年齡階層使用〔2〕程序運(yùn)行速度快,占用系統(tǒng)內(nèi)存小〔3〕軟件大小要小,便于用戶(hù)用直接下載使用3.2需求分析本設(shè)計(jì)實(shí)現(xiàn)了基于Android平臺(tái)開(kāi)發(fā)的GPS接收機(jī)系統(tǒng)設(shè)計(jì)的運(yùn)行。GPS應(yīng)用越來(lái)越廣泛,我們的設(shè)計(jì)只是應(yīng)用的根底和開(kāi)端。在實(shí)際應(yīng)用中我們要結(jié)合各個(gè)領(lǐng)域的特殊情況和特定的技術(shù)需求,進(jìn)行有針對(duì)性的處理和設(shè)計(jì)。GPS提供的定位信息包括了經(jīng)度、緯度、海拔、速度、航向、磁場(chǎng)、時(shí)間、衛(wèi)星個(gè)數(shù)及其編號(hào)等衛(wèi)星信息其接收數(shù)據(jù)方法類(lèi)似,故本設(shè)計(jì)只是提取了其中的局部?jī)r(jià)值性較高的數(shù)據(jù)信息,主要就是顯示用戶(hù)當(dāng)前所在位置的經(jīng)緯度坐標(biāo),并可以對(duì)視圖框中的地圖進(jìn)行放大和縮小操作,如果用戶(hù)看不懂地圖,還可以調(diào)用此區(qū)域的衛(wèi)星視圖。3.3系統(tǒng)功能設(shè)計(jì)系統(tǒng)的主要功能包括:〔1〕定位當(dāng)前位置信息,通過(guò)智能內(nèi)置的GPS硬件,對(duì)用戶(hù)的地理位置進(jìn)行衛(wèi)星定位,將所得到的經(jīng)緯度顯示在操作界面上,并將此坐標(biāo)上傳至GoogleMap,以便獲得當(dāng)前位置的地圖信息,然后將得到的信息以圖片的形式顯示在終端上。〔2〕地圖信息的放大和縮小,用戶(hù)如果所在位置比擬空曠,難以從地圖上識(shí)別位置,便可放大或縮小地圖,通過(guò)觀察附近的道路或村莊來(lái)推斷自己的實(shí)際位置?!?〕衛(wèi)星視圖切換,如果用戶(hù)的地圖意識(shí)不強(qiáng),還可以進(jìn)行視圖切換,看到此區(qū)域的衛(wèi)星視圖,這樣以來(lái)就可以通過(guò)觀看地圖上的房屋排列或者是標(biāo)志性建筑來(lái)進(jìn)行定位。第四章系統(tǒng)實(shí)現(xiàn)4.1Elipse文件的結(jié)構(gòu)及功能首先,要在Eclipse里面創(chuàng)立一個(gè)新工程,命名為MapView,如圖4.1所示。圖4.1工程的源代碼文件下面介紹下Android的工程目錄結(jié)構(gòu)。res:放置應(yīng)用程序用到的資源文件。其包含(Drawable,layout,values等目錄)。當(dāng)這個(gè)目錄下的文件發(fā)生變化時(shí),src目錄下面的R.java就會(huì)自動(dòng)發(fā)生變化。assets:主要放置多媒體等數(shù)據(jù)文件。res/drawable:放置應(yīng)用到的圖片資源。res/layout:放置一些與UI相應(yīng)的布局文件,都是xml文件。res/values:放置字符串,顏色,數(shù)組等常量數(shù)據(jù)。AndroidManifest.xml:相當(dāng)于應(yīng)用的配置文件。在此文件里必須聲明應(yīng)用的名稱(chēng),應(yīng)用所用到的Activity,Service,Reveiver等[10]。4.2界面設(shè)計(jì)根據(jù)需求分析可以知道,應(yīng)用程序包含一個(gè)界面就可以了,但是這個(gè)界面雖然簡(jiǎn)單,但是要包含一個(gè)視圖框、三個(gè)按鈕和一個(gè)狀態(tài)欄。您當(dāng)前的位置是:緯度:您當(dāng)前的位置是:緯度:經(jīng)度:放大縮小衛(wèi)星視圖〔開(kāi)〕視圖框圖4.2用戶(hù)界面草圖4.3程序模塊以及功能設(shè)計(jì)4.3.1程序模塊介紹該程序的模塊設(shè)計(jì)非常簡(jiǎn)單,總共分為五個(gè)模塊:一個(gè)視圖框、一個(gè)坐標(biāo)顯示區(qū)域和三個(gè)按鈕。視圖框負(fù)責(zé)對(duì)當(dāng)前位置進(jìn)行圖像進(jìn)行顯示。坐標(biāo)顯示區(qū)域負(fù)責(zé)對(duì)顯示當(dāng)前坐標(biāo)。三個(gè)按鈕分別為:放大,縮小,衛(wèi)星視圖。4.3.2程序模塊的功能〔1〕坐標(biāo)顯示區(qū)域LocationManager.GPS_PROVIDER視圖框?qū)腉PS獲取最近的定位信息。location.getLatitude,獲取緯度信息。location.getLongitude,獲取經(jīng)度信息[14]。〔2〕視圖框根據(jù)GPS的定位信息,系統(tǒng)將通過(guò)com.google.android.maps把地圖顯示在視圖框中。〔3〕放大、縮小鈕分別調(diào)用zoomIn和zoomOut來(lái)放大或縮小地圖〔4〕衛(wèi)星視圖編寫(xiě)switchMap來(lái)調(diào)用mapview.setSatellite來(lái)實(shí)現(xiàn)衛(wèi)星視圖和普通視圖之間的切換。到這里該程序所要實(shí)現(xiàn)的功能就根本可以實(shí)現(xiàn)了。4.4主要功能的實(shí)現(xiàn)為了實(shí)現(xiàn)系統(tǒng)功能,我對(duì)此進(jìn)行了深入的研究。要知道每一種移動(dòng)開(kāi)發(fā)環(huán)境都有自己的基類(lèi)。如J2ME應(yīng)用程序的基類(lèi)是midlets,而Android程序的基類(lèi)是Activity。這個(gè)Activity為我們提供了對(duì)移動(dòng)操作系統(tǒng)的根本功能和事件的訪(fǎng)問(wèn)。這個(gè)類(lèi)包含了根本的構(gòu)造方法,鍵盤(pán)處理,掛起來(lái)恢復(fù)功能,以及其他底層的手持設(shè)備的訪(fǎng)問(wèn)。實(shí)質(zhì)上,我們的應(yīng)用程序?qū)⑹且粋€(gè)Activity類(lèi)的擴(kuò)展。在本論文中我將使用Activity類(lèi)來(lái)編寫(xiě)Android程序。View類(lèi)是Android的一個(gè)超類(lèi),這個(gè)類(lèi)幾乎包含了所有的屏幕類(lèi)型。但它們之間有一些不同。每一個(gè)view都有一個(gè)用于繪畫(huà)的畫(huà)布。這個(gè)畫(huà)布可以用來(lái)進(jìn)行任意擴(kuò)展。本文為了方便起見(jiàn),只涉及到了兩個(gè)主要的View類(lèi)型:定義View和Android的XML內(nèi)容View。在上面的代碼中,使用的是“HelloWorld”XMLView,它是以非常自然的方式開(kāi)始的。如果我們查看一下新的Android工程,就會(huì)發(fā)現(xiàn)一個(gè)叫main.xml的文件。在這個(gè)文件中,通過(guò)一個(gè)簡(jiǎn)單的XML文件,描述了一個(gè)屏幕的布局。由于本文主要應(yīng)用就是GoogleMapAPI,所以其中涉及到大量方法以及相關(guān)參數(shù),簡(jiǎn)單介紹如下[12]:〔1〕GBrowserIsCompatible()--
是否支持GoogleMapAPI
〔2〕location.getLatitude()–
目標(biāo)位置的緯度坐標(biāo);〔3〕location.getLongitude()–
目標(biāo)位置的經(jīng)度坐標(biāo)〔4〕newGLatLng(myLat,myLng)--
設(shè)置經(jīng)緯度〔5〕map.setCenter(newGLatLng(myLat,myLng),14)--
設(shè)置地圖默認(rèn)的中心點(diǎn)經(jīng)緯度
〔6〕newGLatLng(myLat,myLng)--
設(shè)置中心點(diǎn)的經(jīng)緯度〔7〕14--
地圖的默認(rèn)縮放比例大小值,范圍為1-18
〔8〕newGMap2(document.getElementById("GoogleMap"))--
獲取顯示的地圖容器〔9〕map.setMapType(G_NORMAL_MAP);--
設(shè)置顯示地圖的類(lèi)型可選值:a.G_NORMAL_MAP--
默認(rèn)地圖樣式b.G_SATELLITE_MAP--GoogleEarth衛(wèi)星地圖c.G_HYBRID_MAP--
混合模式地圖〔10〕newGIcon(G_DEFAULT_ICON)--
設(shè)置標(biāo)記樣式〔11〕addControl()--
給地圖添加控件常用的可選控件有:a.newGLargeMapControl()--
大的地圖縮放級(jí)別控件b.newGOverviewMapControl()--
地圖縮略圖控件c.newGScaleControl()--
比例尺控件d.newGMapTypeControl()--
地圖類(lèi)形選擇控件〔12〕enableContinuousZoom()--
允許連貫改變地圖比例〔13〕createMarker(latlng)--
自定義方法〔14〕newGMarker(latlng)--
在地圖中設(shè)置標(biāo)簽,參數(shù)latlng--
標(biāo)簽的坐標(biāo)〔15〕Event.addListener(marker,event,function)--
給標(biāo)簽設(shè)置事件marker--
標(biāo)簽對(duì)象,
event--
事件名稱(chēng)function--
時(shí)間的處理函數(shù)〔16〕openInfoWindowHtml(latlng,myHtml)--
將信息框添加到標(biāo)簽上latlng--
標(biāo)簽坐標(biāo),
myHtml--
提示信息的HTML字符串4.4.1獲得GoogleMapAPIKey使用GoogleMapAPI前,必須先生成GoogleMapAPIKEY.具體步驟如下:第一步:生成GoogleMapAPIKey要使用androiddebug模式下的keystore密鑰庫(kù)[14]。其位于C:\users\dongliang\.android\debug.keystore目錄下〔dongliang是電腦用戶(hù)名〕。輸入命令生成MDK5Key,如圖4.3所示圖4.3生成MDK5Key第二步:到GoogleMapAPI的主頁(yè)去申請(qǐng)GoogleMapAPIKEY。登錄地址頁(yè)面,在其中的MD5fingerprint一欄中輸入剛剛生成的MD5密紋,如圖4.4所示圖4.4生成GoogleMapAPIKEY如果你是第一次使用GoogleMapAPI你要按照提示申請(qǐng)一個(gè)賬號(hào)。然后就可以得到唯一密鑰,本機(jī)的密鑰為android:apiKey="0_kiK_qH-JI4hNZxaSZ50LaDmeX7_pxeSggjlhQ"/>4.4.2布局及按鈕的設(shè)置這局部模塊代碼在res/layout/main.xml中:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="://schemas.android/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">//定義一個(gè)寬高都滿(mǎn)屏的垂直排列窗口<TextView android:id="@+id/myLocationText"android:layout_width="fill_parent"android:layout_height="wrap_content"/>//定義一個(gè)寬滿(mǎn)屏高隨內(nèi)容自動(dòng)拉伸的文本框<LinearLayoutandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content">//定義一個(gè)水平的流輸出口<Buttonandroid:id="@+id/in"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="放大"/>//定義一個(gè)名稱(chēng)為in的按鈕,其上顯示放大,級(jí)別為1<Buttonandroid:id="@+id/out"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="縮小"/>//定義一個(gè)名稱(chēng)為out的按鈕,其上顯示縮小,級(jí)別為1</LinearLayout><ToggleButtonandroid:id="@+id/switchMap"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textOff="衛(wèi)星視圖(關(guān))"android:textOn="衛(wèi)星視圖(開(kāi))"/>//定義一個(gè)雙位開(kāi)關(guān),默認(rèn)顯示衛(wèi)星視圖〔關(guān)〕,點(diǎn)擊后顯示衛(wèi)星視圖〔開(kāi)〕,高寬都為自動(dòng)拉伸類(lèi)型 android:id="@+id/myMapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:apiKey="0_kiK_qH-JI4hNZxaSZ50LaDmeX7_pxeSggjlhQ"/></LinearLayout>//此為與谷歌地圖連接的必要代碼其中倒數(shù)第二行中就使用到了上一章節(jié)所得的密鑰。4.4.3配置窗體部件字符串文件將字符串顯示分別放入res/values/string.xml。代碼如下:<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="hello">HelloWorld,MapView!</string><stringname="app_name>MapView</string>//顯示軟件的名稱(chēng)為MapView</resources>4.4.4關(guān)于應(yīng)用配置及聲明的設(shè)置<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="://schemas.android/apk/res/android"package="com.map"android:versionCode="1"android:versionName="1.0.0">//版本信息<applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><activityandroid:name="MapView1"android:label="@string/app_name">//聲明類(lèi)MapView1<intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity><uses-libraryandroid:name="com.google.android.maps"/></application><uses-permissionandroid:name="android.permission.INTERNET"/>//允許此程序聯(lián)網(wǎng)<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>//允許程序進(jìn)行精確定位</manifest>4.4.5主程序框架介紹工程的主程序,位置應(yīng)在src/com.map的兩個(gè)源程序里,需要將各個(gè)包名已經(jīng)類(lèi)的屬性進(jìn)行聲明,具體如下:packagecom.map;//com.map包importjava.util.ArrayList;importandroid.app.AlertDialog;importandroid.content.Context;importandroid.graphics.drawable.Drawable;importcom.google.android.maps.ItemizedOverlay;importcom.google.android.maps.OverlayItem;//以上為導(dǎo)入的一些方法publicclassHelloItemizedOverlayextendsItemizedOverlay//公共類(lèi)的聲明privateArrayList<OverlayItem>mOverlays=newArrayList<OverlayItem>();privateContextmContext;packagecom.map;//另一個(gè)com.map包importjava.util.List;importandroid.content.Context;importandroid.graphics.drawable.Drawable;importandroid.location.Criteria;importandroid.location.Location;importandroid.location.LocationListener;importandroid.location.LocationManager;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;//設(shè)置鼠標(biāo)監(jiān)聽(tīng)importandroid.widget.Button;importandroid.widgetpoundButton;importandroid.widget.TextView;importandroid.widget.ToggleButton;importandroid.widgetpoundButton.OnCheckedChangeListener;importcom.google.android.maps.GeoPoint;importcom.google.android.maps.MapActivity;importcom.google.android.maps.MapController;importcom.google.android.maps.MapView;importcom.google.android.maps.MyLocationOverlay;importcom.google.android.maps.Overlay;importcom.google.android.maps.OverlayItem;//以上都為導(dǎo)入的一些方法然后按照步驟開(kāi)始對(duì)程序進(jìn)行編譯,由于篇幅限制,所以這里將只舉例說(shuō)明幾個(gè)主要部件代碼編譯。地圖放大縮小的相關(guān)操作@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);mapview=(MapView)findViewById(R.id.myMapView);List<Overlay>overlays=mapview.getOverlays();MyLocationOverlaymyLocation=newMyLocationOverlay(this,mapview);myLocation.enableMyLocation();overlays.add(myLocation);ctrlMap=mapview.getController();inBtn=(Button)findViewById(R.id.in);//尋找名為in的按鈕將其值賦予inBtnoutBtn=(Button)findViewById(R.id.out);//尋找名為out的按鈕將其值賦予outBtnswitchMap=(ToggleButton)findViewById(R.id.switchMap);OnClickListenerlistener=newOnClickListener(){@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.in:ctrlMap.zoomIn();//控制地圖放大break;caseR.id.out:ctrlMap.zoomOut();//控制地圖縮小break;default:break;}}};inBtn.setOnClickListener(listener);outBtn.setOnClickListener(listener);對(duì)衛(wèi)星視圖的相關(guān)設(shè)定switchMap.setOnCheckedChangeListener(newOnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(CompoundButtoncBtn,booleanisChecked){if(isChecked==true)//如果被點(diǎn)擊了{(lán)mapview.setSatellite(true);//顯示衛(wèi)星視圖}else{mapview.setSatellite(false);//不顯示衛(wèi)星視圖}}});對(duì)坐標(biāo)顯示區(qū)域的設(shè)置privatevoidupdateWithNewLocation(Locationlocation){ StringlatLongString; TextViewmyLocationText; myLocationText=(TextView)findViewById(R.id.myLocationText); if(location!=null)//如果location不為空{(diào) doublelat=location.getLatitude();//獲取緯度信息,并賦值給雙精度的lat doublelng=location.getLongitude();//獲取經(jīng)度信息,并賦值給雙精度的lng latLongString="緯度:"+lat+"\n經(jīng)度:"+lng;//將經(jīng)緯度信息賦予字符串 System.out.println(lat+""+lng);//在軟件中輸出經(jīng)緯度信息 ctrlMap.animateTo(newGeoPoint((int)(lat*1E6),(int)(lng*1E6))); }else{ latLongString="無(wú)法獲取地理信息";//如果無(wú)法得到經(jīng)緯度,將"無(wú)法獲取地理信息"賦予latLongString System.out.println("nolocation");//在軟件中輸出} myLocationText.setText("您當(dāng)前的位置是:\n"+latLongString);}}第五章系統(tǒng)測(cè)試通過(guò)前面的一章,已經(jīng)完成了GPS定位工程的代碼編寫(xiě)工作,下面將對(duì)此工程進(jìn)行實(shí)體機(jī)運(yùn)行測(cè)試:〔1〕將程序目錄下的apk應(yīng)用文件拷貝到安卓2.2智能平臺(tái),等待開(kāi)機(jī)后會(huì)出現(xiàn)鎖屏狀態(tài),在此狀態(tài)下可以看到時(shí)間日期以及的電量信息等,如下列圖5.1所示。圖5.1虛擬機(jī)鎖屏界面圖5.2主菜單中的MapView〔2〕這時(shí)滑動(dòng)解鎖滑條解鎖,在的資源管理器中找到剛剛拷貝的文件,點(diǎn)擊其進(jìn)行安裝之后就可以在主菜單中看見(jiàn)程序MapView,它在程序列表的第三行第二列,由安卓默認(rèn)的圖標(biāo)顯示,如上圖5.2所示。〔3〕下面我們輕觸MapView圖標(biāo),程序就會(huì)立即運(yùn)行,運(yùn)行后就可以看到上一章在程序中編寫(xiě)的界面,其中有放大按鈕,縮小按鈕以及衛(wèi)星視圖按鈕,還有最主要的地圖視圖框,如下列圖5.3所示。圖5.3程序運(yùn)行界面圖圖5.4翻開(kāi)GPS功能〔4〕由于的GPS功能沒(méi)有翻開(kāi),所以我們可以看到您當(dāng)前的位置這一欄顯示的是無(wú)法獲取地理信息,所以地圖視圖框中只顯示程序所編寫(xiě)的初始化位置。下面在的設(shè)置功能中翻開(kāi)其運(yùn)用,具體操作是在主菜單翻開(kāi)Settings功能,找到Location&securitysettings,在其中的MyLocation中就可以看見(jiàn)UseGPSsatellites功能,將其打勾,如上圖5.4所示?!?〕我們可以從最上方的狀態(tài)欄中看到一個(gè)小衛(wèi)星接受器的圖標(biāo),表示GPS運(yùn)用已翻開(kāi)。回到MapView軟件就會(huì)發(fā)現(xiàn)中的顯示數(shù)據(jù)發(fā)生了改變,當(dāng)前的地理位置的緯度及經(jīng)度坐標(biāo)被顯示了出來(lái),在視圖框中也可以看見(jiàn)當(dāng)前的道路信息,如下列圖5.5所示。圖5.5定位結(jié)果顯示圖5.6衛(wèi)星視圖顯示〔6〕下面我們點(diǎn)擊“衛(wèi)星視圖”按鈕,會(huì)發(fā)現(xiàn)按鈕上的字由“衛(wèi)星視圖〔關(guān)〕”變成了“衛(wèi)星視圖〔開(kāi)〕”,按鈕上也出現(xiàn)了標(biāo)記的圖案,通過(guò)兩幅圖的比擬,我們可以很明顯的看出相對(duì)于普通視圖,衛(wèi)星視圖更加的直觀,極大的改善了用戶(hù)的定位體驗(yàn)。結(jié)果如上圖5.6所示?!?〕我們?cè)谄胀ㄒ晥D的根底上點(diǎn)擊“放大”按鈕,可以直觀的看到一些剛剛沒(méi)有看見(jiàn)的,比擬小的道路。這樣以來(lái)用戶(hù)在自己所處位置比擬繁華,道路過(guò)于繁多的時(shí)候,將地圖放大,就可精確定位街道。這個(gè)功能是我們進(jìn)行定位而常用的功能之一。結(jié)果如下列圖5.7所示。圖5.7放大后結(jié)果圖5.8縮小后結(jié)果〔8〕下面繼續(xù)點(diǎn)擊“縮小”按鈕,這個(gè)鍵的功能與“放大”按鈕恰恰相反,它會(huì)讓我們有一種地圖“遠(yuǎn)去”的感覺(jué),這樣以來(lái)用戶(hù)在自己所處位置比擬偏僻,且附近又沒(méi)有街道的時(shí)候,就可以利用縮小地圖的方
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷鏈轉(zhuǎn)運(yùn)知識(shí)培訓(xùn)課件
- 辣椒種植基地環(huán)境監(jiān)測(cè)與生態(tài)保護(hù)合同
- 二零二五年度租賃房屋押金管理合同
- 2025年度旅游度假區(qū)委托代理出租經(jīng)營(yíng)合同
- 二零二五年度劇組演員培訓(xùn)與聘用合同
- 2025年度股權(quán)置換作廢及資產(chǎn)重組協(xié)議
- 絕交協(xié)議書(shū)模板2025:適用于解除朋友關(guān)系的解除協(xié)議
- 茶山承包及茶葉種植基地綠色食品認(rèn)證合同(2025年度)
- 二零二五年度音樂(lè)節(jié)組織與管理服務(wù)免責(zé)協(xié)議
- 二零二五年度超市門(mén)店租賃及品牌使用協(xié)議合同
- 寵物運(yùn)輸合同樣本
- 2025山西云時(shí)代技術(shù)限公司校園招聘(101人)易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 在優(yōu)化營(yíng)商環(huán)境工作座談會(huì)上的講話(huà)
- 四川省2024年高等職業(yè)教育單獨(dú)招生考試中職類(lèi)語(yǔ)文試題及答案
- 歷年考研自動(dòng)化復(fù)試面試試題匯集
- 家具公司、店鋪管理運(yùn)營(yíng)手冊(cè)
- 全面優(yōu)化2025年春季《高等數(shù)學(xué)》教學(xué)2篇
- 2025-2030年中國(guó)鉛酸蓄電池行業(yè)市場(chǎng)需求分析與十三五規(guī)劃研究報(bào)告
- 2025年江蘇蘇州市常熟市交通公有資產(chǎn)經(jīng)營(yíng)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- QC080000管理手冊(cè)與程序文件
- 預(yù)防校園欺凌主題班會(huì)課件(共36張課件)
評(píng)論
0/150
提交評(píng)論