基于J2ME平臺的GPS導航系統(tǒng)設計_第1頁
基于J2ME平臺的GPS導航系統(tǒng)設計_第2頁
基于J2ME平臺的GPS導航系統(tǒng)設計_第3頁
基于J2ME平臺的GPS導航系統(tǒng)設計_第4頁
基于J2ME平臺的GPS導航系統(tǒng)設計_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

摘要本文系統(tǒng)將在J2ME平臺下,利用J2ME的JSR179定位開發(fā)包與Google靜態(tài)地圖實現(xiàn)定位、興趣點添加、路線規(guī)劃以及離線地圖定位等功能。在用戶硬件支持J2ME和定位功能的情況下,用戶只要支付少量的GPRS流量費即可對用戶的位置進行定位、路線規(guī)劃等功能。另外為了節(jié)省用戶的GPRS流量,設計中也特定開發(fā)了離線地圖模式,在不聯(lián)網的情況下,用戶依然可以進行GPS定位。本篇論文將分為七章進行介紹。第一章緒論,介紹課題研究的背景、GPS導航發(fā)展現(xiàn)狀以及課題研究的主要內意和意義;第二章主要對本文系統(tǒng)用的相關技術進行介紹;第三、四、五章為本篇論文的重點,詳細闡述了本文系統(tǒng)的需求、詳細設計以及存在的問題等;第六章為GPS的發(fā)展前景展望;第七章則是本篇論文的總結。【關鍵詞】J2ME,MIDP,GPS,JSR179,Google靜態(tài)地圖AbstractThispapersystemwillbeinJ2MEflat,weusetheJSR179positioningandJ2MEsetupsstaticmaprealizepositioning,Googleaddedinterestpoints,routeplanningandofflinemaplocationetc.Function.InthemobilephoneuserstolocatefunctionalandJ2MEhardwaresupportforthecase,aslongastheuserspayasmallfeetotheGPRSflowcanbeuserlocationpositioning,routeplanningetc.Function.InordertosavetheuserofGPRSflow,designalsodevelopedofflinemapspecificmodel,notconnectedtotheInternetuserscanstillfortheGPSpositioning.Thispaperwillbedividedintosevenchapterwasintroduced.Thefirstchaptertheintroduction,thispaperintroducesthebackgroundofthesubjectresearch,mobileGPSnavigationdevelopmentpresentsituationandthemainresearchtopicinmeaningandsignificance;Thesecondchaptertothearticlewiththerelevanttechnologyofthesystemareintroduced;Chapter3,4,5inthekeyforthispaper,thispaperexpoundsthesystemdemand,andthedetaileddesignandtheexistingproblemandsoon;ThesixthchapterfortheGPSphoneprospect;Thispaperistheseventhrulessummary.【KeyWords】J2ME,MIDP,GPS,JSR179,GoogleStaticMap目錄摘要 IAbstract II目錄 III引言 V第一章緒論 11.1課題研究背景 11.2GPS導航發(fā)展現(xiàn)狀 11.3課題主要內容和意義 2第二章相關技術概覽 42.1基于位置的服務 42.1.1基于位置服務的應用范圍 42.1.2基于位置服務的定位方法 42.2移動地理信息系統(tǒng) 62.3J2ME簡介 72.3.1J2ME架構 72.3.2JVM(虛擬機) 82.3.3MIDP(移動信息設備簡表) 82.4JSR179開發(fā)包 92.5GoogleAPI簡介 102.6路徑規(guī)劃的技術選擇 102.6.1A算法實現(xiàn)最短路徑搜索 102.6.2GoogleDirectionsAPI提供服務 112.6.3路線規(guī)劃最終方法選擇 12第三章軟件需求分析 133.1用戶需求 133.2功能模塊劃分 133.2.1功能模塊圖 143.2.2功能要求 14第四章詳細設計與開發(fā) 164.1MIDlet開發(fā)流程介紹 164.2各功能模塊詳細設計 174.2.1界面切換類 174.2.2聯(lián)網地圖類 194.2.3離線地圖類 244.2.4各線程類 264.2.5實體類 274.2.6GoogleMaps類(引用開源代碼) 284.2.7興趣點添加類 294.2.8興趣點查詢、刪除、鎖定類 304.2.9指定地點范圍興趣點搜索類 324.2.10 路線規(guī)劃具體的實現(xiàn) 34第五章開發(fā)過程中問題及解決方案 405.1存在問題及解決 405.1.1Google靜態(tài)地圖訪問限制 405.1.2閃屏 405.1.3網絡延遲 415.1.4不同的屏幕尺寸問題 415.1.5模擬器到真機 415.2尚未解決的問題 41第六章GPS發(fā)展前景展望 43第七章結論 44致謝 45參考文獻 46引言是人們日常生活中使用非常頻繁的通信工具,雖然現(xiàn)在其費用比有線高,但是其隨時隨地的溝通優(yōu)勢,使人們擺脫了線路的束縛。目前在大部分地區(qū),幾乎人手一部或幾部,正是由于的高普及率,才使得無線移動商務迅速普及和發(fā)展。JAVA技術已經從一種最初用來編寫與硬件無關的嵌入式系統(tǒng)的編程語言變成了一種與廠商無關、與硬件無關的健壯的服務器端技術,它使整個企業(yè)界可以全面發(fā)掘以Web為核心的應用程序的巨大潛力。隨著JAVA技術的不斷更新與提高,特別是J2ME技術的出現(xiàn),使得應用程序越來越成為人們關注的焦點。J2ME技術目前最流行的就是在制作應用程序方面,JAVA的出現(xiàn)使得這一技術更有它的用武之地,發(fā)揮著靈活、輕便、快捷的作用。本文就將詳細的介紹J2ME這一技術在軟件制作方面的具體過程以及其重要的作用。第一章緒論本章主要介紹本文系統(tǒng)研究的背景、GPS導航發(fā)展現(xiàn)狀以及課題研究的主要內容和意義。1.1課題研究背景1967年加拿大測量學家R.T.Tomlinso提出并建立了世界上第一個實用的地理信息系統(tǒng),隨后從1973年美國國防部開始制定全球定位系統(tǒng)(GlobalPositioningSystem:GPS)計劃后,歷經了整整二十年的時間,才架構起二十四顆衛(wèi)星(二十一顆工作衛(wèi)星,三顆備用衛(wèi)星)的全球GPS網絡,能提供全方位的即時導航和定位能力。這二十四顆衛(wèi)星布置完之初,一直都是由軍方或國家量測單位在使用這套系統(tǒng),即使對民間開放,定位的精確度也相當有限,但隨著技術的發(fā)展和市場民情的需求,GPS開始向民間滲透,現(xiàn)在已在個人化、生活化、大眾化的市場取得了一席之地。隨著移動通信技術的發(fā)展,我國移動用戶數(shù)量也在快速增長。2021年我國的用戶約為5.40億,而根據(jù)中國三大移動運營商公布的數(shù)據(jù)顯示,截至2021年8月底,中國用戶總數(shù)卻已達9.2726億戶,上網用戶已超3億戶。與此同時人們對所賦予的功能也已經擴展到空間定位、分布式計算等高端領域。人們的社會活動等也越來越希望突破時間和空間的約束,這使得上GPS應用的必然性。目前中高端智能都已經裝載了GPS導航模塊,GPS導航領域的發(fā)展前途一片光明。1.2GPS導航發(fā)展現(xiàn)狀目前GPS導航模式主要有兩種,一種是本地模式,另一種則是客戶端/服務器模式。本地模式,即利用自身存儲能力將空間地圖保存到里,定位導航時只需要調用本地數(shù)據(jù)即可。但這種方式對的存儲空間和數(shù)據(jù)處理能力都有很大的要求,使得導航系統(tǒng)的分析功能和服務不能過于復雜,地圖數(shù)據(jù)也不能太大,導致GPS應用服務在一般上受到限制。當然本地模式的好處就是不產生GPRS流量費,可以說是絕對的免費了。未來存儲能力和數(shù)據(jù)處理能力的提升,這種方式GPS導航應該會得到廣泛應用??蛻舳?服務器模式則是將地圖信息的相關數(shù)據(jù)保存在服務器端,通過HTTP等協(xié)議請求服務器來獲取相關的地圖數(shù)據(jù)信息。這種模式使得客戶端的壓力大大減小,不必再存儲龐大的地圖數(shù)據(jù)信息,可以將的數(shù)據(jù)處理能力用來提升用戶體驗等更重要的方面。這樣一種模式對網絡訪問速度有一定要求以及會產生GPRS流量費,但以目前來看這已經不是問題,一般的網絡訪問速度都是能達到要求,GPRS流量費用戶也應該可以接受的,相當于發(fā)幾個短信罷了。目前的地圖數(shù)據(jù)信息描述和表現(xiàn)主要有兩種方式:柵格圖片和矢量圖片。柵格電子地圖是各比例尺的紙介質地形圖和各種專業(yè)使用的彩圖的數(shù)字化產品,就是每幅圖片經掃描、幾何糾正及色彩校正后,形成在內容、幾何精度和色彩上與地形圖保持一致的柵格數(shù)據(jù)文件。矢量地圖是每幅經掃描、幾何糾正的影像圖,是對一種或多種地圖要素進行矢量化形成的一種矢量化數(shù)據(jù)文件,是一種更為方便的放大、漫游、查詢、檢查、量測、疊加地圖。這兩種實現(xiàn)各有優(yōu)缺點,柵格電子地圖生成比較方便,圖像比較細致,和人們日常使用的地圖類似,容易被用戶接受。但是,柵格電子地圖數(shù)據(jù)量比較大,存儲不方便,放大過程中會產生失真,數(shù)據(jù)不是很準確,很難進行全局或者局部校正,更新起來也比較費事。矢量電子地圖生成相對費事,但是數(shù)據(jù)經過壓縮,結構緊湊,數(shù)據(jù)量小,冗余度低;有利于網絡和檢索分析;圖形顯示質量好,精度高;但數(shù)據(jù)結構復雜,多邊形疊加分析比較困難。矢量電子地圖可以隨意縮放,縮放過程中不會失真,可以進行全局或者局部校正,更新起來也很方便。Google靜態(tài)地圖API將地圖以圖片形式展現(xiàn),使用http接口進行圖片地圖的創(chuàng)建,無需使用java腳本實現(xiàn),適用于或定制客戶端系統(tǒng)的服務調用。開發(fā)者無需再考慮地圖數(shù)據(jù)信息的制作、傳輸、存儲等,開發(fā)者只需要通過HTTP請求,便可以獲取想要的地圖圖片。通過靜態(tài)地圖調用API,可以進一步增加電子地圖的應用范圍,同時也使獲得地圖的方法變得更為簡潔直接。本文系統(tǒng)也將采用此方法進行GPS導航系統(tǒng)的開發(fā)。1.3課題主要內容和意義目前市場上GPS導航較為成熟的系統(tǒng)都為本地模式的GPS導航系統(tǒng),將地圖數(shù)據(jù)信息下載到用戶的自身存儲空間,具有響應快速的優(yōu)點,但卻過于消耗的存儲空間,又處理能力有限,使得做出來的導航軟件不能夠處理過于復雜的分析和服務,應用十分受限。因此客戶端/服務器模式的研究與開發(fā)成了近年來的研究熱點。Google公司推出的Google靜態(tài)地圖API為開發(fā)者提供了通過HTTP請求便能得到想要地圖的服務。開發(fā)者只需要將定位的信息以及想獲取到地圖圖片的相關信息通過URL傳遞給Google服務器,便可以得到相應的地圖圖片。Google公司的這項服務完全符合客戶端/服務器模式,用戶不需要存儲地圖數(shù)據(jù)到自身存儲里,開發(fā)者也不需要過多設備軟件制作復雜的柵格地圖或矢量地圖,只需要掌握相關API的使用便可高效地獲取想要的地圖,完全可以滿足普通用戶的GPS導航需求。本文系統(tǒng)也將采用Google靜態(tài)地圖API,在滿足一般用戶基準上,利用J2ME的JSR179規(guī)范為大家?guī)硪豢頖PS導航軟件。該軟件主要實現(xiàn)了實時定位、興趣點相關操作、路線規(guī)劃等,也可以作為利用Google靜態(tài)地圖API進行GPS導航軟件開發(fā)的其他開發(fā)者參考。第二章相關技術概覽本章主要介紹本文系統(tǒng)用到的相關技術知識,包括位置服務、移動地理信息系統(tǒng)、J2ME平臺的簡介、J2ME的JSR179開發(fā)包介紹、GoogleAPI簡介以及做路線規(guī)劃時的技術介紹和選擇。2.1基于位置的服務基于位置的服務(LocationBasedService,LBS),它是通過電信移動運營商的無線電通訊網絡(如GSM網、CDMA網)或外部定位方式(如GPS)獲取移動終端用戶的位置信息(地理坐標,或大地坐標),在GIS(GeographicInformationSystem,地理信息系統(tǒng))平臺的支持下,為用戶提供相應服務的一種增值業(yè)務。2.1.1基于位置服務的應用范圍基于位置的服務(LocationBasedService,LBS)的應用非常廣泛,可以滲透到任何行業(yè),為任何群體提供服務。LBS的應用服務可以歸為以下幾類:(1)個人應用領域個人應用領域,LBS主要服務有:定位、路徑規(guī)劃、查找目標、旅游導航、基于定位的一些游戲等。最常用的是為游客提供定位服務,為初到某地的用戶提供路徑規(guī)劃,為用戶提供公交路線,為用戶提供興趣點的搜索,如酒店旅館等的位置。(2)公共服務領域LBS在公共服務領域中主要提供公共安全服務應用和智能交通管理及引導。公共安全服務主要涉及危機情況下當事人位置的準確掌握,為救護、消防、公安等緊急服務提供快速準確的定位指引,對保障人民生命產生安全起到了至關重要的作用。LBS在智能交通管理領域也對緩解城市的交通壓力起到了重要的作用,通過監(jiān)控道路段的路況和車流量讓駕車人員能即時了解路段交通狀況,從而有效地選擇行車路線。(2)商業(yè)應用領域在商業(yè)領域,LBS可以為用戶提供周邊商業(yè)信息,如附近餐館的近期促銷信息,旅館酒店等的打折優(yōu)惠信息。LBS為物流、安全、交通、城市規(guī)劃等傳統(tǒng)產生提供了精確的位置信息服務,在商業(yè)上的應用也越來越重要,發(fā)展前景很光明。2.1.2基于位置服務的定位方法目前,基于位置服務的方法主要有三種:基于移動終端衛(wèi)星定位系統(tǒng)的GPS定位方法、基于移動網絡的基站定位方法、無線輔助衛(wèi)星定位系統(tǒng)的A-GPS定位方法。GPS定位是借助全球定位系統(tǒng)的衛(wèi)星體系來實現(xiàn)的。該方法不需要連接移動網絡,而依靠自身的GPS定位模塊獲取衛(wèi)星信號,從而達到定位的效果。但在衛(wèi)星信號較差的地區(qū)性能和可能性都會急劇地下降,其初始化定位速度相對較慢。原理圖如下:圖2-1GPS定位原理圖基站定位依懶移動信號發(fā)射架和移動蜂窩基站的信號轉發(fā),移動測量不同基站下行導頻的TOA(TimeofArrival,到達時刻)或TDOA(TimeDifferenceofArrival,到達的時間差),根據(jù)該測量結果并結合基站的坐標,一般采用三角公式估計算法,就能夠計算出移動的位置。實際的位置估計算法需要考慮多基站(3個或3個以上)定位的情況,因此算法要復雜很多。一般而言,移動臺測量的基站數(shù)目越多,測量精度越高,定位性能改善越明顯。原理圖如下:圖2-2基站定位原理圖A-GPS輔助定位利用峰窩/無線網絡提供輔助信息來幫助衛(wèi)星系統(tǒng)作為參考點進行定位,并不對位置信息進行計算,而是將GPS的位置信息數(shù)據(jù)傳給移動通信網絡,由網絡的定位服務器進行位置計算,同時移動網絡按照GPS的參考網絡所產生的輔助數(shù)據(jù),如差分校正數(shù)據(jù)、衛(wèi)星運行狀態(tài)等傳遞給,并從數(shù)據(jù)庫中查出的近似位置和小區(qū)所在的位置信息傳給,并從數(shù)據(jù)庫中查出的近似位置和小區(qū)所在的位置信息傳給,這時可以很快捕捉到GPS信號,這樣首次捕獲時間將大大減小,一般僅需幾秒的時間。不需像GPS的首次捕獲時間可能要2-3分鐘時間,而精度也僅為幾米高于GPS的精度。原理圖如下:圖2-3A-GPS定位原理圖2.2移動地理信息系統(tǒng)移動地理信息系統(tǒng)(MobileGeospatialInformationSystem)的出現(xiàn)使人們在旅游中享受自主旅游的愿望得以實現(xiàn)。MobileGIS是GIS從靜態(tài)走向動態(tài)環(huán)境的重大發(fā)展,通過綜合運用GPS的精確定位技術、便攜移動設備(如PocketPC、)、無線Internet接入和GIS的空間信息處理能力,使得系統(tǒng)能夠實時地獲取、存儲、更新、處理、分析和顯示地理信息,在現(xiàn)在乃至未來將發(fā)揮出巨大的潛力。移動GIS(MobileGIS)是建立在移動計算環(huán)境、有限處理能力的移動終端條件下,提供移動中的、分布式的、隨遇性的移動地理信息服務的GIS,是一個集GIS、GPS、移動通信(GSM/GPRS/CD2MA)三大技術于一體的系統(tǒng)。它通過GIS完成空間數(shù)據(jù)管理和分析,GPS進行定位和跟蹤,利用PDA完成數(shù)據(jù)獲取功能,借助移動通信技術完成圖開、文字、聲音等數(shù)據(jù)的傳輸。與傳統(tǒng)的GIS相比,移動GIS的體系結構略微復雜些,因為它要求實時地將空間信息傳輸給服務器。移動GIS的體系結構主要由三部分組成:客戶端部分、服務器部分和數(shù)據(jù)源部分,分別承載在表現(xiàn)層、中間層和數(shù)據(jù)層。表現(xiàn)層是客戶端的承載層,直接與用戶打交道,是向用戶提供GIS服務的窗口。該層支持各種終端,包括PC機,為移動GIS提供更新支持。數(shù)據(jù)層是移動GIS各類數(shù)據(jù)的集散地,確保GIS功能實現(xiàn)的基礎和支撐。中間層是移動GIS的核心部分,系統(tǒng)的服務器都集中在該層,主要負責傳輸和處理空間數(shù)據(jù)信息,執(zhí)行移動GIS的功能等。包括Internet、WebServer、MapServer等組成部分。2.3J2ME簡介J2ME的設計初衷是運行在不同的嵌入式系統(tǒng)和消費電子設備上。為了適應不同的設備,J2ME首先對不同的設備進行了抽象。J2ME在設計規(guī)范時,遵循“對于各種不同的設備設定一個單一的開發(fā)系統(tǒng)是沒有意義的事”這一基本原則。因此,J2ME先將所有的嵌入式設備大體上分為兩種:一種是運算能力有限且電力供應也有限的嵌入式設備(如PDA和);另一種是運算能力相對較佳并在電力供應上相對比較充足的嵌入式裝置(如冷氣機、電冰箱和機頂盒)。Java引入了一個Configuration的概念,把上述運算功能有限、電力有限的嵌入式設備定義在CLDC規(guī)范中,而將另一種裝置定義在CDC(ConnectedDeviceConfiguration,連接設備配置)規(guī)范中。也就是說,J2ME利用Configuration的概念把所有的嵌入式設備區(qū)分成兩種抽象的類別。Configuration可以當作是J2ME對于兩種類型嵌入式設備的規(guī)范。在這些規(guī)范中,定義了這些裝置至少要符合的運算能力、供電能力和內存大等規(guī)范,同時也定義了一組在這些裝置上執(zhí)行的Java程序所能用的基本類庫。在這些規(guī)范中所定義的基本類庫為Java核心類庫的子集以及該類別設備特性相符的擴充類庫。就CLDC規(guī)范而言,能支持的核心類庫有java.lang.*、java.io.*和java.util.*,能支持的擴充類庫是java.microedition.io.*。區(qū)分出兩種主要的Configuration后,J2ME接著定義了框架(Profile)。Profile是架構在Configuration之上的規(guī)范。之所以有Profile的概念,是為了要更明確地區(qū)分出各種嵌入式設備上Java程序該如何開發(fā)、具有哪些功能。因此,Profile中定義了與特定嵌入式設備非常相關的擴充類庫。當然,這些擴充類庫也是建立在底層Configuration所定義的核心類庫基礎之上的。2.3.1J2ME架構J2ME架構的模塊化設計使應用程序可以靈活適應小型計算設備的限制。J2ME架構沒有替代小型計算設備的操作系統(tǒng)。相反,J2ME架構由位于原生操作系統(tǒng)之上的多層軟件組成,這些軟件共同稱為“連接有限設備配置”(ConnectedLimitedDeviceConfiguration,CLDC)。安裝在操作系統(tǒng)之上的CLDC形成了小型計算設備的運行時環(huán)境。J2ME架構由3個軟件層組成:第一層是包括在內的配置層,這個層次直接與原生操作系統(tǒng)進行交互。配置層還處理profile和JVM之間的交互。第二層是profile層,由小型計算設備的應用程序編程接口(API)的最小集合組成。第三層是MobileInformationDeviceProfile(MIDP)層。MIDP層由用戶網絡連接、永久存儲和用戶界面的javaAPI組成。它還能夠訪問CLDC庫和MIDP庫。2.3.2JVM(虛擬機)JVM是專門為微型電子設備與資源受限設備如:、尋呼機、移動互聯(lián)網設備、家用微電子設備等設計的一種輕便、緊湊的JAVA虛擬機。JVM可以為微型電子設備提供一個完整的JAVA運行環(huán)境,除了一些微型設備所必需的適當?shù)墓δ苡兴煌猓怯蒍AVA虛擬機規(guī)范定義的真實的JAVA虛擬機。它是專門為那些受資源限制,只有幾百K字節(jié)內存的微型設備設計的。JVM起初是由SUN微系統(tǒng)實驗室為一個名叫“Spotless”的項目創(chuàng)建的。它的目標是為資源受限制的Palm(是目前較為流行的掌上電腦操作系統(tǒng))可連接的電子設備,實現(xiàn)一個java虛擬機?;谏鲜鲈颍琂VM具有以下幾個特點:(1)小,僅具有40KB至80KB的靜態(tài)內存。(2)輕便、精巧。(3)模塊化并可定制。(4)盡可能完全緊湊的完成設計目的。2.3.3MIDP(移動信息設備簡表)MIDP是專門為互聯(lián)受限設備配置設計的,它為移動設備提供了一套API集合,MIDP包含用戶界面類、持久存儲功能與網絡功能。它同時也包括一個供用戶下載新應用到終端設備的標準運行環(huán)境。運行在MIDP下的小應用程序叫做MIDlet移動設備小應用程序,它與Applet類似。MIDP要求平臺設備提供一個機制用來存儲簡單的數(shù)據(jù)記錄,通過正常的平臺事件,比如重新啟動和電池更新維護系統(tǒng)的完整性。MIDP是以SUN、Motorola、Nokia為中心的MIDPEG組織(MobileInformationProfileExpertGroup)所制訂出來使用在CLDC上的Profile,是以能使用在移動、雙向對講機、可無線通信的PDA(個人數(shù)字助理)上面為前提設計出來的。另外,像日本國內的NTTDoCoMo、J-PHONE、KDDI等電信商與移動制造商也都曾參與了MIDPEG。MIDP是在CLDC 的功能上附加提供適合目標設備用的GUI與事件處理功能。這樣一來,就可以當成MIDP應用程序(MIDlet)來運行了。MIDP由于是由多個企業(yè)所共同策劃出來的開放標準,因此主要的移動制造商也會制造出大量的對應機種。也就是說,以MIDP為基準所制作出來的應用程序,也將可以在流通于市面上的移動上執(zhí)行。另外,MIDP不僅限于移動,也已經被移植到PDAPalmOS上,而以MIDPforPalmOS的名字來稱呼(與KJava是不同的)。在不使用各電信商的擴展API的時候,制作給移動用的MIDlet也將可以使用在PalmOS上面。由于未來MIDP也將會搭載到不同設備之上,也由于其兼容性高,只要寫過一次程序,就可以在其他移動或是移動以外的設備上執(zhí)行;而這也就是它最大的好處。2.4JSR179開發(fā)包Java?2Platform,MicroEdition(J2ME?)(JSR-179參考/aboutJava/communityprocess/final/jsr179/)的定位API在S60和Series40第三版中都提到,這是一個可以在大多數(shù)J2ME中使用的可選包。API需要的最低平臺為ConnectedLimitedDeviceConfiguration(CLDC)1.1,因為API需要數(shù)學浮點運算的支持。S60和Series40同樣支持MMAPI,詳情請參考LocationAPIforJ2ME?定位API的目的就是開發(fā)具有定位功能的設備的應用程序。根據(jù)設備的自然情況,API提供利用設備的方法。另外,定位API是很多易用的類和接口的壓縮包,其在開發(fā)移動應用程序的時候具有以下三個特點:(1)獲取設備的位置信息(2)創(chuàng)建、編輯、存儲、銷毀陸標(3)獲取設備的定位定位API首先需要連接一個定位方法,利用定位方法產生定位對象,每種定位方法都不一樣。比如,各種方法所需要的時間都不一樣,每種方法的精確度也不一樣。最常用的方法有基于設備(比如GPS,這種方法基于衛(wèi)星全球定位系統(tǒng))、基于網絡(比如蜂窩,這種方法中網絡決定了位置),還有混合方法(比如A-GPS方法,這種方法利用網絡信息來加速定位)。下面的圖表顯示了APIMIDLet使用GPS定位方法來定位的結構。對MIDLet在SDK環(huán)境中檢測后,還必須在真實的環(huán)境中進行檢測,來確保正確運行。真實的環(huán)境意味著在支持移動定位的設備中使用API定位。圖2-4定位API使用GPS定位模型圖2.5GoogleAPI簡介本文軟件中只用到兩個GoogleAPI,分別是GoogleStaticMapsAPI和GoogleDirectionsAPI。GoogleStaticMapsAPI,通過網址返回圖像(GIF、PNG或JPEG)來響應HTTP請求。您可以為每個請求指定地圖的位置、圖像的大小、縮放的級別、地圖的類型以及可選擇標記在地圖各個位置上的放置。些外,您還可以使用字母字符為您的標記制作標簽,以便在“關鍵字”中引用這些標記。GoogleDirectionsAPI,是一種使用HTTP請求計算多個位置間路線的服務。路線可以以文本字符串(如“Chicago,IL”或“Darwin,NSW,Australia”)或緯度/經度坐標的形式指定起點、目的地和路標。GoogleDirectionsAPI可以使用一系列路標傳回多段路線。此服務通常適用于計算路線的靜態(tài)(事先已知)地址,以便將應用程序內容放置在地圖上;但此服務不適用于對用戶輸入的內容進行實時響應。有關動態(tài)路線計算(例如,在用戶界面元素中),請參見JavaScriptAPIV3DirectionsService文檔。計算路線是一種耗時、耗資源的任務。如果可能,系統(tǒng)會使用此處介紹的服務提前計算已知地址,并將結果存儲在您自己設計的臨時緩存中。2.6路徑規(guī)劃的技術選擇路徑規(guī)劃在導航系統(tǒng)軟件中是必不可少的一部分,主要用于為用戶提供起始位置到目的地的最優(yōu)路徑或最短路徑。下面介紹路徑規(guī)劃中的兩種方法,以及本文最終選擇的方法。2.6.1A算法實現(xiàn)最短路徑搜索A*搜尋算法,俗稱A星算法,作為啟發(fā)式搜索算法中的一種,這是一種在圖形平面上,有多個節(jié)點的路徑,求出最低通過成本的算法。常用于游戲中的NPC的移動計算,或線上游戲的BOT的移動計算上。該算法像Dijkstra算法一樣,可以找到一條最短路徑;也像BFS一樣,進行啟發(fā)式的搜索。A*算法最為核心的部分,就在于它的一個估值函數(shù)的設計上:f(n)=g(n)+h(n);其中f(n)是每個可能試探點的估值,它有兩部分組成:一部分,為g(n),它表示從起始搜索點到當前點的代價(通常用某結點在搜索樹中的深度來表示)。另一部分,即h(n),它表示啟發(fā)式搜索中最為重要的一部分,即當前結點到目標結點的估值,h(n)設計的好壞,直接影響著具有此種啟發(fā)式函數(shù)的啟發(fā)式算法的是否能稱為A*算法。一種具有f(n)=g(n)+h(n)策略的啟發(fā)式算法能成為A*算法的充分條件是:1、搜索樹上存在著從起始點到終點的最優(yōu)路徑。2、問題域是有限的。3、所有結點的子結點的搜索代價值>0。4、h(n)=<h*(n)(h*(n)為實際問題的代價值)。當此四個條件都滿足時,一個具有f(n)=g(n)+h(n)策略的啟發(fā)式算法能成為A*算法,并一定能找到最優(yōu)解。對于一個搜索問題,顯然,條件1,2,3都是很容易滿足的,而條件4:h(n)<=h*(n)是需要精心設計的,由于h*(n)顯然是無法知道的,所以,一個滿足條件4的啟發(fā)策略h(n)就來的難能可貴了。不過,對于圖的最優(yōu)路徑搜索和八數(shù)碼問題,有些相關策略h(n)不僅很好理解,而且已經在理論上證明是滿足條件4的,從而為這個算法的推廣起到了決定性的作用。并且h(n)距離h*(n)的呈度不能過大,否則h(n)就沒有過強的區(qū)分能力,算法效率并不會很高。對一個好的h(n)的評價是:h(n)在h*(n)的下界之下,并且盡量接近h*(n)。2.6.2GoogleDirectionsAPI提供服務GoogleDirectionsAPI主要服務就是為了計算路線??蛻舳税l(fā)送路線請求,服務器根據(jù)請求,以XML或JSON形式輸出給客戶端。GoogleDirectionsAPI請求是以下形式的HTTP網址:/maps/api/directions/output?parameter,其中,output可能是以下任何一個值:(1)json(建議)表示以JavaScript對象表示法(JSON)的形式輸出(2)xml表示以XML的形式輸出而parameter則為請求的參數(shù),有些參數(shù)必填,而有些參數(shù)則是可選參數(shù)。根據(jù)網址的標準,所有參數(shù)均使用字符&分隔。下面枚舉了這些參數(shù)及其可能的值。GoogleDirectionsAPI使用以下網址參數(shù)定義路線請求:(1)origin(必填)-希望根據(jù)其計算路線的地址或文本緯度/經度值。(2)destination(必填)-希望根據(jù)其計算路線的地址或文本緯度/經度值。(3)mode(可選,默認為driving)-指定計算路線時使用的出行方式。在出行方式中指定有效的值。(4)waypoints(可選)指定一組路標。路標通過經過指定的位置可以改變路線。可以以緯度/經度坐標或將進行地址解析的地址的形式指定路標。(5)alternatives(可選)設置為true時,可以指定路線服務可以在響應中提供多條備選路線。請注意,提供備選路線可能增加服務器的響應時間。(6)avoid(可選)指示計算的路線應避開指定的地圖項。目前,此參數(shù)支持以下兩個參數(shù):tolls指示計算的路線應避開收費公路/橋梁。highways指示計算的路線應避開高速公路。(7)language(可選)-傳回結果時所使用的語言。請參見支持的區(qū)域語言列表。請注意,我們會經常更新支持的語言,因此該列表可能并不詳盡。如果未提供language,那么,路線服務將會盡可能地嘗試使用瀏覽器的本機語言。您還可以通過使用的本地化域明確設置結果偏向。(8)sensor(必填)-指示路線請求是否來自裝有位置傳感器的設備。該值必須為true或false。2.6.3路線規(guī)劃最終方法選擇啟發(fā)式A算法可以高效快捷地尋找出起點到終點的最短路徑,用于空間固定的局部地區(qū)地圖的路徑搜索是個不錯的選擇。本文系統(tǒng)開始也打算用A算法來實現(xiàn)路徑規(guī)劃,但通過實踐發(fā)現(xiàn)用A算法來實現(xiàn),有三大問題:第一、只能對空間固定的局部地區(qū)實現(xiàn)路線規(guī)劃,這樣便限制了軟件的使用范圍;第二、地圖切割道路網標記工作量太大,切割成的圖片塊大小也直接影響路線規(guī)劃的最短路徑獲??;第三、顯示的最短路徑存在違背交通規(guī)則的情況。而GoogleDirectionsAPI可以選擇不在道路上的點,而根據(jù)該點最近道路上的點來進行路線規(guī)劃,可以使選擇起點和終點時不一定要在道路上;另外使用GoogleDirectionsAPI,我們便不再需要對地圖進行切割并標記道路網了,使用GoogleDirectionsAPI可以以XML的形式將起點到終點的最優(yōu)路徑上的所有拐點信息發(fā)送給客戶端,客戶端只需要解析XML文件即可,而解析工作主要用kxml進行解析。第三章軟件需求分析本章主要介紹本文系統(tǒng)的需求,包括用戶的具體需求介紹、根據(jù)需求而劃分的具體功能模塊的介紹。3.1用戶需求該軟件將是一款面向3G、支持OGC標準的移動地圖軟件,預計最終實現(xiàn)以下一些功能:(1)地圖瀏覽:支持地圖的放大、縮小、平移;(2)地圖查詢:支持屬性查詢、空間查詢以及屬性與空間的混合查詢;(3)POS(PointsofInterest,興趣點)的查詢、定位和添加。即在某個區(qū)域范圍內,搜索并定位用戶列出選擇條件的POS,查詢到適合的POS后,必須把用戶當前的關注點設置為該POS所在的區(qū)域。在瀏覽地圖的過程中,用戶會記錄他們感興趣的一些點,例如,餐館、旅游景點等。以后用戶就可以通過這些記錄直接定位到這些點所在的地圖位置。(4)線路規(guī)劃和引導:規(guī)劃用戶從當前為當前位置到目的地的路線,以及經過該路線過程中的引導。3.2功能模塊劃分基于需求,我們設計了相關的功能去實現(xiàn)我們的需求,下面便是相關功能模塊的介紹及實現(xiàn)。3.2.1功能模塊圖GPS導航系統(tǒng)GPS導航系統(tǒng)在線地圖模塊離線地圖模塊地圖自由瀏覽實時定位興趣點添加興趣點查詢、刪除、鎖定路線規(guī)劃(最短路徑搜索)興趣點的顯示、靠近動畫地圖放大、縮小指定地點指定范圍內興趣點搜索圖3-1塊能模塊圖3.2.2功能要求系統(tǒng)主要實現(xiàn)功能及描述:(1)實時定位:能夠根據(jù)用戶當前位置,實時更新用戶當前位置在地圖上的顯示。(2)地圖自由瀏覽:可以在聯(lián)網或離線狀態(tài)下自由瀏覽地圖,聯(lián)網狀態(tài)可以瀏覽任意地點的地圖,但離線狀態(tài)下只能瀏覽當前獲取到的局部地區(qū)的地圖。(3)地圖放大、縮?。褐С致?lián)網狀態(tài)下,對地圖進行放大、縮小(4)興趣點添加:可以將指定地點(需給出確定經緯度)、當前位置添加為興趣點(即添加到LandmarkStore里)。(5)興趣點查詢、刪除、鎖定:能夠查詢用戶添加的興趣點,并能對其刪除、鎖定(即將該興趣點顯示在屏幕中心)。(6)路徑規(guī)劃:用戶可以選擇地圖上兩點(需在道路上)后,能夠將兩點間規(guī)劃好的路徑顯示在地圖上。(7)興趣點的顯示與靠近動畫:能夠根據(jù)興趣點坐標將興趣點顯示在地圖上,用戶靠近某興趣點時,在該興趣點上顯示靠近動畫。(8)指定地點范圍內興趣點的搜索:能夠對指定地點或當前位置的指定范圍內興趣點進行搜索。第四章詳細設計與開發(fā)本章主要介紹本文系統(tǒng)的詳細設計與開發(fā),包括一般MIDlet程序開發(fā)流程介紹、本文系統(tǒng)各功能模塊的詳細設計及功能模塊的相關流程邏輯介紹。4.1MIDlet開發(fā)流程介紹一個MIDlet程序的開發(fā)流程可分為這樣幾個階段:(1)代碼的編寫,產生.java文件(2)代碼的編譯,產生.class文件(3)預審核class文件(4)模擬器上,發(fā)生錯誤重新編寫代碼下圖是MIDlet開發(fā)的完整流程:EditEditCompileJavafilesClassesfilesPreverifyPreverifiedclassfilesRunorDebugonEmulatedDeviceApplicationResource(Text,Image)EmulatedDeviceChangeEmulatedDeviceFixErrors圖4-1MIDlet開發(fā)流程4.2各功能模塊詳細設計功能模塊劃分好,進行詳細設計。程序開始,實現(xiàn)位置的鎖定與監(jiān)聽,根據(jù)用戶位置,利用GoogleStaticMapsAPI獲取地圖,再繪制地圖、興趣點、用戶圖標等相關信息,此后用戶便可以在界面上進行地圖模式的切換、自由瀏覽、添加刪除查詢鎖定興趣點、搜索興趣點、路線規(guī)劃等操作。以下為程序系統(tǒng)結構圖:開始程序開始程序聯(lián)網地圖地圖模式轉換自由瀏覽(聯(lián)網(放大、縮?。?、平移)路線規(guī)劃興趣點添加興趣點查詢、刪除、鎖定指定地點指定范圍內興趣點搜索離線地圖圖4-2系統(tǒng)結構圖4.2.1界面切換類界面切換類(MyGPSMidlet.java)也是程序的Midlet類,是每個J2ME程序所必需的,本文將用它來完成各種界面的切換功能。界面切換類相當于一個大總管,管理著所有其他的界面,負責切換屏幕顯示的界面,用于各界面之間的切換。1.設計:分為引用和方法兩塊分別介紹。①支持有所有界面類的引用:(1)聯(lián)網地圖類MapCanvas:mc。(2)離線地圖類OffLineMapCanvas:offLinemc。(3)添加興趣點界面類AddLandMarkForm:addLandMarkForm。(4)查詢、刪除、鎖定興趣點類QueryLandMarkForm:queryLandMarkForm。(5)指定地點范圍內興趣點搜索類ScopeQueryLandMarkForm:scopeQueryLandMarkForm。(6)路線規(guī)劃類PlanLandThreadForm:planLandThreadForm。②重要方法介紹:(1)publicvoidchangForm(Stringform):根據(jù)不同的form參數(shù)將對應的界面設為當前界面,是界面切換類最重要的方法。其代碼為下:if(form.equals("offLinemc")){//切換到離線地圖 this.setMc(null); this.display.setCurrent(offLinemc); } elseif(form.equals("mc")){//切換到聯(lián)網地圖 this.setOffLinemc(null); try{ mc=newMapCanvas(this); }catch(Exceptione){ e.printStackTrace(); } this.display.setCurrent(mc); } elseif(form.equals("addLandMarkForm")){//切換到興趣點添加界面 this.display.setCurrent(addLandMarkForm); } elseif(form.equals("queryLandMarkForm")){//切換到興趣點查詢、刪除、鎖定界面 this.display.setCurrent(queryLandMarkForm); } elseif(form.equals("scopeQueryLandMarkForm")){//切換到指定地點指定范圍興趣點搜索界面 this.display.setCurrent(scopeQueryLandMarkForm); } elseif(form.equals("planLandThreadForm")){//切換到路線規(guī)劃界面 this.display.setCurrent(planLandThreadForm); }2.流程邏輯:界面切換類(MyGPSMidlet),通過調用ChangeForm方法,即可將切換到聯(lián)網地圖(MapCanvas)、離線地圖(OffLineMapCanvas)、興趣點查詢刪除鎖定(QueryLandMarkForm)、指定地點范圍興趣點搜索(ScopeQueryLandMarkForm)以及路線規(guī)劃(PlanLandThreadForm)相關界面。以下為具體流程邏輯圖:MyGPSMidletMyGPSMidlet界面切換類changForm方法MapCanvas聯(lián)網地圖OffLineMapCanvas離線地圖AddLandMarkForm興趣點添加ScopeQueryLandMarkForm指定地點范圍興趣點搜索QueryLandMarkForm興趣點查詢刪除鎖定PlanLandThreadForm路線規(guī)劃圖4-3界面切換類流程邏輯4.2.2聯(lián)網地圖類聯(lián)網地圖類(MapCanvas.java)程序運行的主要界面,完成了地圖上各元素的獲取、繪制等,實現(xiàn)了用戶位置的實時定位、對用戶位置與興趣點(路標)相對位置的監(jiān)聽、通過Command命令實現(xiàn)相應操作及界面的切換等。1.設計:分為成員變量和方法兩塊分別介紹。①主要成員變量介紹:(1)界面切換類MyGPSMidlet(parent):持有界面切換類引用,以便Command命令能夠切換到對應的界面。(2)GoogleMapAPI操作類GoogleMaps(gMap):GoogleMaps類封裝了Google靜態(tài)地圖獲取、路線規(guī)劃相關方法,有該類對象的一個引用,方便地圖的獲取及路線規(guī)劃。(3)privateStringmaptype:用于改變獲取地圖的類型,地圖類型有roadmap標準、mobile移動設備、statellite衛(wèi)星圖像、hybrid混合圖像、terrain自然地形。(4)privatedoublelat,lon:記錄當前人物位置的緯度和經度,人物位置的不斷變化,會被LocationListener事件監(jiān)聽到,這樣就可以實時地更新人物的經緯度,從而進行實時定位。(5)Vectorm_cmd:每次用戶位置變化時,向m_cmd里添加一個元素,讓聯(lián)網地圖類實現(xiàn)Runnable接口,在其run方法里通過檢測m_cmd里元素的個數(shù)來判斷是否需要更新地圖,更新完地圖后刪除m_cmd里面的元素。(6)privateLocationProiderlp:lp用來提供定位服務,聯(lián)網地圖類初始化時,需要初始化lp,并為其添加位置監(jiān)聽器,這里我們讓聯(lián)網地圖類實現(xiàn)LocationListener接口,這樣便可以在用戶位置發(fā)生變化時,直接在界面上重繪用戶在地圖上的位置。lp初始化代碼如下: //初始化位置供應商 Criteriac=newCriteria(); c.setHorizontalAccuracy(500); c.setVerticalAccuracy(500); c.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW); try{ lp=LocationProvider.getInstance(c); }catch(LocationExceptione){ parent.getDisplay().setCurrent(newForm("lp錯誤")); } //添加位置監(jiān)聽器 lp.setLocationListener(this,-1,-1,-1);(7)privateVectorlandMarks:landMarks用于盛放路標庫里的所有興趣點(路標),以便在地圖上畫出用戶添加的所有興趣點。初始化聯(lián)網地圖時,需要初始化landMarks,并且要為每個興趣點添加靠近監(jiān)聽事件,具體代碼封裝在publicvoidaddProximity()里。代碼如下: //遍歷到每一個興趣點,為其添加靠近事件監(jiān)聽器 for(inti=0;i<landMarks.size();i++){ MyLandMarklandMark=(MyLandMark)landMarks.elementAt(i); try{ lp.addProximityListener(landMark,landMark.getCoordinates(),R); }catch(LocationExceptione){ e.printStackTrace(); } }(8)privateLandmarklastLandMark:記錄最新發(fā)生靠近事件的興趣點(路標),用來提示用戶正接近哪個興趣點。(9)privateVectorvector:vector盛放通過GoogleDirectionsAPI規(guī)劃好的路徑上的拐點。通過在自由瀏覽狀態(tài)下或路線規(guī)劃界面,獲取路徑規(guī)劃的起點和終點,然后將起點和終點經緯度通過HTTP協(xié)議發(fā)送給GoogleDirectionsAPI,將得到規(guī)劃好路徑上所有拐點經緯度。(10)privateCoordinatestopLeft,downRight:當前地圖的左上角、右下角經緯度坐標。有了左上角、右下角經緯度坐標,便可以確定地圖上所有元素,如興趣點、用戶、靠近動畫、規(guī)劃好的路線,與地圖的相對位置關系,這樣便可輕松地將它們繪制到地圖上。(11)privatedoublelatTemp,lonTemp:當前一半地圖所跨的緯度、經度,用于確定地圖上元素與地圖的相對位置關系。(12)privateCoordinatesbeginCoordinates,endCoordinates:用于路徑規(guī)劃的起點和終點。(13)privateImageoffScreen和publicGraphicsoffg:這兩個元素是雙緩沖的離屏畫布和畫筆,用于消除界面上因元素過多而產生閃屏。②主要方法介紹:(1)publicvoiddrawOffScreen(){}:用來將地圖和地圖上所有元素繪制到離屏畫布上,將所有元素繪制完后,再將離屏畫布繪制到屏幕上便可消除閃爍。(2)protectedsynchronizedvoidgetURL(){}、publicvoidrun(){}:getURL()方法只向m_cmd里添加一個元素并通知當前程序中處于等待狀態(tài)的線程運行;run()是實現(xiàn)Runnable接口必需實現(xiàn)的方法,我們用它來通過判斷m_cmd里是否有元素,決定是否要進行地圖更新。有則進行地圖更新,并且在執(zhí)行更新地圖后刪除m_cmd里面的元素;沒有則線程處于等待狀態(tài)。(3)publicvoidlocationUpdated(LocationProviderlp,Locationlc):該方法是實現(xiàn)LocationListener接口必需實現(xiàn)的方法,用于監(jiān)聽到用戶位置變化所執(zhí)行的操作。用它來更新用戶當前經緯度、地圖左上角和右下角經緯度、地圖當前所跨經緯度。其具體代碼如下: //保存舊坐標 oldlon=lon; oldlat=lat; //獲當前坐標,更新地圖 Coordinatescoordinates=lc.getQualifiedCoordinates(); lat=coordinates.getLatitude(); lon=coordinates.getLongitude(); //位置變化,跟根地圖所在空間以及當前坐標計算地圖左上角、右下角坐標 if(zoom<16){ doublelatT=latTemp; doublelonT=lonTemp; for(inti=0;i<16-zoom;i++){ latT=latT*2; lonT=lonT*2; } this.topLeft=newCoordinates(lat+latT,lon-lonT,310); this.downRight=newCoordinates(lat-latT,lon+lonT,310); } elseif(zoom==16){ this.topLeft=newCoordinates(lat+latTemp,lon-lonTemp,310); this.downRight=newCoordinates(lat-latTemp,lon+lonTemp,310); } else{ doublelatT=latTemp; doublelonT=lonTemp; for(inti=0;i<zoom-16;i++){ latT=latT/2; lonT=lonT/2; } this.topLeft=newCoordinates(lat+latT,lon-lonT,310); this.downRight=newCoordinates(lat-latT,lon+lonT,310); } //更新完當前坐標,以及左上角、右下角坐標后重新獲取地圖 getURL();2.流程邏輯:聯(lián)網地圖類流程邏輯較為復雜,和離線地圖類相當于整個程序的中樞系統(tǒng),切換到聯(lián)網地圖界面時,會初始化相關變量、起動各監(jiān)聽器并獲取地圖繪制地圖,此后便可通過界面切換類切換到“離線地圖界面”、“添加興趣點界面”、“查詢刪除鎖定興趣點界面”、“指定地點范圍興趣點搜索界面”、“路線規(guī)劃界面”;用戶坐標改變時,也會更新用戶當前位置、地圖左上角和右下角坐標并重新繪制地圖,從而實現(xiàn)實時定位。用戶也可以切換地圖顯示的模式,以及通過按鍵事件來實現(xiàn)地圖的平移、放大、縮小、路線規(guī)劃等相關操作。具體流程邏輯圖如4-4所示:聯(lián)網地圖界面聯(lián)網地圖界面執(zhí)行構造方法,初始化變量,啟動各監(jiān)聽器,繪制地圖位置變化更新用戶當前位置、地圖左上右下坐標,重新獲取地圖靠近事件發(fā)生繪制靠近動畫用戶可以左右平移、放大、縮小地圖自由瀏覽‘OK’or’5’選擇起點、終點進行路線規(guī)劃切換模式改變地圖模式指定地點范圍興趣點搜索切換到“指定地點指定范圍內興趣點搜索”界面切換到“興趣點添加”界面添加興趣點切換到“查詢、刪除、鎖定興趣點”界面查詢、刪除、鎖定興趣點獲取離線地圖,切換到“離線地圖”界面切換到離線模式切換到“路線規(guī)劃”界面路線規(guī)劃圖4-4聯(lián)網地圖類流程邏輯3.界面圖:本文系統(tǒng)在蘇州經貿職業(yè)技術學院內測試得到的聯(lián)網地圖界面圖如下圖4-5、圖4-6,界面上部顯示用戶當前經緯度信息,界面下部顯示用戶與最近靠近興趣點之間的距離。圖4-5聯(lián)網地圖界面圖4-6聯(lián)網地圖界面菜單4.2.3離線地圖類實現(xiàn)了地圖的離線定位,功能基本上和聯(lián)網相似通過從聯(lián)網狀態(tài)獲得的一張地圖,以及地圖左上角、右下角坐標來對用戶當前位置進行定位。離線與聯(lián)網主要的區(qū)別就是地圖,離線的地圖只有一張,是用戶聯(lián)網時根據(jù)用戶當前位置獲取的,獲取的地圖的同時,根據(jù)地圖的長、寬、空間來推算出地圖左上角和右下角的坐標,那么興趣點、路線規(guī)劃的最短路徑等便可根據(jù)這兩坐標而畫出在離線地圖上的相對位置。因為離線地圖類與聯(lián)網地圖類大部分功能相同,所以相同的部分,下面就不再做介紹。1.設計①主要成員變量介紹:(1)privateMyGPSMidletparent:界面切換類,用于切換到聯(lián)網或其它界面。(2)CoordinatesLeftTop,RightBottom:地圖的左上角、右下角經緯坐標,這兩個坐標是其它坐標的參考對象,興趣點、用戶當前坐標等。(3)privateImagemap:離線地圖。(4)privateVisitorvisitor:當前用戶。(5)privateVectormyLandMarks:用于盛放所有的興趣點。(6)privateImageimage:靠近動畫的一幀圖片,用一個線程來不斷變更圖片的幀。(7)LocationProviderlp:位置服務商,位置更新、靠近事件的監(jiān)聽必須的。(8)privatestaticintSTATE=0:自由瀏覽狀態(tài)下,記錄當前操作的狀態(tài),0表示未選中起始點和終點,1表示選中的起始點,2表示選中了終點。(9)privatestaticintISFREE=0;記錄當前是否為自由瀏覽狀態(tài),0表示非自由瀏覽,1表示自由瀏覽。(10)privatedoublelat,lon:記錄當前用戶的緯度和經度,這兩個變量在非自由瀏覽狀態(tài)下沒有什么作用,但自由瀏覽時則通過按鍵事件改變它們,相當于當前用戶的位置發(fā)生變生,從而達到自由瀏覽的效果。(11)privateCoordinatesbeginCoordinates,endCoordinates:路線規(guī)劃起點和終點。②主要方法介紹:(1)publicvoidlocationUpdated(LocationProviderlp,finalLocationlc):實現(xiàn)了LocationListener接口必須實現(xiàn)的方法,用于監(jiān)聽到用戶位置變化所執(zhí)行的操作。這里我們用來更新用戶當前坐標以及判斷用戶當前位置是否超越當前地圖所能表示的范圍,如果超出則重新獲取地圖。2.流程邏輯:離線地圖類流程邏輯如圖4-7所示:離線界面離線界面執(zhí)行構造方法,初始化變量,啟動各監(jiān)聽器,繪制地圖位置變化更新用戶當前位置,重繪地圖靠近事件發(fā)生繪制靠近動畫用戶可以左右平移地圖自由瀏覽‘OK’or’5’選擇起點、終點進行路線規(guī)劃范圍特定興趣點搜索切換到“指定地點指定范圍內興趣點搜索”界面切換到“興趣點添加”界面添加興趣點切換到“查詢、刪除、鎖定興趣點”界面查詢、刪除、鎖定興趣點連接網絡,切換到“聯(lián)網地圖”界面聯(lián)網地圖路線規(guī)劃切換到“查詢、刪除、鎖定興趣點”界面圖4-7離線地圖類流程邏輯4.2.4各線程類對興趣點添加靠近事件、不停改變靠近動畫的幀。啟動聯(lián)網地圖或離線地圖時,同時啟動興趣點靠近事件添加線程、改變靠近動畫幀的線程,這樣便可不斷地對發(fā)生過靠近事件的興趣點再次添加靠近監(jiān)聽事件(因為路標發(fā)生過靠近事件后,靠近監(jiān)聽事件將不再有效)、對靠近動畫的幀進行改變。1.設計:線程類主要有四個。(1)AddProximityThread類:用于對聯(lián)網地圖的興趣點進行再次添加靠近事件的監(jiān)聽器,其run方法代碼如下: //獲取當前坐標 nowCoordinates=lp.getLocation(60).getQualifiedCoordinates(); //依次遍歷興趣點,對遠離的興趣點重新添加監(jiān)聽 for(inti=0;i<myLandMarks.size();i++){ MyLandMarkmyLandMark=(MyLandMark)myLandMarks.elementAt(i); LandmarklandMark=myLandMark.getLandMark(); Coordinatestemp=landMark.getQualifiedCoordinates(); floatdistance=nowCoordinates.distance(temp); //興趣點遠離,將其狀態(tài)設為false,并重新添加監(jiān)聽 if(distance>R&&(myLandMark.isActive()==true)){ myLandMark.setActive(false); lp.addProximityListener(myLandMark,myLandMark.getCoordinates(),50); } }(2)GraphicsThread類:聯(lián)網狀態(tài)下,用于不斷改變靠近動畫的幀,其重要代碼如下: inti=0; while(true){ try{ mc.setImage(Image.createImage("/anim"+i+".png")); mc.repaint(); //每隔一秒鐘改變動畫的幀 i++; i=i%8; Thread.currentThread().sleep(1000); }catch(Exceptione){ e.printStackTrace(); } }(3)OffLineAddProximityThread類:用于對離線地圖的興趣點進行再次添加靠近事件的監(jiān)聽器,其代碼與AddProximityThread類似。(4)OffLineGraphicsThread類:離線地圖下,用于不斷改變靠近動畫的幀,其代碼與GraphicsThread類似。4.2.5實體類將一些相關屬性抽象出來,封裝成對象,以便更好的利用,同時降低程序藕合性。本系統(tǒng)我們封裝了三個實體類:①MyLandMark聯(lián)網興趣點類:有三個成員變量(1)privateLandmarklandMark:路標。(2)privateImagelandMarkImage:用于在地圖上圖形化顯示興趣點。(3)privatebooleanactive:用于記錄興趣點與用戶是否發(fā)生靠近事件,也就是符合發(fā)生靠近事件時為true,否則為false。實現(xiàn)一個接口:(1)ProximityListener:用于監(jiān)聽該興趣點的靠近事件。②OffLineMyLandMark離線興趣點類,與聯(lián)網的只多了兩個屬性,其它都一樣:(1)privateintx:該興趣點相對于離線地圖的橫坐標。(2)privateinty:該興趣點相對于離線地圖的縱坐標。有個這兩個坐標便可以直接根據(jù)離線地圖的相對地畫出興趣點。③Visitor參觀者類:也只用于離線狀態(tài)下。(1)privateintvisitorX:觀察者相對于離線地圖的橫坐標。(2)privateintvisitorY:觀察者相對于離線地圖的縱坐標。(3)privateImagevisitorImage:觀察者圖形化顯示圖片。4.2.6GoogleMaps類(引用開源代碼)該類封裝了Google靜態(tài)地圖獲取的方法以及路徑規(guī)劃所需拐點的獲取等,在此說明因

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論