




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、地圖開發(fā)Day24-一、 本章要搞定的內(nèi)容重點類:1,MapView 地圖視圖類3, BaiduMap 地圖對象類2, MapSusUpdate 地圖狀態(tài)類 4, Lng 坐標點類 5,OverOptions 覆蓋物類二、 準備工作(一)獲取 API Key打開 HYPERLINK http:/d/map/index http:/d/map/index.詳細步驟見 API?title=androidsdk 申請一個 Key HYPERLINK http:/d/map/index http:/d/map/index.?title=androidsdk/guide/key(二)SDK HYPERL
2、INK http:/d/map/index http:/d/map/index.?title=androidsdk/sdkandev-downloado BaiduMap三、(一)創(chuàng)建工程 Android_BaiduMap_01_o(二)添加地圖引擎到 And 工程中第一步:在工程里新建 libs 文件夾,將開發(fā)包里的 baidumapapi_vX_X_X.jar 拷貝到 libs 根目錄下,將 libBaiduMapSDK_vX_X_X.so 拷貝到libsarmeabi 目錄下(官網(wǎng) demo里已有這兩個文件,如果要集成到自己的工程里,就需要自己添加),拷貝完成后的工程目錄如下圖所示;注:
3、liblocSDK6.so 和 locSDK_6.XX.jar 為 定位 SDK 所使用資源,開發(fā)者可根據(jù)實際需求自行添加。第二步:在工程屬性-Java Build Path-Libraries 中選擇“Add External JARs”,選定 baidumapapi_vX_X_X.jar,確定后返回。通過以上兩步操作后,您就可以正常使用地圖SDK 為您提供的全部功能了。注意:由于 adt 插件升級,若您使用 Eclipse adt 22 的話,需要對開發(fā)環(huán)境進行相應的設置,方法如下:1. 在Eclipse 中選中工程,右鍵選 Properties-Java Build Path-Order
4、 and Export 使Android Privaibraries 處于勾選狀態(tài);2. Project - clean- clel .(三)顯示地圖地圖 SDK 為開發(fā)者提供了便捷的顯示地圖數(shù)據(jù)的接口,通過以下幾步操作,即可在您的應用中使用地圖數(shù)據(jù):第一步:創(chuàng)建并配置工程(具體方法參見工程配置部分的介紹);第二步:在 AndroidManifest 中添加開發(fā)密鑰、所需權(quán)限等信息;1)在 application 中添加開發(fā)密鑰2)添加所需權(quán)限uses-permisuses-permisuses-permisuses-permisuses-permisuses-permisuses-permi
5、suses-permisuses-permisuses-permisuses-permisuses-permisuses-permis.USE_CREDENTIALS /.MANAGE_ACCOUNTS /.AUTHENTICATE_ACCOUNTS /.AC.S_NETWORK_SERNET /E /android:name=com.android.launchermis.READ_SETTINGS /android:name=android.permisandroid:name=android.permis android:name=android.permis android:name=
6、android.permis android:name=android.permis android:name=android.permis android:name=android.permis.CHANGE_WIFI_SE /E / E /.ACS_WIFI_S.READ_PHONE_S.WRITE_EXTERNAL_STORAGE /.BROADCAST_STICKY /.WRITE_SETTINGS /.READ_PHONE_SE /3)在布局 xml 文件中添加地圖控件;4)在應用程序創(chuàng)建時初始化 SDK的 Context 全局變量:public class MainActivity
7、 extendivity Override5)創(chuàng)建地圖 Activity,管理地圖生命周期;public class MainActivity extendivity MapView mMapView = null;Overrideprotected void onCreate(Bundle savedInstane) super.onCreate(savedInstane);/在使用 SDK 各組件之前初始化 context 信息,傳入 ApplicationContext/注意該方法要再 setContentView 方法之前實現(xiàn) SDKInitializer.initialize(get
8、ApplicationContext(); setContentView(R.layout.activity_main);/獲取地圖控件mMapView = (MapView) findViewById(R.id.bmapView);Overrideprotected void onDestroy() super.onDestroy();/在 activity 執(zhí)行 onDestroy 時執(zhí)行 mMapView.onDestroy(),實現(xiàn)地圖生命周期管理mMapView.onDestroy();Overrideprotected void onResume() super.onResume(
9、);/在 activity 執(zhí)行 onResume 時執(zhí)行 mMapView. onResume (),實現(xiàn)地圖生命周期管理mMapView.onResume();Overrideprotected void onPause() super.onPause();/在 activity 執(zhí)行 onPause 時執(zhí)行 mMapView. onPause (),實現(xiàn)地圖生命周期管理mMapView.onPause();protected void onCreate(Bundle savedInstane) super.onCreate(savedInstane);/在使用 SDK 各組件之前初始化
10、context 信息,傳入 ApplicationContext/注意該方法要再 setContentView 方法之前實現(xiàn) SDKInitializer.initialize(getApplicationContext(); setContentView(R.layout.activity_main);注意:在 SDK 各功能組件使用之前都需要調(diào)用SDKInitializer.initialize(getApplicationContext();,因此建議該方法放在 Application 的初始化方法中完成以上步驟后,運行程序,即可在您的應用中顯示如下地圖:以上的例子為大家介紹了如何構(gòu)建一
11、個基礎(chǔ)的地圖頁面。地圖控件自 v2.3.5 版本起,支持多實例,即開發(fā)者可以在一個頁面中建立多個地圖對象,并且針對這些對象分別操作且不會產(chǎn)生相互干擾。具體使用方法請參考 MutiMapViewDemo 中的相關(guān)介紹。此外,自 v2.3.5 版本開始。MapView 控件還增加了對 Fragment 框架的支持。用戶可以使用SupportMapFragment 控件完成相應框架內(nèi)的開發(fā)工作(詳見 MapFragmentDemo)6)設置中心點/ 設定中心點坐標Lng po= new Lng(30.459891, 114.436291);/ 定義地圖狀態(tài)MapSMapSus mMapSus= ne
12、w(pous.Builder().).zoom(16).build();/ 定義MapSusUpdate對象,以便描述地圖狀態(tài)將要發(fā)生的變化MapSMapSusUpdate mMapSusUpdate =usUpdateFactory.newMapSus(mMapSus);/ 改變地圖狀態(tài)mBaiduMap.setMapSus(mMapSusUpdate);四、基礎(chǔ)地圖(一)簡介開發(fā)者可利用 SDK 提供的接口,使用為您提供的基礎(chǔ)地圖數(shù)據(jù)。目前地圖 SDK所提供的地圖等級為 3-19 級,所包含的信息有建筑物、道路、河流、學校、公園等內(nèi)容。所有疊加或覆蓋到地圖的內(nèi)容,統(tǒng)稱為地圖覆蓋物。如標注、
13、矢量圖形元素(包括:折線、多邊形和圓等)、定位圖標等。覆蓋物擁有自己的地理坐標,當您拖動或縮放地圖時,它們會相應的移動。地圖 SDK 為廣大開發(fā)者提供的基礎(chǔ)地圖和上面的各種覆蓋物元素,具有一定的層級壓蓋關(guān)系,具體如下(從下至上的順序):1、基礎(chǔ)底圖(包括底圖、底圖道路、 2、地形圖圖層(GroundOverlay);3、熱力圖圖層(HeatMap);圖等);4、實時路況圖圖層(BaiduMap.setTrafficEnabled(true););5、城市熱力圖(BaiduMap.setBaiduHeatMnabled(true);); 了解6、底圖標注(指的是底圖上面自帶的那些 POI 元素)
14、;7、幾何圖形圖層(點、折線、弧線、圓、多邊形);8、標注圖層(Marker),文字繪制圖層(Text);9、指南針圖層(當?shù)貓D發(fā)生旋轉(zhuǎn)和視角變化時,默認出現(xiàn)在左上角的指南針); 10、定位圖層(BaiduMap.setMyLocationEnabled(true););11、彈出窗圖層(InfoWindow);12、自定義 View(MapView.addView(View););(二)地圖類型地圖 Android SDK 為您提供了兩種類型的地圖資源(普通矢量地圖和圖),開發(fā)者可以利用BaiduMap 中的 mapType()方法來設圖類型。代碼如下:(三)實時交通圖當前,范圍內(nèi)已支持多個
15、城市實時路況查詢,且會陸續(xù)開通其他城市。已開通城市列表可查看。在地圖上打開實時路況的代碼如下:(四)城市熱力圖地圖 SDK 繼為廣大開發(fā)者開放熱力圖本地繪制能力之后,再次進一步開放據(jù)的城市熱力圖層,幫助開發(fā)者構(gòu)建形式更加多樣的移動端應用。自有數(shù)城市熱力圖的性質(zhì)及使用與實時交通圖類似,只需要簡單的接口調(diào)用,即可在地圖上展現(xiàn)樣式豐富的在地圖上開啟城市熱力圖。城市熱力圖的代碼如下:mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap();/開啟城市熱力圖mBaiduMap.setBaiduHeatM
16、nabled(true);mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap();/開啟交通圖mBaiduMap.setTrafficEnabled(true);mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap();/普通地圖mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);/地圖mBaiduMap.setMapType(BaiduMap.MA
17、P_TYPE_SALITE);(五)覆蓋物常用類ArcOptions, 弧線覆蓋物 CircleOptions, 圓形 DotOptions, 點狀覆蓋物 GroundOverlayOptions, MarkerOptions, 標注覆蓋物PolygonOptions, 幾何圖形覆蓋物 PolylineOptions, 折線覆蓋物 TextOptions 文字覆蓋物覆蓋物1)標注覆蓋物開發(fā)者可根據(jù)自己實際的業(yè)務需求,利用標注覆蓋物,在地圖指定的位置上添加標注信息。具體實現(xiàn)方法如下:/定義 Maker 坐標點LatLng point = new LatLng(39.963175, 116.400
18、244);/構(gòu)建 Marker 圖標BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);/構(gòu)建 MarkerOption,用于在地圖上添加 MarkerOverlayOptions option = new MarkerOptions().position(point).icon(bitmap);/在地圖上添加 Marker,并顯示mBaiduMap.addOverlay(option);InfoWindow彈出框覆蓋物TextOptionsAttributesP l li
19、O tionsAttributesPolygonOptionsAttributesMarkerOptionsAttributesGdO l Options針對已經(jīng)添加在地圖上的標注,可采用如下方式進行手勢拖拽:第一步,設置可拖拽:第二步,設置方法:/調(diào)用 BaiduMap 對象的 setOnMarkerDragListener 方法設置 marker 拖拽的mBaiduMap.setOnMarkerDragListener(new OnMarkerDragListener() public void onMarkerDrag(Marker marker) /拖拽中public void onM
20、arkerDragEnd(Marker marker) /拖拽結(jié)束public void onMarkerDragStart(Marker marker) /開始拖拽);OverlayOptions options = new MarkerOptions().ition(llA) /設置 marker 的位置.icon(bdA) /設置 marker 圖標.zIndex(9) /設置 marker 所在層級.draggable(true); /設置手勢拖拽/將 marker 添加到地圖上marker = (Marker) (mBaiduMap.addOverlay(options);里面可以使
21、用marker.getition().latitude 得到緯度marker.getition().longitude 得到經(jīng)度針對已添加在地圖上的標注覆蓋物,可利用如下方法進行修改和刪除操作:marker.remove(); /調(diào)用 Marker 對象的 remove 方法實現(xiàn)指定 marker 的刪除 2)幾何圖形覆蓋物地圖 SDK 提供多種結(jié)合圖形覆蓋物,利用這些圖形,可幫助您構(gòu)建更加豐富多彩的地圖應用。目前提供的幾何圖形有:點(Dot)、折線(Polyline)、弧線(Arc)、圓(Circle)、多邊形(Polygon)。下面以多邊形為例,向大家介紹如何使用幾何圖形覆蓋物:/定義多邊
22、形的五個頂點L ng pt1 = new L ng(39.93923, 116.357428); L ng pt2 = new L ng(39.91923, 116.327428); L ng pt3 = new L ng(39.89923, 116.347428); L ng pt4 = new L ng(39.89923, 116.367428); L ng pt5 = new L ng(39.91923, 116.387428);List pts = new ArrayList(); pts.add(pt1);pts.add(pt2);pts.add(pt3);pts.add(pt4);
23、pts.add(pt5);/構(gòu)建用戶繪制多邊形的 Option 對象OverlayOptions polygonOption = new PolygonOptions().pos(pts).stroke(new Stroke(5, 0 xAA00FF00).fillColor(0 xAAF00);/在地圖上添加多邊形 Option,用于顯示mBaiduMap.addOverlay(polygonOption);3)文字覆蓋物文字,在地圖中也是一種覆蓋物,開發(fā)者可利用相關(guān)的接口,快速實現(xiàn)在地圖需求。實現(xiàn)方式如下:寫文字的/定義文字所顯示的坐標點Lng llText = new Lng(39.86
24、923, 116.397428);/構(gòu)建文字 Option 對象,用于在地圖上添加文字OverlayOptions textOption = new TextOptions().bgColor(0 xAAF00) /注意顏色.fontSize(24).fontColor(0 xF00FF).text(就看你出不出來).roe(-30).ition(llText);/在地圖上添加該文字對象并顯示mBaiduMap.addOverlay(textOption);4)彈出窗覆蓋物彈出窗覆蓋物的實現(xiàn)方式如下,開發(fā)者可利用此接口,構(gòu)建具有更強交互性的地圖頁面。下圖為點擊 Marker 彈出 InfoWi
25、ndow 的示例圖,開發(fā)者只需將 InfoWindow 的顯示方法寫在 Maker 的點擊事件處理中即可實現(xiàn)該效果。 mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() OverridepubliconMarkerClick(Marker arg0) / 顯示InfoWindow mBaiduMap.showInfoWindow(mInfoWindow); return true;);/創(chuàng)建 InfoWindow 展示的 viewButton button = new Button(getApplicationConte
26、xt(); button.setBackgroundResource(R.drawable.popup);/定義用于顯示該 InfoWindow 的坐標點Lng pt = new Lng(39.86923, 116.397428);/創(chuàng)建 InfoWindow , 傳入 view, 地理坐標, y 軸偏移量InfoWindow mInfoWindow = new InfoWindow(button, pt, -47);/顯示 InfoWindowmBaiduMap.showInfoWindow(mInfoWindow);(六)地形圖圖層地形圖圖層(GroundOverlay),又可叫做圖層,即
27、開發(fā)者可在地圖的指定位置上添加圖片。該可隨地圖的平移、縮放、旋轉(zhuǎn)等操作做相應的變換。該圖層是一種特殊的 Overlay,它位于底圖和底圖標注層之間(即該圖層不會遮擋地圖標注信息)。在地圖中添加使用地形圖覆蓋物的方式如下:/定義 Ground 的顯示地理范圍Lng southwest = new Lng(39.92235, 116.380338); Lng northeast = new Lng(39.947246, 116.414977); LngBounds bounds = new LngBounds.Builder().include(northeast).include(southwe
28、st).build();/定義 Ground 顯示的BitmapDescriptor bdGround = BitmapDescriptorFactory.fromResource(R.drawable.ground_overlay);/定義 Ground 覆蓋物選項OverlayOptions ooGround = new GroundOverlayOptions().itionFromBounds(bounds).image(bdGround).transparency(0.8f);/在地圖中添加 Ground 覆蓋物mBaiduMap.addOverlay(ooGround);(七)熱力
29、圖功能(了解)熱力圖是用不同顏色的區(qū)塊疊加在地圖上描述人群分布、密度和變化趨勢的一個產(chǎn)品,地圖 SDK 將繪制熱力圖的能力為廣大開發(fā)者開放,幫助開發(fā)者利用自有數(shù)據(jù),構(gòu)建屬于自己的熱力圖,提供豐富的展示效果。利用熱力圖功能構(gòu)建自有數(shù)據(jù)熱力圖的方式如下:第一步,設置顏色變化:第二步,準備數(shù)據(jù):第三步,添加、顯示熱力圖:/在大量熱力圖數(shù)據(jù)情況下,build 過程相對較慢,建議放在新建線程實現(xiàn)HeatMap heatmap = new HeatMap.Builder().data(randomList).gradient(gradient).build();/以下數(shù)據(jù)為隨機生成地理位置點,開發(fā)者根據(jù)自
30、己的實際業(yè)務,傳入自有位置數(shù)據(jù)即可List randomList = new ArrayList(); Random r = new Random();for (i = 0; i 500; i+) / 116.220000,39.780000 116.570000,40.150000rlat = r.next(370000); rlng = r.next(370000); lat = 39780000 + rlat; lng = 116220000 + rlng;Lng ll = new Lng(lat / 1E6, lng / 1E6); randomList.add(ll);/設置漸變顏色
31、值 DEFAULT_GRADIENT_COLORS = Color.rgb(102, 225, 0), Color.rgb (255, 0, 0) ;/設置漸變顏色起始值float DEFAULT_GRADIENT_START_POS = 0.2f, 1f ;/構(gòu)造顏色漸變對象Gradient gradient = new Gradient(DEFAULT_GRADIENT_COLORS, DEFAULT_GRADIENT_START_POS);第四步,刪除熱力圖:heatmap.removeHeatMap();/在地圖上添加熱力圖mBaiduMap.addHeatMap(heatmap);(
32、八)檢索結(jié)果覆蓋物針對檢索功能模塊(POI 檢索、線路規(guī)劃等),地圖 SDK 還對外提供相應的覆蓋物來快速展示結(jié)果信息。這些方法都是開源的,開發(fā)者可根據(jù)自己的實際去求來做個性化的定制。利用檢索結(jié)果覆蓋物展示POI 搜索結(jié)果的方式如下:第一步,構(gòu)造自定義 PoiOverlay 類;第二步,在POI 檢索回調(diào)接口中添加自定義的 PoiOverlay;public void onGetPoiResult(PoiResult result) if (result = null | result.error = SearchResult.ERRORNO.RESU LT_NOT_FOUND) return
33、;if (result.error = SearchResult.ERRORNO.NO_ERROR) mBaiduMap.clear();/創(chuàng)建 PoiOverlayPoiOverlay overlay = new MyPoiOverlay(mBaiduMap);/設置 overlay 可以處理標注點擊事件mBaiduMap.setOnMarkerClickListener(overlay);/設置 PoiOverlay 數(shù)據(jù)overlay.setData(result);/添加 PoiOverlay 到地圖中 overlay.addToMap(); overlay.zoomToSpan();
34、 return;private class MyPoiOverlay extends PoiOverlay public MyPoiOverlay(BaiduMap baiduMap) super(baiduMap);OverridepubliconPoiClick(index) super.onPoiClick(index); return true;(九)利用 TransitRouteOverlay 展示換乘結(jié)果運行結(jié)果如下:/在線路規(guī)劃回調(diào)方法中添加 TransitRouteOverlay 用于展示換乘信息public void onGetTransitRouteResult(Trans
35、itRouteResult result) if (result = null | result.error != SearchResult.ERRORNO.NO_E RROR) /未找到結(jié)果return;if (result.error = SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR)/起終點或途經(jīng)點地址有岐義,通過以下接口獲取建議查詢信息/result.getSuggestAddrInfo()return;if (result.error = SearchResult.ERRORNO.NO_ERROR) route = result.getRouin
36、es().get(0);/創(chuàng)建路線規(guī)劃線路覆蓋物TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBa idumap);/設置路線規(guī)劃數(shù)據(jù)overlay.setData(route);/將路線規(guī)劃覆蓋物添加到地圖中 overlay.addToMap(); overlay.zoomToSpan();(十)實現(xiàn)線路規(guī)劃/ 處理搜索按鈕響應EditText editSt = (EditText) findViewById(R.id.start); EditText editEn = (EditText) findViewById(R.i
37、d.end);/ 設置起終點信息,對于tranist search 來說,城市名無意義PlanNode stNode = PlanNode.withCityNameAndPlaceName(, editSt.getText().toString(); PlanNode enNode = PlanNode.withCityNameAndPlaceName(, editEn.getText().toString();/ 實際使用中請對起點終點城市進行正確的設定if (v.getId() = R.id.drive) mSearch.(new DrivingRoutePlanOption().from(stNode).t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人網(wǎng)上商店銷售平臺運營合作協(xié)議
- 返聘協(xié)議書書范本
- 建筑企業(yè)借款合同書
- 公司合并吸收轉(zhuǎn)讓協(xié)議書
- 生物醫(yī)藥市場分析與營銷試題
- 服裝店鋪協(xié)議書
- 月嫂定金協(xié)議書
- 軟件委托研發(fā)合同協(xié)議
- 通風排煙施工合同協(xié)議
- 輕鋼工程分包合同協(xié)議
- 基建科室面試題及答案
- 廣西地方公路養(yǎng)護工程預算定額
- 儒林外史名著試題及答案
- 姐妹間房屋轉(zhuǎn)讓合同協(xié)議
- 國開電大軟件工程形考作業(yè)3參考答案 (一)
- 2025年11.0C-雙基地感知關(guān)鍵技術(shù)研究與驗證白皮書-未來移動通信論壇
- 刑事退賠和解協(xié)議書
- 《天津T建設集團公司應收賬款管理問題及完善對策研究》9800字(論文)
- 箱式變電站及相關(guān)配套電力設施項目可行性研究報告申請報告套用
- 2024年汽車維修案例分析方法試題及答案
- 地質(zhì)災害地震課件
評論
0/150
提交評論