本章节将对点标记、添加marker、绘制自定义marker、marker点击和拖拽操作、poi底图标注等作进一步说明。
点标记用来在地图上标记任何位置,例如用户位置、车辆位置、店铺位置等一切带有位置属性的事物。
地图 sdk 提供的点标记功能包含两大部分,一部分是点(俗称 marker)同时,sdk 对 marker 封装了大量的触发事件,例如点击事件、长按事件、拖拽事件。
由于内容丰富,以下只能展示一些基础功能的使用,详细内容可参考类参考文档。
开发者可以根据自己实际的业务需求,利用标注覆盖物,在地图指定的位置上添加标注信息。开发者通过markeroptions类来设置marker的属性。
绘制marker的代码如下:
//定义maker坐标点latlng point =newlatlng(39.963175,116.400244);//构建marker图标bitmapdescriptor bitmap =bitmapdescriptorfactory.fromresource(r.drawable.icon_marka);//构建markeroption,用于在地图上添加markeroverlayoptions option =newmarkeroptions().position(point).icon(bitmap);//在地图上添加marker,并显示mbaidumap.addoverlay(option);
可根据实际的业务需求,在地图指定的位置上添加自定义的 marker。markeroptions 是设置 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 | 额外信息 |
//定义maker坐标点latlng point =newlatlng(39.944251,116.494996);//构建marker图标bitmapdescriptor bitmap =bitmapdescriptorfactory.fromresource(r.drawable.marker_custom);//构建markeroption,用于在地图上添加markeroverlayoptions option =newmarkeroptions().position(point)//必传参数.icon(bitmap)//必传参数.draggable(true)//设置平贴地图,在地图中双指下拉查看效果.flat(true).alpha(0.5f);//在地图上添加marker,并显示mbaidumap.addoverlay(option);
效果如图:
marker点击事件
点击marker时会回调baidumap.onmarkerclicklistener,监听器的实现方式示例如下:
mbaidumap.setonmarkerclicklistener(newbaidumap.onmarkerclicklistener(){//marker被点击时回调的方法//若响应点击事件,返回true,否则返回false//默认返回false@overridepublic boolean onmarkerclick(marker marker){returnfalse;}});
marker拖拽事件
在拖拽marker时会回调baidumap.onmarkerdraglistener,监听器的实现方式如下(要在构造markeroptions时开启draggable):
mbaidumap.setonmarkerdraglistener(newbaidumap.onmarkerdraglistener(){//在marker拖拽过程中回调此方法,这个marker的位置可以通过getposition()方法获取//marker 被拖动的marker对象@overridepublicvoidonmarkerdrag(marker marker){//对marker处理拖拽逻辑}//在marker拖动完成后回调此方法, 这个marker的位置可以通过getposition()方法获取//marker 被拖拽的marker对象@overridepublicvoidonmarkerdragend(marker marker){}//在marker开始被拖拽时回调此方法, 这个marker的位置可以通过getposition()方法获取//marker 被拖拽的marker对象@overridepublicvoidonmarkerdragstart(marker marker){}});
效果如图:
自v3.6.0版本起,sdk在baidumap提供了控制底图标注的showmappoi方法,默认显示底图标注。利用此属性可得到仅显示道路信息的地图,方法如下:
mbaidumap.showmappoi(false);
运行后,底图标注被隐藏,效果如图:
android 7.5.0 起地图sdk支持marker碰撞策略功能,并兼容之前的marker绘制功能,只有打开isjoincollision开关才进行碰撞策略。
marker碰撞策略可检测屏幕中海量marker的碰撞情况,并自动更新marker状态,确保屏幕中的marker互不碰撞。
属性 | 类型 | 说明 |
---|---|---|
isjoincollision | boolean | 是否参与碰撞,默认值为false |
isforcedisplay | boolean | 参与碰撞后是否强制展示,默认值为false |
priority | int | 碰撞优先级,默认值为整型的最大值 |
startlevel | int | 最小展示层级,默认值为4 |
endlevel | int | 最大展示层级,室内默认22,室外默认21 |
实现marker碰撞策略前,请提前准备好带经纬度信息的数据集,具体实现方式如下:
latlng latlng =newlatlng(39.94871,116.43784);markeroptions =newmarkeroptions().position(latlng)// 设置marker经纬度坐标.icon(bitmap)// 设置 marker 覆盖物的图标.isjoincollision(true)// 设置marker参与碰撞.isforcedisplay(true)//设置压盖时 marker强制展示.priority(9)//设置碰撞优先级为9mmarker =(marker)(mbaidumap.addoverlay(markeroptions));//将marker添加到地图上
只要将marker的isjoincollision设为true,并添加marker,就自动开启碰撞策略,示例图如下:
碰撞策略执行前
碰撞策略执行后
android 7.5.2 起 地图sdk提供3d marker绘制功能,支持对带高度的marker覆盖物绘制,以满足更多场景需求。如下示例图就是将3d marker绘制到3d建筑物上,并与3d建筑物绑定。 示例图如下
添加3d marker的流程如下:
1、设置3d marker高度:
int height =100;
2、将带有高度的marker的位置信息转换成二维屏幕坐标:
point srcpoint = projection.geopoint3toscreenlocation(newlatlng(23.008468,113.72953),100);
3、再将二维屏幕坐标转换成对应的经纬度坐标:
latlng latlng = projection.fromscreenlocation(srcpoint)
之后就可以像添加普通覆盖物一样将3d marker添加到地图上了。
自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 | 文字旋转角度 |
自v7.5.7起,百度地图sdk支持marker及其title可碰撞地图poi。
marker新增如下属性:
属性名 | 说明 |
---|---|
titleoptions | title选项 |
poicollided | 是否碰撞poi |
marker添加title并碰撞poi示例代码:
titleoptions titleoptions =newtitleoptions().text("我是a").titlebgcolor(color.red).titlefontsize(48);markeroptions markeroptions =newmarkeroptions().position(point)// 设置 marker 覆盖物坐标.titleoptions(titleoptions)// 设置 marker 覆盖物文字.icon(bitmap)// 设置 marker 覆盖物的图标.poicollided(true);// 设置marker是否能碰撞poimbaidumap.addoverlay(markeroptions);
效果如下:
上一篇
下一篇
本篇文章对您是否有帮助?