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

WebAPI文档全面上新

新增示例代码、在线运行等功能,帮助您实现快速接入,前往体验吧!

体验新版
更新时间:2023-04-10
本章节将对点标记、添加Marker、绘制自定义Marker、Marker点击和拖拽操作、POI底图标注等作进一步说明。
点标记

点标记用来在地图上标记任何位置,例如用户位置、车辆位置、店铺位置等一切带有位置属性的事物。
地图 SDK 提供的点标记功能包含两大部分,一部分是点(俗称 Marker)同时,SDK 对 Marker 封装了大量的触发事件,例如点击事件、长按事件、拖拽事件。
由于内容丰富,以下只能展示一些基础功能的使用,详细内容可参考类参考文档。

添加Marker

开发者可以根据自己实际的业务需求,利用标注覆盖物,在地图指定的位置上添加标注信息。开发者通过MarkerOptions类来设置Marker的属性。

绘制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);

Screenshot_20200610_161054_baidumapsdk.demo.jpg

绘制自定义Marker

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

Marker常用属性:

名称 说明
icon 设置图标
animateType 动画类型 MarkerAnimateType.none
MarkerAnimateType.drop
MarkerAnimateType.grow
MarkerAnimateType.jump
alpha 透明度
position 位置坐标
perspective 是否开启近大远小效果 true
false
draggable 是否可拖拽
flat 是否平贴地图 (俯视图)(双手下拉地图查看效果) true
false
anchor 锚点比例
rotate 旋转角度
title 设置标题
visible 是否可见
extraInfo 额外信息

自定义Marker示例

//定义Maker坐标点
LatLng point = new LatLng(39.944251, 116.494996);
//构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory
        .fromResource(R.drawable.marker_custom);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions()
        .position(point) //必传参数
        .icon(bitmap) //必传参数
        .draggable(true)
//设置平贴地图,在地图中双指下拉查看效果
        .flat(true)
        .alpha(0.5f);
//在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);

效果如图:

Screenshot_20200610_120142_com.baidu.mapsdkexample.jpg

注:自V3.6.0起,原内置覆盖物相关类代码开源
覆盖物开源代码中提供了一些基于基础覆盖而组合而成的高级覆盖物,包括用于显示poi数据,规划路线,公交详情路线的覆盖物。 OverlayManager /PoiOverlay / IndoorPoiOverlay /IndoorRouteOverlay /TransitRouteOverlay /WalkingRouteOverlay /BikingRouteOverlay /DrivingRouteOverlay /BusLineOverlay /MassTransitRouteOverlay / 以上源码可在BaiduMapsApiDemo工程中找到。
可触发的Marker事件

Marker点击事件

点击Marker时会回调BaiduMap.OnMarkerClickListener,监听器的实现方式示例如下:

mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
    //marker被点击时回调的方法
    //若响应点击事件,返回true,否则返回false
    //默认返回false
    @Override
    public boolean onMarkerClick(Marker marker) {
        return false;
    }
});

Marker拖拽事件

在拖拽Marker时会回调BaiduMap.OnMarkerDragListener,监听器的实现方式如下(要在构造MarkerOptions时开启draggable):

mBaiduMap.setOnMarkerDragListener(new BaiduMap.OnMarkerDragListener() {

            //在Marker拖拽过程中回调此方法,这个Marker的位置可以通过getPosition()方法获取
            //marker 被拖动的Marker对象
            @Override
            public void onMarkerDrag(Marker marker) {
                 //对marker处理拖拽逻辑               
            }

            //在Marker拖动完成后回调此方法, 这个Marker的位可以通过getPosition()方法获取
            //marker 被拖拽的Marker对象
            @Override
            public void onMarkerDragEnd(Marker marker) {

            }

            //在Marker开始被拖拽时回调此方法, 这个Marker的位可以通过getPosition()方法获取
            //marker 被拖拽的Marker对象
            @Override
            public void onMarkerDragStart(Marker marker) {

            }
});


效果如图:

Screenshot_20200610_112649_baidumapsdk.demo.jpg

底图标注

自V3.6.0版本起,SDK在BaiduMap提供了控制底图标注的showMapPoi方法,默认显示底图标注。利用此属性可得到仅显示道路信息的地图,方法如下:

 mBaiduMap.showMapPoi(false);

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

