開發者可利用SDK提供的接口,使用百度為您提供的基礎地圖數據。目前百度地圖SDK所提供的地圖等級為3-21級,所包含的信息有建筑物、道路、河流、學校、公園等內容。
V3.7.0起,地圖支持縮放至21級,暫不支持衛星圖、熱力圖、交通路況圖層的21級顯示,打開以上類型圖層,地圖會自動縮放到20級。
所有疊加或覆蓋到地圖的內容,我們統稱為地圖覆蓋物。如標注、矢量圖形元素(包括:折線、多邊形和圓等)、定位圖標等。覆蓋物擁有自己的地理坐標,當您拖動或縮放地圖時,它們會相應的移動。
百度地圖SDK為廣大開發者提供的基礎地圖和上面的各種覆蓋物元素,具有一定的層級壓蓋關系,具體如下(從下至上的順序):
1、基礎底圖(包括底圖、底圖道路、衛星圖等);
2、瓦片圖層(TileOverlay);
3、地形圖圖層(GroundOverlay);
4、熱力圖圖層(HeatMap);
5、實時路況圖圖層(BaiduMap.setTrafficEnabled(true););
6、百度城市熱力圖(BaiduMap.setBaiduHeatMapEnabled(true););
7、底圖標注(指的是底圖上面自帶的那些POI元素);
8、幾何圖形圖層(點、折線、弧線、圓、多邊形);
9、標注圖層(Marker),文字繪制圖層(Text);
10、指南針圖層(當地圖發生旋轉和視角變化時,默認出現在左上角的指南針);
11、定位圖層(BaiduMap.setMyLocationEnabled(true););
12、彈出窗圖層(InfoWindow);
13、自定義View(MapView.addView(View););
地圖類型
百度地圖Android?SDK為您提供了3種類型的地圖資源(普通矢量地圖、衛星圖和空白地圖),開發者可以利用BaiduMap中的mapType()方法來設置地圖類型。核心代碼如下:
[java]?view plaincopy print?
mMapView?=?(MapView)?findViewById(R.id.bmapView);????mBaiduMap?=?mMapView.getMap();?????????mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);?????????mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);?????????mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);?? 實時交通圖
當前,全國范圍內已支持多個城市實時路況查詢,且會陸續開通其他城市。
在地圖上打開實時路況的核心代碼如下:
[java]?view plaincopy print?
mMapView?=?(MapView)?findViewById(R.id.bmapView);????mBaiduMap?=?mMapView.getMap();??????mBaiduMap.setTrafficEnabled(true);?? 百度城市熱力圖
百度地圖SDK繼為廣大開發者開放熱力圖本地繪制能力之后,再次進一步開放百度自有數據的城市熱力圖層,幫助開發者構建形式更加多樣的移動端應用。
百度城市熱力圖的性質及使用與實時交通圖類似,只需要簡單的接口調用,即可在地圖上展現樣式豐富的百度城市熱力圖。
在地圖上開啟百度城市熱力圖的核心代碼如下:
[java]?view plaincopy print?
mMapView?=?(MapView)?findViewById(R.id.bmapView);????mBaiduMap?=?mMapView.getMap();??????mBaiduMap.setBaiduHeatMapEnabled(true);?? 地圖控制和手勢
地圖控制
地圖Logo
通過mMapView.setLogoPosition(LogoPosition.logoPostionleftBottom);方法,使用枚舉類型控制顯示的位置,共支持6個顯示位置(左下,中下,右下,左上,中上,右上)。
- 地圖Logo不允許遮擋,可通過mBaiduMap.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);方法可以設置地圖邊界區域,來避免UI遮擋。
其中參數paddingLeft、paddingTop、paddingRight、paddingBottom參數表示距離屏幕邊框的左、上、右、下邊距的距離,單位為屏幕坐標的像素密度。
指南針
指南針默認為開啟狀態,可以關閉顯示 。
比例尺
比例尺默認為開啟狀態,可以關閉顯示。同時支持設置MaxZoomLevel和minZoomLevel,可通過mMapView.getMapLevel獲取當前地圖級別下比例尺所表示的距離大小。
地圖手勢
地圖平移
控制是否啟用或禁用平移的功能,默認開啟。如果啟用,則用戶可以平移地圖
地圖縮放
控制是否啟用或禁用縮放手勢,默認開啟。如果啟用,用戶可以雙指點擊或縮放地圖視圖。
地圖俯視(3D)
控制是否啟用或禁用俯視(3D)功能,默認開啟。如果啟用,則用戶可使用雙指 向下或向上滑動到俯視圖。
地圖旋轉
控制是否啟用或禁用地圖旋轉功能,默認開啟。如果啟用,則用戶可使用雙指 旋轉來旋轉地圖。
禁止所有手勢
控制是否一并禁止所有手勢,默認關閉。如果啟用,所有手勢都將被禁用。
標注覆蓋物
地圖標注
開發者可根據自己實際的業務需求,利用標注覆蓋物,在地圖指定的位置上添加標注信息。具體實現方法如下:
//定義Maker坐標點
LatLng point
= new LatLng
(39.963175,
116.400244);
//構建Marker圖標
BitmapDescriptor bitmap
= BitmapDescriptorFactory .
fromResource(R.
drawable.
icon_marka);
//構建MarkerOption,用于在地圖上添加Marker
OverlayOptions option
= new MarkerOptions
() .
position(point
) .
icon(bitmap
);
//在地圖上添加Marker,并顯示
mBaiduMap.
addOverlay(option
); 針對已經添加在地圖上的標注,可采用如下方式進行手勢拖拽:
第一步,設置可拖拽:
OverlayOptions options
= new MarkerOptions
().
position(llA
) //設置marker的位置.
icon(bdA
) //設置marker圖標.
zIndex(9) //設置marker所在層級.
draggable(true); //設置手勢拖拽
//將marker添加到地圖上
marker
= (Marker
) (mBaiduMap.
addOverlay(options
)); 第二步,設置監聽方法: [java]?view plaincopy print?
??mBaiduMap.setOnMarkerDragListener(new?OnMarkerDragListener()?{??????public?void?onMarkerDrag(Marker?marker)?{????????????????}??????public?void?onMarkerDragEnd(Marker?marker)?{????????????????}??????public?void?onMarkerDragStart(Marker?marker)?{????????????????}??});?? 自v3.3.0版本起,SDK提供了給Marker增加動畫的能力,具體實現方法如下: [java]?view plaincopy print?
??ArrayList<BitmapDescriptor>?giflist?=?new?ArrayList<BitmapDescriptor>();??giflist.add(bdA);??giflist.add(bdB);??giflist.add(bdC);??OverlayOptions?ooD?=?new?MarkerOptions().position(pt).icons(giflist)??????????????????.zIndex(0).period(10);????mMarkerD?=?(Marker)?(mBaiduMap.addOverlay(ooD));????針對已添加在地圖上的標注覆蓋物,可利用如下方法進行修改和刪除操作:????marker.remove();???????自v3.6.0版本起,SDK提供了給加載Marker增加動畫的能力,加載maker時包含兩種加載動畫方式:從地上生長和從天上落下。????以生長動畫為例,具體實現方法如下:????MarkerOptions?ooD?=?new?MarkerOptions().position(llD).icons(giflist)??????????????????.zIndex(0).period(10);???if?(animationBox.isChecked())?{??????????????ooD.animateType(MarkerAnimateType.grow);???}???Marker??mMarkerD?=?(Marker)?(mBaiduMap.addOverlay(ooD));????自v3.6.0版本起,SDK提供了給Marker設置透明度的方法,具體實現方法如下:????MarkerOptions?ooA?=?new?MarkerOptions().position(llD).icons(giflist)??????????????????.zIndex(0).period(10).alpha(0.5);??mBaiduMap.addOverlay(ooA);????具體源碼請在OverlayDemo中查看。??? 點聚合功能
自v3.6.0版本起,新增點聚合功能,可通過縮小地圖層級,將定義范圍內的多個標注點,聚合顯示成一個標注點,并在MarkerClusterDemo中開放源碼,方便開發者自行修改。
[java]?view plaincopy print?
??ClusterManager?mClusterManager?=?new?ClusterManager<>(this,?mBaiduMap);????LatLng?llA?=?new?LatLng(39.963175,?116.400244);??List<MyItem>?items?=?new?ArrayList<>();??items.add(new?MyItem(llA));??mClusterManager.addItems(items);?? 具體源碼請在MarkerClusterDemo中查看。
底圖標注
自v3.6.0版本起,SDK在BaiduMap提供了控制底圖標注的showMapPoi方法,默認顯示底圖標注。利用此屬性可得到僅顯示道路信息的地圖,方法如下:
[java]?view plaincopy print?
??mBaiduMap.showMapPoi(false)?? 運行后,底圖標注被隱藏,效果如圖: 幾何圖形覆蓋物
地圖SDK提供多種結合圖形覆蓋物,利用這些圖形,可幫助您構建更加豐富多彩的地圖應用。目前提供的幾何圖形有:點(Dot)、折線(Polyline)、弧線(Arc)、圓(Circle)、多邊形(Polygon)。
下面以多邊形為例,向大家介紹如何使用幾何圖形覆蓋物:
[java]?view plaincopy print?
??LatLng?pt1?=?new?LatLng(39.93923,?116.357428);????LatLng?pt2?=?new?LatLng(39.91923,?116.327428);????LatLng?pt3?=?new?LatLng(39.89923,?116.347428);????LatLng?pt4?=?new?LatLng(39.89923,?116.367428);????LatLng?pt5?=?new?LatLng(39.91923,?116.387428);????List<LatLng>?pts?=?new?ArrayList<LatLng>();????pts.add(pt1);????pts.add(pt2);????pts.add(pt3);????pts.add(pt4);????pts.add(pt5);??????OverlayOptions?polygonOption?=?new?PolygonOptions()????????.points(pts)????????.stroke(new?Stroke(5,?0xAA00FF00))????????.fillColor(0xAAFFFF00);??????mBaiduMap.addOverlay(polygonOption);?? 運行結果如下: Android地圖SDK自v3.5.0版本起,新增了折線多段顏色繪制能力,實現的核心代碼如下:
[java]?view plaincopy print?
??BitmapDescriptor?custom1?=?BitmapDescriptorFactory??????????????????.fromResource(R.drawable.icon_road_red_arrow);??BitmapDescriptor?custom2?=?BitmapDescriptorFactory??????????????????.fromResource(R.drawable.icon_road_green_arrow);??BitmapDescriptor?custom3?=?BitmapDescriptorFactory??????????????????.fromResource(R.drawable.icon_road_blue_arrow);????LatLng?pt1?=?newLatLng(39.93923,?116.357428);??LatLng?pt2?=?newLatLng(39.91923,?116.327428);??LatLng?pt3?=?newLatLng(39.89923,?116.347428);??LatLng?pt4?=?newLatLng(39.89923,?116.367428);??LatLng?pt5?=?newLatLng(39.91923,?116.387428);???????List<BitmapDescriptor>customList?=?newArrayList<BitmapDescriptor>();??customList.add(custom1);??customList.add(custom2);??customList.add(custom3);?????List<LatLng>?points?=?newArrayList<LatLng>();??List<Integer>?index?=?newArrayList<Integer>();??points.add(pt1);??index.add(0);??points.add(pt2);??index.add(0);??points.add(pt3);??index.add(1);??points.add(pt4);??index.add(2);??points.add(pt5);????OverlayOptionsooPolyline?=?newPolylineOptions().width(15).color(0xAAFF0000).points(points).customTextureList(customList).textureIndex(index);????mBaiduMap.addOverlay(ooPolyline);?? 效果圖如下: 自v3.6.0版本起,擴展了折線多段顏色繪制能力:增加支持分段紋理繪制、分段顏色繪制,實現的核心代碼如下:
構造PolylineOptions對象,添加折線分段顏色繪制覆蓋物,核心代碼如下:
[java]?view plaincopy print?
??List<LatLng>?points?=?new?ArrayList<LatLng>();??points.add(new?LatLng(39.965,116.404));??points.add(new?LatLng(39.925,116.454));??points.add(new?LatLng(39.955,116.494));??points.add(new?LatLng(39.905,116.554));??points.add(new?LatLng(39.965,116.604));???????List<Integer>?colors?=?new?ArrayList<>();??colors.add(Integer.valueOf(Color.BLUE));??colors.add(Integer.valueOf(Color.RED));??colors.add(Integer.valueOf(Color.YELLOW));??colors.add(Integer.valueOf(Color.GREEN));?????OverlayOptions?ooPolyline?=?new?PolylineOptions().width(10)??????????.colorsValues(colors).points(points);??添加在地圖中??Polyline??mPolyline?=?(Polyline)?mBaiduMap.addOverlay(ooPolyline);?? 檢索結果覆蓋物
針對檢索功能模塊(POI檢索、線路規劃等),地圖SDK還對外提供相應的覆蓋物來快速展示結果信息。這些方法都是開源的,開發者可根據自己的實際去求來做個性化的定制。
利用檢索結果覆蓋物展示POI搜索結果的方式如下:
第一步,構造自定義 PoiOverlay 類;
[java]?view plaincopy print?
private?class?MyPoiOverlay?extends?PoiOverlay?{????????public?MyPoiOverlay(BaiduMap?baiduMap)?{????????????super(baiduMap);????????}????????@Override????????public?boolean?onPoiClick(int?index)?{????????????super.onPoiClick(index);????????????return?true;????????}????}?? 第二步,在POI檢索回調接口中添加自定義的PoiOverlay; [java]?view plaincopy print?
public?void?onGetPoiResult(PoiResult?result)?{????????if?(result?==?null?||?result.error?==?SearchResult.ERRORNO.RESULT_NOT_FOUND)?{????????????return;????????}????????if?(result.error?==?SearchResult.ERRORNO.NO_ERROR)?{????????????mBaiduMap.clear();??????????????????????PoiOverlay?overlay?=?new?MyPoiOverlay(mBaiduMap);??????????????????????mBaiduMap.setOnMarkerClickListener(overlay);??????????????????????overlay.setData(result);??????????????????????overlay.addToMap();????????????overlay.zoomToSpan();????????????return;????????}????}?? 運行結果如下: 利用TransitRouteOverlay展示公交換乘結果:
[java] view plaincopy print?
??public?void?onGetTransitRouteResult(TransitRouteResult?result)?{????????if?(result?==?null?||?result.error?!=?SearchResult.ERRORNO.NO_ERROR)?{??????????????????????return;????????}????????if?(result.error?==?SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR)?{????????????????????????????????return;????????}????????if?(result.error?==?SearchResult.ERRORNO.NO_ERROR)?{????????????route?=?result.getRouteLines().get(0);??????????????????????TransitRouteOverlay?overlay?=?new?MyTransitRouteOverlay(mBaidumap);??????????????????????overlay.setData(route);??????????????????????overlay.addToMap();????????????overlay.zoomToSpan();???????}????}?? 運行結果如下:
轉載:http://blog.csdn.net/chaoyu168/article/details/51360899
總結
以上是生活随笔為你收集整理的Android--百度地图之基础地图(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。