浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
绘制点标记
下载开发文档

本章节将对点标记、添加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);
点击Marker
绘制自定义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);

效果如图:

自定义Marker示例
注:自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) {
}
});

效果如图:

Marker拖拽事件
底图标注

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

mBaiduMap.showMapPoi(false);

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

底图标注
Marker碰撞策略

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

Marker碰撞策略的主要属性如下:
属性类型说明
isJoinCollisionboolean是否参与碰撞,默认值为false
isForceDisplayboolean参与碰撞后是否强制展示,默认值为false
priorityint碰撞优先级,默认值为整型的最大值
startLevelint最小展示层级,默认值为4
endLevelint最大展示层级,室内默认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,就自动开启碰撞策略,示例图如下:

碰撞策略执行前

碰撞策略执行前

碰撞策略执行后

碰撞策略执行后
3DMarker

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

3DMarker

添加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新增如下属性:

属性名说明
titleOptionstitle选项
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);

效果如下:

上一篇

元素压盖顺序

下一篇

绘制线

本篇文章对您是否有帮助?