Screenshot_20200609_172353_baidumapsdk.demo.jpg

Marker碰撞策略

Android 7.5.0 起地图SDK支持marker碰撞策略功能,并兼容之前的marker绘制功能,只有打开isJoinCollision开关才进行碰撞策略。
marker碰撞策略可检测屏幕中海量marker的碰撞情况,并自动更新marker状态,确保屏幕中的marker互不碰撞。 

Marker碰撞策略的主要属性如下:

属性 
类型
说明
isJoinCollision
boolean
是否参与碰撞,默认值为false
isForceDisplay
boolean
参与碰撞后是否强制展示,默认值为false
priority
int
碰撞优先级,默认值为整型的最大值
startLevel 
int
最小展示层级,默认值为4 
endLevel 
int
最大展示层级,室内默认22,室外默认21

实现marker碰撞策略前,请提前准备好带经纬度信息的数据集,具体实现方式如下:

LatLng latlng = new LatLng(39.94871, 116.43784); 
markerOptions = new MarkerOptions() 
        .position(latlng)// 设置marker经纬度坐标 
        .icon(bitmap)// 设置 Marker 覆盖物的图标 
       
        .isJoinCollision(true)// 设置marker参与碰撞 
        .isForceDisPlay(true) //设置压盖时 marker强制展示 
        .priority(9)//设置碰撞优先级为9 
         
mMarker = (Marker) (mBaiduMap.addOverlay(markerOptions));//将marker添加到地图上  
只要将marker的isJoinCollision设为true,并添加marker,就自动开启碰撞策略,示例图如下:

碰撞策略执行前

marker_20220121_1.png

碰撞策略执行后

marker_20220121_2.png

3DMarker
      更新时间:2020-09-20

Android 7.5.2 起 地图SDK提供3D Marker绘制功能,支持对带高度的Marker覆盖物绘制,以满足更多场景需求。如下示例图就是将3D Marker绘制到3D建筑物上,并与3D建筑物绑定。 示例图如下

3DMarker.jpg

添加3D Marker的流程如下:
1、设置3D Marker高度:

Int height = 100; // 

2、将带有高度的Marker的位置信息转换成二维屏幕坐标:

Point srcPoint = projection.geoPoint3toScreenLocation(new LatLng(23.008468, 113.72953), 100);

3、再将二维屏幕坐标转换成对应的经纬度坐标:

LatLng latLng = projection.fromScreenLocation(srcPoint)

之后就可以像添加普通覆盖物一样将3D Marker添加到地图上了。

Marker添加title

自v7.5.7起,百度地图SDK支持Marker覆盖物添加title功能,支持自定义Marker的title样式,包括:title大小、title颜色、title背景框颜色、title锚点、title偏移量、title旋转角度等。
通过创建TitleOptions为Marker添加title,TitleOptions有如下属性:

属性名 说明
titleBgColor
文字背景框颜色
titleFrontColor
文字颜色
titleFrontSize
文字大小
titleAnchorX
文字X锚点
titleAnchorY
文字Y锚点
titileOffsetX
文字水平偏移量
titileOffsetY
文字竖直偏移量
titleRotate
文字旋转角度


Marker碰撞POI

自v7.5.7起,百度地图SDK支持Marker及其title可碰撞地图poi。
Marker新增如下属性:

属性名
说明
titleOptions
title选项
poiCollided
是否碰撞poi


Marker添加title并碰撞poi示例代码:

TitleOptions titleOptions = new TitleOptions()
                .text("我是A")
                .titleBgColor(Color.RED)
                .titleFontSize(48);
MarkerOptions markerOptions = new MarkerOptions()
        .position(point) // 设置 Marker 覆盖物坐标
        .titleOptions(titleOptions) // 设置 Marker 覆盖物文字
        .icon(bitmap)// 设置 Marker 覆盖物的图标
        .poiCollided(true); // 设置marker是否能碰撞poi
mBaiduMap.addOverlay(markerOptions);
                
                


效果如下:
https://mapopen-pub-androidsdk.cdn.bcebos.com/map/7_5_7/point_mark.mp4
  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

如发现文档错误,或对此文档有更好的建议,请在下方反馈。问题咨询请前往反馈平台提交工单咨询。

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消