基于J2ME平臺(tái)的GPS導(dǎo)航系統(tǒng)設(shè)計(jì)_第1頁(yè)
基于J2ME平臺(tái)的GPS導(dǎo)航系統(tǒng)設(shè)計(jì)_第2頁(yè)
基于J2ME平臺(tái)的GPS導(dǎo)航系統(tǒng)設(shè)計(jì)_第3頁(yè)
基于J2ME平臺(tái)的GPS導(dǎo)航系統(tǒng)設(shè)計(jì)_第4頁(yè)
基于J2ME平臺(tái)的GPS導(dǎo)航系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論