版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、合 肥 學(xué) 院 課 程 設(shè) 計(jì) 報(bào) 告 題 目:基于基于 androidandroid 和和 googlegoogle mapmap 的地圖的地圖 定位程序的設(shè)計(jì)與實(shí)現(xiàn)定位程序的設(shè)計(jì)與實(shí)現(xiàn) 系 別:_ _ 電子信息與電氣工程系電子信息與電氣工程系 專 業(yè):_ _ 通信工程通信工程_ 班 級(jí):_ _ 0808 通信(通信(2 2)班)班_ 學(xué) 號(hào): 姓 名: 導(dǎo) 師:_ _ _ 成成 績(jī):績(jī):_ _ _ 2011 年 12 月 28 日 摘要:摘要: android 是一種以 linux 為基礎(chǔ)的開放源碼操作系統(tǒng),主要使用于便攜設(shè)備。它由谷 歌公司和開放手持設(shè)備聯(lián)盟開發(fā)和領(lǐng)導(dǎo)。除了開放手持設(shè)備聯(lián)
2、盟之外,android 還擁有許 多由全球各地開發(fā)者組成的開源社區(qū)來(lái)專門負(fù)責(zé)開發(fā) android 應(yīng)用程序和第三方 android 操作系統(tǒng)來(lái)延長(zhǎng)和擴(kuò)展 android 的功能和性能。2011 年 8 月,android 操作系統(tǒng)在全球智 能手機(jī)操作系統(tǒng)的市場(chǎng)份額已達(dá) 48%,成為全球第一大智能手機(jī)操作系統(tǒng),躍居全球最受 歡迎的智能手機(jī)平臺(tái)。 google map,是 google 公司向全球提供的電子地圖服務(wù),包括局部詳細(xì)的衛(wèi)星照片。 由于 google 地圖是一項(xiàng)電子地圖服務(wù),因而擁有比紙質(zhì)地圖更多的優(yōu)越性,特別是近年來(lái) 移動(dòng)設(shè)備的智能化,網(wǎng)絡(luò)速度的提升,更是讓 google 地圖與人們的
3、生活產(chǎn)生更為緊密的聯(lián) 系,因而倍受人們的贊譽(yù)。 android 操作系統(tǒng)平臺(tái)很容易跟 google 的一些應(yīng)用如 google map 整合。在 android 應(yīng)用中,如果能在其中加入 google map,則會(huì)為應(yīng)用增添強(qiáng)大的功能,目前不少 lbs 應(yīng)用 (基于地理位置的應(yīng)用)就是充分將移動(dòng)跟地圖結(jié)合起來(lái)。 本設(shè)計(jì)旨在為使用基于 android 操作系統(tǒng)的移動(dòng)設(shè)備(如手機(jī)、平板電腦等)的用戶 提供一種準(zhǔn)確、方便的定位系統(tǒng),可以通過經(jīng)緯度信息,甚至僅僅是地名,就能在地圖上 找到該地的地理位置。軟件的開發(fā)使用 java 語(yǔ)言、google apisandroid 2.2開發(fā)包和 eclipse
4、 3.3 開發(fā)環(huán)境。 關(guān)鍵詞:關(guān)鍵詞:android;google map;定位;google apis;json 目錄目錄 一、設(shè)計(jì)目標(biāo)一、設(shè)計(jì)目標(biāo) .4 1.1 android平臺(tái)簡(jiǎn)介 .4 1.2 google地圖簡(jiǎn)介.4 1.3 功能實(shí)現(xiàn).4 二、環(huán)境配置二、環(huán)境配置 .5 2.1 下載相關(guān)軟件.5 2.2 安裝軟件和配置環(huán)境.5 2.2.1安裝jdk.5 2.2.2安裝eclipse.6 2.2.3配置android環(huán)境.6 2.3 創(chuàng)建基于 google apis的 avd.6 2.4 獲取 google map api.7 2.4.1安裝google map api.7 2.4.
5、2獲得google map api key.7 三、設(shè)計(jì)思路三、設(shè)計(jì)思路 .9 3.1 通過經(jīng)緯度定位的設(shè)計(jì)思路.9 3.2 通過地名定位的設(shè)計(jì)思路.9 四、設(shè)計(jì)過程四、設(shè)計(jì)過程.11 4.1google map api 的使用.11 4.2 通過經(jīng)緯度定位的實(shí)現(xiàn).11 4.2.1創(chuàng)建工程.11 4.2.2 修改androidmanifest.xml 文件.11 4.2.3修改main.xml.11 4.2.4實(shí)現(xiàn)mapactivity.12 4.2.5 mapcontroller 的使用.12 4.2.6增加標(biāo)記.12 4.3 通過地名定位的實(shí)現(xiàn).13 4.3.1監(jiān)聽響應(yīng)函數(shù)的實(shí)現(xiàn).13 4
6、.3.2 getlocationinfo()函數(shù)的實(shí)現(xiàn).13 4.3.3 getpoint()函數(shù)的實(shí)現(xiàn).14 五、結(jié)果測(cè)試五、結(jié)果測(cè)試.15 5.1 啟動(dòng) mapiii.15 5.2 一些簡(jiǎn)單的操作.16 5.3 測(cè)試通過經(jīng)緯度定位.17 5.4 測(cè)試通過地名定位.17 5.5 退出程序.18 六、程序發(fā)布六、程序發(fā)布.19 6.1 生成keystore.19 6.2 eclipse生成apk文件 .19 七、總結(jié)七、總結(jié).21 參考文獻(xiàn)參考文獻(xiàn).22 附錄:附錄:.23 1.androidmanifest.xml.23 2. main.xml.23 3.strings.xml.25 4.m
7、apiiiactivity.java .26 5.r.java.31 6.包含“合肥學(xué)院新區(qū)”的相關(guān)地理信息的json數(shù)據(jù).32 一、設(shè)計(jì)目標(biāo)一、設(shè)計(jì)目標(biāo) 1.1 android 平臺(tái)簡(jiǎn)介平臺(tái)簡(jiǎn)介 android 是 google 于 2007 年 11 月 05 日宣布的基于 linux 平臺(tái)的開源移動(dòng)操作系統(tǒng)的 名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成。它采用軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分為三部分。底層以 linux 內(nèi)核工作為基礎(chǔ),由 c 語(yǔ) 言開發(fā),只提供基本功能;中間層包括函數(shù)庫(kù) library 和虛擬機(jī) virtual machi
8、ne,由 c+開 發(fā)。最上層是各種應(yīng)用軟件,包括通話程序,短信程序等,應(yīng)用軟件則由各公司自行開發(fā), 以 java 作為編寫程序的一部分。不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙,號(hào)稱是 首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。 2011 年第一季度,android 在全球的市場(chǎng)份額首次超過塞班系統(tǒng),躍居全球第一。 2011 年 11 月數(shù)據(jù),android 占據(jù)全球智能手機(jī)操作系統(tǒng)市場(chǎng) 52.5%的份額,中國(guó)市場(chǎng)占 有率為 58%。 1.2 google 地圖簡(jiǎn)介地圖簡(jiǎn)介 提起 google,人們最先想到的一定是它的搜索引擎,不過繼搜索引擎之后,google 地 圖的影響力越來(lái)越大。在
9、 android 系統(tǒng)剛剛起步的時(shí)候,google 就看到了基于定位服務(wù)的 應(yīng)用潛力,并將 google 地圖的成功經(jīng)驗(yàn)帶入了 android 系統(tǒng)當(dāng)中。很多基于定位功能的應(yīng) 用程序最終都需要顯示地圖,google 地圖已經(jīng)可以非常成熟地顯示交互式地圖,其商業(yè)模 式還允許第三方網(wǎng)站將 google 地圖嵌入到自己的頁(yè)面中。google 地圖的大部分功能都可 以在 android 平臺(tái)上實(shí)現(xiàn),android 平臺(tái)下的開發(fā)者可以將 google 地圖嵌入到自己的應(yīng)用 程序中。 google 地圖是 google 公司提供的電子地圖服務(wù),包括局部詳細(xì)的衛(wèi)星照片。能提供 三種視圖:一是矢量地圖(傳統(tǒng)地
10、圖) ,可提供政區(qū)和交通以及商業(yè)信息;二是不同分辨率 的衛(wèi)星照片(俯視圖,跟 google earth 上的衛(wèi)星照片基本一樣) ;三是地形視圖,可以用 以顯示地形和等高線。 1.3 功能實(shí)現(xiàn)功能實(shí)現(xiàn) 本設(shè)計(jì)旨在為使用基于 android 操作系統(tǒng)的移動(dòng)設(shè)備(如手機(jī)、平板電腦等)的用戶 提供一種準(zhǔn)確、方便的定位系統(tǒng),可以通過經(jīng)緯度信息,甚至僅僅是地名,就能在地圖上 找到該地的地理位置。軟件的開發(fā)使用 java 語(yǔ)言、google apisandroid 2.2開發(fā)包和 eclipse 3.3 開發(fā)環(huán)境。 二、環(huán)境配置二、環(huán)境配置 2.1 下載相關(guān)軟件下載相關(guān)軟件 表 2.1 相關(guān)軟件 軟件名稱對(duì)
11、應(yīng)下載網(wǎng)址 jdk6.0http:/ eclipse 3.3/downloads/ android sdkhttp:/ 2.2 安裝軟件和配置環(huán)境安裝軟件和配置環(huán)境 2.2.1 安裝安裝 jdk 下載好 jdk 是一個(gè)可執(zhí)行安裝程序,雙擊安裝。假設(shè)安裝路徑為:c:/program files/java/jdk1.6.0_05(當(dāng)然其他路徑也可以) 。jdk 安裝完成之后要設(shè)置系統(tǒng)環(huán)境變量: 我的電腦點(diǎn)右鍵,選擇“屬性” ,選擇“高級(jí)”標(biāo)簽,進(jìn)入環(huán)境變量設(shè)置。環(huán)境變量設(shè)置, 分別設(shè)置三個(gè)環(huán)境變量:java_home、path 變量、classpath 變
12、量。 1.設(shè)置 java_home 在系統(tǒng)環(huán)境變量那一欄中,點(diǎn)“新建”java_home(java_home 指向的是 jdk 的安裝路 徑) 。變量名:java_home;變量值:c:/program files/java/jdk1.6.0_05。 設(shè)置 java_home 量的目的: (1)為了方便引用,比如,jdk 安裝 c:/program files/java/jdk1.6.0_05 目錄里,則設(shè) 置 java_home 為該目錄路徑, 那么以后要使用這個(gè)路徑的時(shí)候, 只需輸入%java_home%即可, 避免每次引用都輸入很長(zhǎng)的路徑串。 (2)歸一原則, 當(dāng) jdk 路徑改變的時(shí)候
13、, 僅需更改 java_home 的變量值即可。否則,就要 更改任何用絕對(duì)路徑引用 jdk 目錄的文檔,沒有改全則某個(gè)程序找不到 jdk, 后果將導(dǎo)致系 統(tǒng)崩潰。 (3)第三方軟件會(huì)引用約定好的 java_home 變量, 否則不能正常使用該軟件。 2.設(shè)置 path 變量 在系統(tǒng)變量里找到 path 變量,選擇“編輯”變量名:path ,變量值: %java_home%/bin。 設(shè)置 path 變量的目的: 使得我們能夠在系統(tǒng)中的任何地方運(yùn)行 java 應(yīng)用程序,比如 javac、java、javah 等, 這就要找到我們安裝 jdk 的目錄,比如我們的 jdk 安裝在 c:/progra
14、m files/java/jdk1.6.0_05 目錄下,那么在 c:/program files/java/jdk1.6.0_05/bin 目錄 下就是我們常用的 java 應(yīng)用程序,我們就需要把 c:/jdk1.6.0/bin 這個(gè)目錄加到 path 環(huán)境 變量里面。 3.設(shè)置 classpath 環(huán)境 在系統(tǒng)環(huán)境變量那一欄中點(diǎn)“新建”classpath。變量名: classpath ,變量值: .;%java_home%/lib/;%java_home%/jre/lib/(注意,classpath 最前面是有個(gè)“.”的, 表示當(dāng)前目錄,這樣當(dāng)我們運(yùn)行 java aclass 的時(shí)候,系統(tǒng)
15、就會(huì)先在當(dāng)前目錄尋找 aclass 文件了) 。 2.2.2 安裝安裝 eclipse 將下載的 eclipse3.3 壓縮包解壓到相應(yīng)的安裝目錄即可。 2.2.3 配置配置 android 環(huán)境環(huán)境 為了讓開發(fā)過程更輕松,google 還編寫了一款 adt 的 eclipse 插件。要想安裝該插件, 請(qǐng)執(zhí)行以下步驟。 (1)啟動(dòng) eclipse,然后選擇 helpsoftware updates。 (2)單擊 available software 選項(xiàng)卡。 (3)單擊 add site 按鈕。 (4)輸入 android 更新站點(diǎn)的位置:https:/dl- (5)現(xiàn)在,該 android
16、站點(diǎn)應(yīng)該出現(xiàn)在 available software 視圖中。選中該站點(diǎn)旁邊 的復(fù)選框,然后單擊 install。如果出現(xiàn)錯(cuò)誤信息,原因可能是 eclipse 的版本 不對(duì)。 (6)單擊 finish 開始下載安裝過程。 (7)安裝完成后,重新啟動(dòng) eclipse。 (8)eclipse 啟動(dòng)后可能出現(xiàn)幾條錯(cuò)誤信息,因?yàn)榇藭r(shí)需要告訴你 android sdk 位 于何處。選擇 windowpreferencesandroid,然后輸入你在前面記下的 sdk 安裝目錄。單擊 ok 按鈕。 2.3 創(chuàng)建基于創(chuàng)建基于 google apis 的的 avd 在 eclipse 中打開 avd 管理界面
17、,點(diǎn)擊“new”按鈕,在“create new avd”對(duì)話框的 name 處填寫 avd 的名字 gm,在 target 處選擇“google apis (google inc.) api level 8” ,如圖 2.1 所示,點(diǎn)擊“create avd”按鈕完成創(chuàng)建。 圖 2.1 創(chuàng)建 avd 2.4 獲取獲取 google map api 2.4.1 安裝安裝 google map api 開發(fā)基于谷歌地圖的應(yīng)用和普通的 android 應(yīng)用差不多都要使用它提供給我們的類庫(kù), 所不同的是 google map 的類庫(kù)不是 android 平臺(tái)的基本類庫(kù),而是 google api 的一
18、部分, 所以建立項(xiàng)目時(shí),sdk 要選擇 google apis 選項(xiàng)。 2.4.2 獲得獲得 google map api key 在正式使用 google map api 前,必須先生成 google map api key。 1.找到 debug.keystore 文件 在 eclipse 工具下,選擇 windowspreferenceandroidbuild,其中 defaultdebug keystore 的值便是 debug.keystore 的路徑。 2.取得 debug.keystore 的 md5 值 首先 cmd 命令行進(jìn)入 debug.keystore 文件所在的路徑,執(zhí)
19、行命令:keytool -list - keystore debug.keystore,默認(rèn)的密碼是:android,即可取得 md5 值了,如圖 2.2 所示。 圖 2.2 獲得 md5 3.申請(qǐng) android map 的 api key 打開瀏覽器,輸入網(wǎng)址:http:/ 填入剛剛獲得的的認(rèn)證指紋(md5)即可獲得 api key 了,結(jié)果顯示如圖 2.3 所示。 圖 2.3 獲得 api 三、設(shè)計(jì)思路三、設(shè)計(jì)思路 3.1 通過經(jīng)緯度定位的設(shè)計(jì)思路通過經(jīng)緯度定位的設(shè)計(jì)思路 本功能實(shí)現(xiàn)的目標(biāo)是:在兩個(gè) edittext 對(duì)話框中分別輸入經(jīng)度和緯度之后,點(diǎn)擊相應(yīng) 的 button 按鈕,在屏
20、幕中的地圖中會(huì)顯示出所定位的位置,并在此位置上做出標(biāo)記。 首先要引用 com.google.android.maps 包來(lái)實(shí)現(xiàn)一個(gè)地圖瀏覽程序,創(chuàng)建一個(gè) mapview 對(duì)象來(lái)顯示地圖。通過 mapcontroller 對(duì)象來(lái)設(shè)置地圖顯示的地點(diǎn)以及放大的倍 數(shù),要定位地點(diǎn)需要構(gòu)建一個(gè) geopoint 對(duì)象來(lái)表示地點(diǎn)的經(jīng)度和緯度,然后使用 animateto 方法將地圖定位到指定的 geopoint 對(duì)象上,再新建一個(gè) overlay 對(duì)象并在上面 標(biāo)注一些圖標(biāo)文字信息。 3.2 通過地名定位的設(shè)計(jì)思路通過地名定位的設(shè)計(jì)思路 本功能的實(shí)現(xiàn)目標(biāo)是:在一個(gè) edittext 里輸入一個(gè)地名,點(diǎn)擊
21、button,在 mapview 里便會(huì)顯示出該地。實(shí)際上,由于在 google map 中必須獲得經(jīng)緯度才能定位,故本定位方 法不過是前一種定位方法的加強(qiáng)版,即先通過地名獲得該地的經(jīng)緯度,再通過經(jīng)緯度進(jìn)行 定位。由此可知,本設(shè)計(jì)的核心內(nèi)容,便是如何通過地名獲得該地的經(jīng)緯度。 本來(lái)此問題應(yīng)該很好解決,因?yàn)?google 提供了一個(gè)用于實(shí)現(xiàn)該功能的 geocoder 類, 只要使用該類生成一個(gè)對(duì)象,并使用 getfromlocationname()方法,只需幾句代碼便可輕 松將地名轉(zhuǎn)換為相應(yīng)的經(jīng)緯度,我們手中的 android 開發(fā)教材和網(wǎng)絡(luò)上能夠搜索到的絕大 部分資料中使用的都是該方法,如下:
22、 geocoder geocoder=new geocoder(this); list list=geocoder.getfromlocationname(address,1); /address是輸入的地址信息 if(!lstaddress.isempty() address address=list.get(0); double latitude=address.getlatitude()*1e6; double longitude=adress.getlongitude()*1e6; geopoint geopoint=new geopoint(int)latitude,(int)lon
23、gitude); 但我們?cè)趯?shí)際的開發(fā)過程中發(fā)現(xiàn),在調(diào)試程序時(shí),點(diǎn)擊 button 后,程序沒有任何響應(yīng)。 經(jīng)反復(fù)調(diào)查研究后我們得知,由于 google map 中的 getcoder 反轉(zhuǎn)經(jīng)緯度一直存在 bug, 在前一段時(shí)間 google 終止了這項(xiàng)服務(wù),故 geocoder 返回 list 為 null,得不到地址信息。 當(dāng)我們正一籌莫展之時(shí),我們從一份資料上獲得了另一種新的但較為麻煩的獲取地理 位置經(jīng)緯度的方法:通過 json 數(shù)據(jù)解析地址。 json(javascript object notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于 javascript(standard ec
24、ma-262 3rd edition - december 1999)的一個(gè)子集。 json 采 用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于 c 語(yǔ)言家族的習(xí)慣,這些特性使 json 成為理想的數(shù)據(jù)交換語(yǔ)言,易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。 在瀏覽器的地址欄里輸入以下網(wǎng)址: “http:/ n?address=合肥學(xué)院新區(qū) /設(shè)置為交通模式 mapview.setsatellite(true); /設(shè)置為衛(wèi)星模式 mapview.setstreetview(false);/設(shè)置為街景模式 4.2.5 mapcontroller 的使用的使用 如果需要設(shè)置地圖顯示的地點(diǎn)以及放大倍
25、數(shù)等,就需要使用 mapcontroller 來(lái)控制地 圖。可以通過如下代碼獲得 mapcontroller 對(duì)象: mapcontroller mapcontroller; mapcontroller = mapview.getcontroller(); 要定位地點(diǎn),需要構(gòu)造一個(gè) geopoint 來(lái)表示地點(diǎn)的經(jīng)緯度,然后使用 animateto 方法 將地圖定位到指定的 geopoint 上,代碼如下: geopoint geopoint01; geopoint01= new geopoint(int) (edittext01double * 1000000), (int) (editte
26、xt02double * 1000000); mapcontroller.animateto(geopoint01); 4.2.6 增加標(biāo)記增加標(biāo)記 為了給地圖多增加一些自定義的功能,比如可以在地圖上進(jìn)行一些標(biāo)注。為了實(shí)現(xiàn)這 樣的功能,我們可以繼承 overlay 這個(gè)類,這個(gè)類是一個(gè)基類,提供了可以在地圖上添加 圖層的基本功能。 在定位的目標(biāo)地點(diǎn)引入一張圖片做標(biāo)記,代碼如下: canvas.drawbitmap(bmp, myscreencoords.x, myscreencoords.y, paint); 在定位的目標(biāo)地點(diǎn)添加文字做標(biāo)記,代碼如下: canvas.drawtext(定位目標(biāo)
27、, myscreencoords.x, myscreencoords.y, paint); 4.3 通過地名定位的實(shí)現(xiàn)通過地名定位的實(shí)現(xiàn) 4.3.1 監(jiān)聽響應(yīng)函數(shù)的實(shí)現(xiàn)監(jiān)聽響應(yīng)函數(shù)的實(shí)現(xiàn) 1.從 textview 對(duì)象中獲取輸入的地址信息: string address=edittext03.gettext().tostring(); 2.下面調(diào)用了兩個(gè)函數(shù) getlocationinfo()和 getgeopoint(),前者通過 http 取得 json 數(shù)據(jù),返回的是 jsonobject 對(duì)象,交給后者;后者解析出 jsonobject 對(duì)象中的經(jīng)緯 度數(shù)據(jù),交給 geopoint 對(duì)
28、象,并將 geopoint 對(duì)象返回: geopoint02=getgeopoint(getlocationinfo(address); 3. 使用 animateto 方法將定位: mapcontroller.animateto(geopoint02); 4.3.2 getlocationinfo()函數(shù)的實(shí)現(xiàn)函數(shù)的實(shí)現(xiàn) 1.根據(jù) url 地址創(chuàng)建 httpget 請(qǐng)求對(duì)象: httpget httpget=new httpget(http:/ geocode/json?address= + address + 2.創(chuàng)建 http 客戶端對(duì)象: httpclient httpclient=n
29、ew defaulthttpclient(); 3.創(chuàng)建 http 響應(yīng)對(duì)象: httpresponse httpresponse; 4.定義一個(gè)字符串緩沖區(qū),與一般的 string 對(duì)象的區(qū)別是 stringbuffer 對(duì)象里面的 內(nèi)容可以增加和修改,用于存儲(chǔ)從 inputstream 對(duì)象中讀取出的字符串: stringbuffer stringbuffer=new stringbuffer(); 5.通過 httpclient 對(duì)象執(zhí)行一次 get 方式的 http 請(qǐng)求,并返回一個(gè) httpresponse 對(duì) 象作為服務(wù)器的響應(yīng): httpresponse=httpclient.e
30、xecute(httpget); 6.獲取響應(yīng)的內(nèi)容,這里需注意 httpresponse 對(duì)象只是代表了服務(wù)器的響應(yīng), httpentity 對(duì)象才是該響應(yīng)的實(shí)體: httpentity httpentity=httpresponse.getentity(); 7.獲取服務(wù)器響應(yīng)的輸入流,getcontent()方法可以得到其內(nèi)容: inputstream inputstream=httpentity.getcontent(); 8.循環(huán)讀取服務(wù)器響應(yīng)。將從 inputstream 對(duì)象中讀取出的字符元素賦值給整型對(duì)象 b,一般來(lái)說(shuō)賦值的結(jié)果不可能是-1,只有當(dāng) inputstream 對(duì)象
31、讀完時(shí)才會(huì)得到-1。在該循 環(huán)里將整型對(duì)象 b 的內(nèi)容轉(zhuǎn)換成字符元素并追加給 stringbuffer,注意此時(shí)字符元素對(duì)象 b 的內(nèi)容與從 inputstream 對(duì)象中讀取出的字符元素一致,這樣就實(shí)現(xiàn)了讀取服務(wù)器響應(yīng): int b; while (b=inputstream.read()!=-1) stringbuffer.append(char)b); 9.關(guān)閉輸入流: inputstream.close(); 10.創(chuàng)建一個(gè) jsonobject 對(duì)象: jsonobject jsonobject=new jsonobject(); 11.將 stringbuffer 對(duì)象里的字符串轉(zhuǎn)
32、換為 jsonobject 對(duì)象: jsonobject=new jsonobject(stringbuffer.tostring(); 12.返回該 jsonobject 對(duì)象: return jsonobject; 4.3.3 getpoint()函數(shù)的實(shí)現(xiàn)函數(shù)的實(shí)現(xiàn) 1.定義兩個(gè) double 數(shù)組,用于儲(chǔ)存經(jīng)緯度信息: double lon=new double(0); double lat=new double(0); 2.從 jsonobject 對(duì)象中取出代表緯度的lng的值,具體過程是:先得到”result” 里的值,從值里取得第一個(gè)結(jié)果,在逐步往下”geometry”loca
33、tion”lng”,最 終得到lng里的值: lon=(jsonarray)jsonobject.get(results).getjsonobject(0).getjs onobject(geometry).getjsonobject(location).getdouble(lng); 3.從 jsonobject 對(duì)象中取出代表經(jīng)度的lat的值,過程同上: lat=(jsonarray)jsonobject.get(results).getjsonobject(0).getjs onobject(geometry).getjsonobject(location).getdouble(lat)
34、; 4.將取得的經(jīng)緯度數(shù)據(jù)轉(zhuǎn)換成 geopoint 對(duì)象并返回: return new geopoint(int)(lat*1e6),(int)(lon*1e6); 五、結(jié)果測(cè)試五、結(jié)果測(cè)試 5.1 啟動(dòng)啟動(dòng) mapiii 在 eclipse 界面里選擇 run 菜單,點(diǎn)擊 run cunfigurations,彈出一個(gè)對(duì)話框。先看 android 標(biāo)簽,在 project 里找到要運(yùn)行的項(xiàng)目 mapiii 并選中;在 target 標(biāo)簽里,選擇 之前建立的 avd。點(diǎn)擊 run 即可運(yùn)行。如圖 5.1 和圖 5.2。 圖 5.1 選擇項(xiàng)目 圖 5.2 選擇 avd 5.2 一些簡(jiǎn)單的操作一些
35、簡(jiǎn)單的操作 1.程序啟動(dòng)后,得到如圖的結(jié)果。默認(rèn)的地圖是美國(guó)某城市,并且是是衛(wèi)星圖,如圖 5.3。 圖 5.3 默認(rèn)地圖 2.點(diǎn)擊屏幕,出現(xiàn)控制放大和縮小的按鈕,可用其放大或縮小屏幕,如圖 5.4。 3.點(diǎn)擊“交通圖”按鈕,便可切換為交通圖,如圖 5.5。點(diǎn)擊“衛(wèi)星圖”按鈕會(huì)回到衛(wèi)星 圖。 圖 5.4 衛(wèi)星圖 圖 5.5 交通圖 5.3 測(cè)試通過經(jīng)緯度定位測(cè)試通過經(jīng)緯度定位 在相應(yīng)的輸入框中輸入香港某地的經(jīng)緯度(22.2806,114.1650),點(diǎn)擊“定位”按鈕, 地圖便會(huì)跳轉(zhuǎn)到該地點(diǎn),并在該點(diǎn)上顯示圖片和“定位的目標(biāo)”,如圖 5.6 和圖 5.7。 圖 5.6 經(jīng)緯度定位(衛(wèi)星圖) 圖 5
36、.7 經(jīng)緯度定位(交通圖) 5.4 測(cè)試通過地名定位測(cè)試通過地名定位 在地址欄中輸入“合肥學(xué)院新區(qū)”,點(diǎn)擊“查找”按鈕,地圖便會(huì)跳轉(zhuǎn)到合肥學(xué)院新 區(qū),如圖 5.8 和圖 5.9 所示。 圖 5.8 地名搜索(衛(wèi)星圖) 圖 5.9 地名搜索(交通圖) 5.5 退出程序退出程序 點(diǎn)擊 menu 按鈕,在彈出的菜單中選擇“退出”,如圖 5.10,程序便可結(jié)束。 圖 5.10 退出菜單 六、程序發(fā)布六、程序發(fā)布 對(duì)于絕大部分開發(fā)者而言,編寫 android 手機(jī)應(yīng)用程序的目的除了自?shī)首詷吠?,最?要的就是和別人分享,可以收費(fèi),也可以免費(fèi)。google 已經(jīng)為此創(chuàng)建了一個(gè) android 電子 市場(chǎng)。任
37、何一款具有聯(lián)網(wǎng)功能的 android 手機(jī)都可以打開 android 電子市場(chǎng),其中有成千 上萬(wàn)的應(yīng)用程序可供用戶下載。在 android 電子市場(chǎng)上發(fā)布自己的應(yīng)用程序之前,必須先 對(duì)其進(jìn)行簽名。事實(shí)上,在應(yīng)用程序的開發(fā)過程中就已經(jīng)在進(jìn)行數(shù)字簽名了,當(dāng)每次通過 eclipse 啟動(dòng)應(yīng)用程序時(shí) android sdk 會(huì)自動(dòng)為程序生成一個(gè)調(diào)試簽名。問題是調(diào)試簽名 并不能用于在 android 電子市場(chǎng)上發(fā)布應(yīng)用程序,必須專門為應(yīng)用程序的發(fā)布生成一個(gè)新 的簽名。 6.1 生成生成 keystore 按照下面的命令行在 c:program filesjavajdk1.6.0_30bin目錄下,輸入:
38、 keytool -genkey -alias android.keystore -keyalg rsa -validity 100000 -keystore android.keystore,其中-validity 主要是證書的有效期,本次設(shè)為 100000 天。然后依提 示進(jìn)行,空格和退格鍵都可作為密碼。如圖 6.3 所示。命令執(zhí)行后會(huì)在 c:program filesjavajdk1.6.0_30bin目錄下生成 android.keystore 文件。 圖 6.1 生成 keystore 6.2 eclipse 生成生成 apk 文件文件 1.選擇要打包的項(xiàng)目,右鍵點(diǎn)擊android
39、toolsexport signed application package 并選擇打包的項(xiàng)目。 2.選擇生成的 android.keystore 文件并輸入密碼,如圖 6.2。 圖 6.2 選擇 android.keystore 文件并驗(yàn)證 3.再選擇 alias key 并輸入密碼,如圖 6.3。 圖 6.3 選擇 alias key 文件并驗(yàn)證 4.最后選擇生成 android apk 文件的目錄及文件名,最終生成 apk 文件,如圖 6.4。 圖 6.4 最終的 apk 文件 七、總結(jié)七、總結(jié) 本學(xué)期通信技術(shù)創(chuàng)新課程設(shè)計(jì)由本專業(yè)老師命題,學(xué)生選題找指導(dǎo)老師的形式,并且 組隊(duì)操作。趣味性
40、強(qiáng),同時(shí)也可以學(xué)到很多東西。 我們認(rèn)為,在本課題中,在收獲知識(shí)的同時(shí),還收獲了閱歷,收獲了成熟,在此過程 中,我們通過查找大量資料,請(qǐng)教老師,以及不懈的努力,不僅培養(yǎng)了獨(dú)立思考、動(dòng)手操 作的能力,在各種其它能力上也都有了提高。更重要的是,在過程中,我們學(xué)會(huì)了很多學(xué) 習(xí)的方法。而這是日后最實(shí)用的,真的是受益匪淺。要面對(duì)社會(huì)的挑戰(zhàn),只有不斷的學(xué)習(xí)、 實(shí)踐,再學(xué)習(xí)、再實(shí)踐。 本系統(tǒng)仍有很多瑕疵。例如,搜索“合肥學(xué)院”可以得到數(shù)個(gè)地理位置經(jīng)緯度,但本 系統(tǒng)只能返回第一個(gè)結(jié)果(北區(qū)的經(jīng)緯度),最終只能定位到合肥學(xué)院北區(qū)。而理論上可 以實(shí)現(xiàn)一種功能,把所有符合要求的結(jié)果都在地圖上做上一種特殊的標(biāo)記,點(diǎn)擊標(biāo)
41、記可以 便得到其詳細(xì)地址,便可解決此問題。由于時(shí)間的緊缺、課業(yè)的繁忙以及自身能力的限制, 很多地方我們并沒有做到最好。但是,這份軟件仍是我們的驕傲。相信以后我們會(huì)以更加 積極地態(tài)度對(duì)待我們的學(xué)習(xí)、對(duì)待我們的生活。我們的激情永遠(yuǎn)不會(huì)結(jié)束,相反,我們會(huì) 更加努力,努力的去彌補(bǔ)自己的缺點(diǎn),發(fā)展自己的優(yōu)點(diǎn),去充實(shí)自己,只有在了解了自己 的長(zhǎng)短之后,我們會(huì)更加珍惜擁有的,更加努力的去完善它,增進(jìn)它。只有不斷的測(cè)試自 己,挑戰(zhàn)自己,才能擁有更多的成功和快樂! 快樂至上,享受過程,而不是結(jié)果!認(rèn)真對(duì) 待每一個(gè)過程,珍惜每一分一秒,學(xué)到最多的知識(shí)和方法,鍛煉自己的能力,這個(gè)是我們 在本課題中學(xué)到的最重要的東西
42、,也是以后都將受益匪淺的! 最后,感謝李祎老師的辛勤指導(dǎo)! 參考文獻(xiàn)參考文獻(xiàn) 1李新力.j2me 實(shí)用教程.北京:人民郵電出版社,2009.6 2ed buruette.android 基礎(chǔ)教程(第三版).北京:人民郵電出版社,2010.8 3rick rogers,jobn lombardo,zigurd mednieks,blake meike.android 應(yīng)用開發(fā).北京: 人民郵電出版社,2010.9 4王向輝,張國(guó)印,沈潔.android 應(yīng)用程序開發(fā).北京:清華大學(xué)出版社,2010.3 5吳亞峰,索伊娜.android 核心技術(shù)與實(shí)例詳解.北京:電子工業(yè)出版社,2011.3 附錄
43、:附錄: 1.androidmanifest.xml 2. main.xml 3.strings.xml hello world, mapiiiactivity! mapiii 請(qǐng)?zhí)钊刖暥?請(qǐng)?zhí)钊虢?jīng)度 定位 地址: 合肥學(xué)院新區(qū) 查找 退出 地圖切換: 衛(wèi)星圖 交通圖 4.mapiiiactivity.java package chenzhen.mapiii; import chenzhen.mapiii.r; import com.google.android.maps.mapactivity; import java.io.ioexception; import java.io.input
44、stream; import java.util.list; import org.apache.http.httpentity; import org.apache.http.httpresponse; import org.apache.http.client.clientprotocolexception; import org.apache.http.client.httpclient; import org.apache.http.client.methods.httpget; import org.apache.http.impl.client.defaulthttpclient;
45、 import org.json.*; import com.google.android.maps.geopoint; import com.google.android.maps.mapcontroller; import com.google.android.maps.mapview; import com.google.android.maps.overlay; import android.os.bundle; import android.view.menu; import android.view.menuitem; import android.view.view; impor
46、t android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.textview; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.graphics.canvas; import android.graphics.paint; import android.graphics.point; publ
47、ic class mapiiiactivity extends mapactivity /* called when the activity is first created. */ edittext edittext01; edittext edittext02; edittext edittext03; button button01; button button02; button button03; button button04; textview textview01; textview textview02; mapview mapview; mapcontroller map
48、controller; geopoint geopoint01; geopoint geopoint02; override public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.main); edittext01=(edittext)findviewbyid(r.id.edittext01); edittext02=(edittext)findviewbyid(r.id.edittext02); edittext03=(editte
49、xt)findviewbyid(r.id.edittext03); button01=(button)findviewbyid(r.id.button01); button02=(button)findviewbyid(r.id.button02); button03=(button)findviewbyid(r.id.button03); button04=(button)findviewbyid(r.id.button04); mapview=(mapview)findviewbyid(r.id.mapview); mapcontroller = mapview.getcontroller
50、(); mapview.setsatellite(true); mapview.setenabled(true); mapview.setbuiltinzoomcontrols(true); mapcontroller.setzoom(15); button01.setonclicklistener(new onclicklistener() override public void onclick(view v) / todo auto-generated method stub string edittext01str=edittext01.gettext().tostring(); st
51、ring edittext02str=edittext02.gettext().tostring(); double edittext01double=double.parsedouble(edittext01str); double edittext02double=double.parsedouble(edittext02str); geopoint01= new geopoint(int) (edittext01double * 1000000), (int) (edittext02double * 1000000); if(geopoint01!=null) mapcontroller
52、.animateto(geopoint01); mylocationoverlay mylocationoverlay = new mylocationoverlay(); list list = mapview.getoverlays(); list.add(mylocationoverlay); ); button02.setonclicklistener(new onclicklistener() override public void onclick(view v) / todo auto-generated method stub string address=edittext03
53、.gettext().tostring(); geopoint02=getgeopoint(getlocationinfo(address); if(geopoint02!=null) mapcontroller.animateto(geopoint02); ); button03.setonclicklistener(new onclicklistener() override public void onclick(view v) / todo auto-generated method stub mapview.settraffic(false); mapview.setsatellit
54、e(true); ); button04.setonclicklistener(new onclicklistener() override public void onclick(view v) / todo auto-generated method stub mapview.setsatellite(false); mapview.settraffic(true); ); class mylocationoverlay extends overlay override public boolean draw(canvas canvas, mapview mapview, boolean
55、shadow, long when) super.draw(canvas, mapview, shadow); paint paint = new paint(); point myscreencoords = new point(); mapview.getprojection().topixels(geopoint01, myscreencoords); paint.setstrokewidth(1); paint.setargb(255, 255, 0, 0); paint.setstyle(paint.style.stroke); bitmap bmp = bitmapfactory.
56、decoderesource(getresources(), r.drawable.home); canvas.drawbitmap(bmp, myscreencoords.x, myscreencoords.y, paint); canvas.drawtext(定位的目標(biāo), myscreencoords.x, myscreencoords.y, paint); return true; public static jsonobject getlocationinfo(string address) httpget httpget=new httpget(http:/ geocode/json
57、?address= + address + httpclient httpclient=new defaulthttpclient(); httpresponse httpresponse; stringbuffer stringbuffer=new stringbuffer(); try httpresponse=httpclient.execute(httpget); httpentity httpentity=httpresponse.getentity(); inputstream inputstream=httpentity.getcontent(); int b; while (b
58、=inputstream.read()!=-1) stringbuffer.append(char)b); inputstream.close(); catch (clientprotocolexception e) / todo auto-generated catch block e.printstacktrace(); catch (ioexception e) / todo auto-generated catch block e.printstacktrace(); jsonobject jsonobject=new jsonobject(); try jsonobject=new
59、jsonobject(stringbuffer.tostring(); catch (jsonexception e) / todo auto-generated catch block e.printstacktrace(); return jsonobject; public static geopoint getgeopoint(jsonobject jsonobject) double lon=new double(0); double lat=new double(0); try lon=(jsonarray)jsonobject.get(results).getjsonobject
60、(0). getjsonobject(geometry).getjsonobject(location).getdouble(lng); catch (jsonexception e) / todo auto-generated catch block e.printstacktrace(); try lat=(jsonarray)jsonobject.get(results).getjsonobject(0). getjsonobject(geometry).getjsonobject(location).getdouble(lat); catch (jsonexception e) / t
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版委托貸款合同(購(gòu)車貸款)3篇
- 2025版民間借貸合同文本四種借款人法律義務(wù)解讀4篇
- 商鋪售后返租合同風(fēng)險(xiǎn)評(píng)估與法律建議(2025年版)2篇
- 2025年度龍山區(qū)中醫(yī)院醫(yī)療廢物處理技術(shù)改造合同4篇
- 二零二五年度實(shí)木復(fù)合地板品牌代理銷售合同4篇
- 2025年物業(yè)管理責(zé)任服務(wù)協(xié)議書(含物業(yè)合同續(xù)簽)3篇
- 體育用品行業(yè)創(chuàng)新商業(yè)模式探索考核試卷
- 2025年農(nóng)村地房產(chǎn)租賃土地租賃協(xié)議
- 2025年度木材加工與木工安裝服務(wù)承包合同4篇
- 2025年體育賽事直播技術(shù)合作協(xié)議
- 土地買賣合同參考模板
- 新能源行業(yè)市場(chǎng)分析報(bào)告
- 2025年天津市政建設(shè)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 房地產(chǎn)運(yùn)營(yíng)管理:提升項(xiàng)目品質(zhì)
- 自愿斷絕父子關(guān)系協(xié)議書電子版
- 你劃我猜游戲【共159張課件】
- 專升本英語(yǔ)閱讀理解50篇
- 中餐烹飪技法大全
- 新型電力系統(tǒng)研究
- 滋補(bǔ)類用藥的培訓(xùn)
- 北師大版高三數(shù)學(xué)選修4-6初等數(shù)論初步全冊(cè)課件【完整版】
評(píng)論
0/150
提交評(píng)論