浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

Android 地图SDK

百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。

本章节将对点标记、添加Marker、绘制自定义Marker、批量添加和删除Marker、Marker拖拽操作、点聚合、控制地图标注显示(包括POI和ICON)等做进一步的说明。
点标记

点标记用来在地图上标记任何位置,例如用户位置、车辆位置、店铺位置等一切带有位置属性的事物。

地图 SDK 提供的点标记功能包含两大部分,一部分是点(俗称 Marker)、另一部分是浮于点上方的信息窗体(俗称 InfoWindow)。同时,SDK 对 Marker 和 InfoWindow 封装了大量的触发事件,例如点击事件、长按事件、拖拽事件。

由于内容丰富,以下只能展示一些基础功能的使用,详细内容可分别参考官方参考手册。

添加Marker

开发者可根据自己实际的业务需求,利用标注覆盖物,在地图指定的位置上添加标注信息。

具体实现方法如下:

//定义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);

addMarker1.png

绘制自定义Marker

可根据实际的业务需求,在地图指定的位置上添加自定义的 Marker。MarkerOptions 是设置 Marker 参数变量的类,添加 Marker 时会经常用到。

支持的Marker常用属性如下:

名称 说明
icon 设置图标
animateType 动画类型
alpha 透明度
position 位置坐标
perspective 是否开启近大远小效果
draggable 是否可拖拽
flat 是否平贴地图
anchor 锚点比例
rotate 旋转角度
title 设置标题
visible 是否可见
extraInfo 额外信息

具体使用源码请在OverlayDemo中查看。

自V3.6.0起,原内置覆盖物相关类代码开源

覆盖物开源代码中提供了一些基于基础覆盖而组合而成的高级覆盖物,包括用于显示poi数据,规划路线,公交详情路线的覆盖物。

OverlayManager /PoiOverlay / IndoorPoiOverlay /IndoorRouteOverlay /TransitRouteOverlay /WalkingRouteOverlay /BikingRouteOverlay /DrivingRouteOverlay /BusLineOverlay /MassTransitRouteOverlay / 以上源码可在BaiduMapsApiDemo工程中找到。

批量添加和删除Marker

批量添加

下面以同时添加两个Marker为例

//创建OverlayOptions的集合

List<OverlayOptions> options = new ArrayList<OverlayOptions>();
//设置坐标点

        LatLng point1 = new LatLng(39.92235, 116.380338);
        LatLng point2 = new LatLng(39.947246, 116.414977);

//创建OverlayOptions属性

        OverlayOptions option1 =  new MarkerOptions()
                .position(point1)
                .icon(bdA);
        OverlayOptions option2 =  new MarkerOptions()
                .position(point2)
                .icon(bdA);
//将OverlayOptions添加到list
        options.add(option1);
        options.add(option2);
        //在地图上批量添加
        mBaiduMap.addOverlays(options);

批量删除

mBaiduMap.clear();

//清除地图上所有覆盖物,无法分成批删除

实现拖拽Marker

针对已经添加在地图上的标注,可采用如下方式进行手势拖拽:

1设置可拖拽:
OverlayOptions options = new MarkerOptions()
    .position(llA)  //设置Marker的位置
    .icon(bdA)  //设置Marker图标
    .zIndex(9)  //设置Marker所在层级
    .draggable(true);  //设置手势拖拽

//将Marker添加到地图上

marker = (Marker) (mBaiduMap.addOverlay(options));

2设置监听方法:
//调用BaiduMap对象的setOnMarkerDragListener方法设置Marker拖拽的监听
mBaiduMap.setOnMarkerDragListener(new OnMarkerDragListener() {
    public void onMarkerDrag(Marker marker) {
        //拖拽中
    }
    public void onMarkerDragEnd(Marker marker) {
        //拖拽结束
    }
    public void onMarkerDragStart(Marker marker) {
        //开始拖拽
    }
});

点聚合

自v3.6.0版本起,新增点聚合功能,可通过缩小地图层级,将定义范围内的多个标注点,聚合显示成一个标注点,并在MarkerClusterDemo中开放源码,方便开发者自行修改。

 // 初始化点聚合管理类

ClusterManager mClusterManager = new ClusterManager<>(this, mBaiduMap);

// 向点聚合管理类中添加Marker实例

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方法,默认显示底图标注。利用此属性可得到仅显示道路信息的地图,方法如下:

 // 将底图标注设置为隐藏,方法如下:

mBaiduMap.showMapPoi(false)

运行后,底图标注被隐藏,效果如图:

Markreproduction1.png