百度地图SDK Android版开发 6 显示覆盖物
前言
在地图应用中,Overlay
(覆盖层)是指在地图图层之上叠加显示的额外信息层。这些覆盖层可以用来展示各种数据,如交通状况、用户位置、兴趣点(POI)等。在百度地图SDK中,可以使用多种类型的覆盖层来增强地图的功能和视觉效果。文本介绍简单的点线面和文本覆盖物使用方法和属性。
地图类中覆盖物的接口
BaiduMap
类中添加和删除Overlay
的接口:
类型 |
方法 |
说明 |
Overlay |
addOverlay (OverlayOptions options) |
向地图添加一个 Overlay |
java.util.List< Overlay > |
addOverlays (List< OverlayOptions > options) |
向地图添加多个 Overlay |
void |
clear () |
清空地图所有的 Overlay 覆盖物以及 InfoWindow |
void |
removeOverLays (List< Overlay > overlays) |
批量删除添加的多个 Overlay |
覆盖物类
类型 |
说明 |
覆盖物类 |
选项 |
点 |
定义地图 Marker 覆盖物 |
Marker |
MarkerOptions |
折线 |
定义地图折线覆盖物 |
Polyline |
PolylineOptions |
多边形 |
定义地图中绘制多边形 |
Polygon |
PolygonOptions |
弧线 |
定义了在地图上绘制弧线的类。三点坐标确定一条弧线 |
Arc |
ArcOptions |
圆 |
定义在地图上画一个圆的类 |
Circle |
CircleOptions |
文本 |
定义在地图中绘制的文字覆盖物 |
Text |
TextOptions |
Marker示例
java
复制代码
// 定义Maker坐标点
LatLng point = new LatLng(39.963175, 116.400244);
// 构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.icon_mark_a);
// 构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap);
// 在地图上添加Marker,并显示
Marker marker = (Marker) map.addOverlay(option);
Polyline示例
java
复制代码
// 构建折线点坐标
LatLng p1 = new LatLng(39.97923, 116.357428);
LatLng p2 = new LatLng(39.94923, 116.397428);
LatLng p3 = new LatLng(39.97923, 116.437428);
List<LatLng> points = new ArrayList<LatLng>();
points.add(p1);
points.add(p2);
points.add(p3);
// 设置折线的属性
OverlayOptions polylineOptions = new PolylineOptions()
.width(10)
.color(0xAA00FF00)
.points(points);
// 在地图上绘制折线
Polyline polyline = (Polyline) map.addOverlay(polylineOptions);
Polygon示例
java
复制代码
// 多边形顶点位置
List<LatLng> points = new ArrayList<>();
points.add(new LatLng(39.93923, 116.357428));
points.add(new LatLng(39.91923, 116.327428));
points.add(new LatLng(39.89923, 116.347428));
points.add(new LatLng(39.89923, 116.367428));
points.add(new LatLng(39.91923, 116.387428));
// 构造PolygonOptions
PolygonOptions polygonOptions = new PolygonOptions()
.points(points)
.fillColor(0xAAFFFF00) // 填充颜色
.stroke(new Stroke(5, 0xAA00FF00)); // 边框宽度和颜色
// 在地图上显示多边形
Polygon polygon = (Polygon) map.addOverlay(polygonOptions);
Arc示例
java
复制代码
// 添加弧线坐标数据
LatLng p1 = new LatLng(39.97923, 116.357428); // 起点
LatLng p2 = new LatLng(40.00923, 116.397428); // 中间点
LatLng p3 = new LatLng(39.97923, 116.437428); // 终点
// 构造ArcOptions对象
OverlayOptions arcOptions = new ArcOptions()
.color(Color.RED)
.width(10)
.points(p1, p2, p3);
// 在地图上显示弧线
Arc arc = (Arc) map.addOverlay(arcOptions);
Circle示例
java
复制代码
// 圆心位置
LatLng center = new LatLng(39.90923, 116.447428);
// 构造CircleOptions对象
CircleOptions mCircleOptions = new CircleOptions().center(center)
.radius(1400)
.fillColor(0xAAFFFF00) // 填充颜色
.stroke(new Stroke(5, 0xAA00ff00)); // 边框宽和边框颜色
// 在地图上显示圆
Circle circle = (Circle) map.addOverlay(mCircleOptions);
overlays.add(circle);
Text示例
java
复制代码
// 文字覆盖物位置坐标
LatLng llText = new LatLng(39.86923, 116.397428);
// 构建TextOptions对象
OverlayOptions textOptions = new TextOptions()
.text("百度地图SDK") // 文字内容
.bgColor(0xAAFFFF00) // 背景色
.fontSize(28) // 字号
.fontColor(0xFFFF0000) // 文字颜色
.rotate(0) // 旋转角度
.position(llText);
// 在地图上显示文字覆盖物
Text text = (Text) map.addOverlay(textOptions);
效果图
Marker的更多属性
常用属性
类型 |
方法 |
说明 |
MarkerOptions |
icon (BitmapDescriptor icon) |
设置 Marker 覆盖物的图标,相同图案的 icon 的 marker 最好使用同一个 BitmapDescriptor 对象以节省内存空间。 |
MarkerOptions |
position (LatLng position) |
设置 marker 覆盖物的位置坐标 |
MarkerOptions |
alpha (float alpha) |
设置 Marker 覆盖物图标的透明度,取值为[0,1],默认1.0,若超出范围则默认为1.0 |
MarkerOptions |
perspective (boolean perspective) |
设置是否开启 marker 覆盖物近大远小效果,默认开启 |
MarkerOptions |
flat (boolean flat) |
设置 marker设置 是否平贴地图 |
MarkerOptions |
anchor (float anchorX, float anchorY) |
绘制方式升级为overlay2.0后,该接口不生效,替换接口:setLocate 设置 marker 覆盖物的锚点比例,默认(0.5f, 1.0f)水平居中,垂直下对齐 |
MarkerOptions |
setLocate (int locate) |
v7.6.0新增接口 设置marker 覆盖物的锚点位置 绘制方式升级为overlay2.0后,使用该方法替换anchor |
MarkerOptions |
rotate (float rotate) |
设置 marker 覆盖物旋转角度,逆时针 |
MarkerOptions |
visible (boolean visible) |
设置 marker 覆盖物的可见性 |
MarkerOptions |
extraInfo (Bundle extraInfo) |
设置 marker 覆盖物的额外信息 |
交互
- 启用可点击时,在点击
Marker
时,会回调BaiduMap.OnMarkerClickListener
。
- 启用允许拖拽时,在拖拽
Marker
时,会回调BaiduMap.OnMarkerDragListener
。
类型 |
方法 |
说明 |
MarkerOptions |
clickable (boolean isClickable) |
设置Marker是否可点击 |
MarkerOptions |
draggable (boolean draggable) |
设置 marker 是否允许拖拽,默认不可拖拽 |
碰撞
- 自 7.5.0 起地图SDK支持marker碰撞策略 功能,并兼容之前的marker绘制功能,只有打开isJoinCollision开关才进行碰撞策略。
marker碰撞策略可检测屏幕中海量marker的碰撞情况,并自动更新marker状态,确保屏幕中的marker互不碰撞。
- 自v7.5.7起,百度地图SDK支持Marker及其title可碰撞地图poi。
类型 |
方法 |
说明 |
MarkerOptions |
isJoinCollision (boolean isJoinCollision) |
是否参与碰撞,默认值为false |
MarkerOptions |
isForceDisPlay (boolean display) |
参与碰撞后是否强制展示,默认值为false |
MarkerOptions |
priority (int priority) |
设置marker碰撞时的显示优先级,默认值为整型的最大值 |
MarkerOptions |
startLevel (int startLevel) |
最小展示层级,默认值为4 |
MarkerOptions |
endLevel (int endLevel) |
最大展示层级,室内默认22,室外默认21 |
MarkerOptions |
poiCollided (boolean isCollied) |
设置是否碰撞底图POI |
动画
- 自v3.3.0版本起,SDK提供了给Marker增加帧动画的功能,通过MarkerOptions类来设置,一次传入一个Icon列表,通过period设定刷新的帧间隔。
- 自v3.6.0版本起,SDK提供了加载Marker时的动画效果,有如下四种效果供开发者选择。
- 除了可以自定义的帧动画,Marker还支持设置旋转、缩放、平移、透明、和组合动画效果。通过Marker类setAnimation方法设置。
类型 |
方法 |
说明 |
MarkerOptions |
icons (ArrayList< BitmapDescriptor > icons) |
设置 Marker 覆盖物的图标,相同图案的 icon 的 marker 最好使用同一个 BitmapDescriptor 对象以节省内存空间。 |
MarkerOptions |
period (int period) |
设置多少帧刷新一次图片资源,Marker动画的间隔时间,值越小动画越快 |
MarkerOptions |
interval (int mInterval) |
v7.6.0新增接口 设置marker多帧图片播放时间间隔(ms) 地图绘制方式升级为overlay2.0时,该接口生效 |
MarkerOptions |
animateType (MarkerOptions.MarkerAnimateType type) |
设置marker动画类型,见 MarkerAnimateType(从天上掉下,从地下生长,跳跃),默认无动画 |
其它属性
类型 |
方法 |
说明 |
MarkerOptions |
height (int height) |
设置3D marker的高度值 |
MarkerOptions |
fixedScreenPosition (Point point) |
|
MarkerOptions |
infoWindow (InfoWindow infoWindow) |
设置 Marker 绑定的InfoWindow |
MarkerOptions |
richView (RichView richView) |
v7.6.0 新增接口 添加marker上方的ui |
MarkerOptions |
scaleX (float scaleX) |
设置 Marker 覆盖物X方向缩放 |
MarkerOptions |
scaleY (float scaleY) |
设置 Marker 覆盖物X方向缩放 |
MarkerOptions |
setDrawableResource (BmDrawableResource resource) |
|
MarkerOptions |
xOffset (int xOffset) |
设置Marker坐标的X偏移量 |
MarkerOptions |
yOffset (int yOffset) |
设置Marker坐标的Y偏移量 |
MarkerOptions |
zIndex (int zIndex) |
设置 marker 覆盖物的 zIndex |
折线的更多属性
常用属性
类型 |
方法 |
说明 |
PolylineOptions |
width (int width) |
设置折线线宽, 默认为 5, 单位:像素 需要注意的是:Polyline的宽度适配地图当前缩放级别下的像素与地理范围的对应关系 |
PolylineOptions |
color (int color) |
设置折线颜色 |
PolylineOptions |
points (List< LatLng > points) |
设置折线坐标点列表 |
PolylineOptions |
colorsValues (List< Integer > colors) |
设置折线每个点的颜色值,每一个点带一个颜色值,绘制时按照索引依次取值 颜色个数 >= points的个数,若colors越界大于点个数,则取最后一个颜色绘制 注意颜色值得格式为:0xAARRGGBB,透明度值在前 |
PolylineOptions |
customTexture (BitmapDescriptor customTexture) |
设置自定义纹理 |
PolylineOptions |
customTextureList (List< BitmapDescriptor > customTextureList) |
设置折线多纹理分段绘制的纹理队列 |
PolylineOptions |
textureIndex (List< Integer indexList) |
设置折线每个点的纹理索引 每一个点带一个索引,List中的值代表customTextureList(List<com.baidu.mapapi.map.BitmapDescriptor>)中纹理图片所在的索引(下标), 绘制时按照索引从customTextureList里面取。 |
PolylineOptions |
visible (boolean visible) |
设置折线可见性 |
PolylineOptions |
extraInfo (Bundle extraInfo) |
设置折线额外信息 |
PolylineOptions |
dottedLine (boolean dottedLine) |
设置折线是否虚线 |
PolylineOptions |
dottedLineType (PolylineDottedLineType polylineDottedLineType) |
设置Polyline的虚线类型 |
交互
类型 |
方法 |
说明 |
PolylineOptions |
clickable (boolean isClickable) |
设置Polyline是否可点击 |
其它
类型 |
方法 |
说明 |
PolylineOptions |
isGeodesic (boolean isGeodesic) |
设置是否绘制为大地曲线 |
PolylineOptions |
isGradient (boolean isGradient) |
设置是否绘制为渐变色 |
PolylineOptions |
bloomType (PolylineOptions.LineBloomType lineBloomType) |
添加发光效果 默认不发光 |
PolylineOptions |
bloomWidth (int width) |
设置发光下的线段宽度,宽度 >0 默认普通线宽 * 2 |
PolylineOptions |
bloomAlpha (int alpha) |
设置发光下线段透明度(0~255) 默认线段透明度 255 |
PolylineOptions |
setBloomGradientASpeed (float speed) |
设置透明度渐变发光效果的渐变速率(1.0 ~ 10.0)默认5.0f |
PolylineOptions |
setBloomBlurTimes (int times) |
设置模糊发光效果的模糊次数(1~10) 默认1次 |
类型 |
方法 |
说明 |
PolylineOptions |
focus (boolean focus) |
|
PolylineOptions |
isThined (boolean isThined) |
设置是否需要对Polyline的坐标数据进行抽稀 , 默认抽稀 |
PolylineOptions |
keepScale (boolean isKeep) |
设置纹理宽、高是否保持原比例渲染 默认为false |
PolylineOptions |
lineCapType (PolylineOptions.LineCapType lineCapType) |
设置Polyline头尾形状类型 |
PolylineOptions |
lineDirectionCross180 (PolylineOptions.LineDirectionCross180 lineDirectionCross180) |
设置Polyline跨越180度的方向。 |
PolylineOptions |
lineJoinType (PolylineOptions.LineJoinType lineJoinType) |
设置Polyline拐点衔接的形状类型 |
PolylineOptions |
zIndex (int zIndex) |
设置折线的叠压顺序,按照值升序叠压 |
多边形的更多属性
常用属性
类型 |
方法 |
说明 |
PolygonOptions |
stroke (Stroke stroke) |
设置多边形边框信息 |
PolygonOptions |
dottedStroke (boolean dottedStroke) |
设置是否绘制虚线边框 |
PolygonOptions |
dottedStrokeType (PolylineDottedLineType polylineDottedStrokeType) |
设置Polygon的虚线Stroke类型 |
PolygonOptions |
fillColor (int color) |
设置多边形填充颜色 |
PolygonOptions |
points (List< LatLng > points) |
设置多边形坐标点列表 |
交互
类型 |
方法 |
说明 |
PolygonOptions |
setClickable (boolean isClickable) |
设置Polygon是否可点击 |
其它
类型 |
方法 |
说明 |
PolygonOptions |
addHoleOption (HoleOptions holeOption) |
设置Polygon的镂空形状选项 |
PolygonOptions |
addHoleOptions (List< HoleOptions > holeOptions) |
设置Polygon的镂空形状列表 |
PolygonOptions |
extraInfo (Bundle extraInfo) |
设置多边形额外信息 |
PolygonOptions |
visible (boolean visible) |
设置多边形可见性 |
PolygonOptions |
zIndex (int zIndex) |
设置多边形 zIndex |
PolygonOptions |
points (String encodedPoints, EncodePointType type) |
设置加密后的位置信息,解密类型 |
Arc的更多属性
类型 |
方法 |
说明 |
ArcOptions |
color (int color) |
设置弧线的颜色 |
ArcOptions |
width (int width) |
设置弧线的线宽 |
ArcOptions |
points (LatLng start, LatLng middle, LatLng end) |
设置弧线的起点、中点、终点坐标 |
ArcOptions |
extraInfo (Bundle extraInfo) |
设置弧线的额外信息 |
ArcOptions |
setClickable (boolean isClickable) |
设置Arc是否可点击 |
ArcOptions |
visible (boolean visible) |
设置弧线是否可见 |
ArcOptions |
zIndex (int zIndex) |
设置弧线的 zIndex |
Circle的更多属性
类型 |
方法 |
说明 |
CircleOptions |
radius (int radius) |
设置圆半径 |
CircleOptions |
fillColor (int color) |
设置圆填充颜色 |
CircleOptions |
stroke (Stroke stroke) |
设置圆边框信息 |
CircleOptions |
dottedStroke (boolean dottedStroke) |
设置是否绘制虚线圆边框 |
CircleOptions |
dottedStrokeType (CircleDottedStrokeType circleDottedStrokeType) |
设置Circle的虚线Stroke类型 |
CircleOptions |
center (LatLng center) |
设置圆心坐标 |
CircleOptions |
setIsGradientCircle (boolean isGradientCircle) |
设置是否为渐变圆 true 需要 ,false 不需要 如设置true 渐变规则如下: (0 ~ radiusWeight * radius) 该部分颜色从 centerColor 渐变至 colorWeight * (sideColor - centerColor); (radiusWeight * radius ~ radius)该部分间颜色从 colorWeight * (sideColor - centerColor) 渐变至 sideColor; 注意:渐变圆不支持镂空及fillColor |
CircleOptions |
setSideColor (int sideColor) |
设置边缘颜色 |
CircleOptions |
setCenterColor (int centerColor) |
设置中心颜色 |
CircleOptions |
addHoleOption (HoleOptions holeOption) |
设置Circle的镂空形状选项 |
CircleOptions |
addHoleOptions (List< HoleOptions > holeOptions) |
设置Circle的镂空形状列表 |
CircleOptions |
extraInfo (Bundle extraInfo) |
设置圆额外信息 |
CircleOptions |
setClickable (boolean isClickable) |
设置Circle是否可点击 |
CircleOptions |
setColorWeight (float colorWeight) |
设置颜色权重 |
CircleOptions |
setRadiusWeight (float radiusWeight) |
设置半径权重 |
CircleOptions |
visible (boolean visible) |
设置圆是否可见 |
CircleOptions |
zIndex (int zIndex) |
设置圆 zIndex 信息 |
Text的更多属性
类型 |
方法 |
说明 |
TextOptions |
text (String text) |
设置文字覆盖物的文字内容 |
TextOptions |
bgColor (int bgColor) |
设置文字覆盖物背景颜色 |
TextOptions |
fontSize (int size) |
设置文字覆盖物字体大小 |
TextOptions |
fontColor (int color) |
设置文字覆盖物字体颜色,默认黑色 |
TextOptions |
rotate (float rotate) |
设置文字覆盖物旋转角度,逆时针 |
TextOptions |
position (LatLng position) |
设置文字覆盖物地理坐标 |
TextOptions |
setClickable (boolean isClickable) |
设置Text是否可点击 |
TextOptions |
align (int alignX, int alignY) |
设置文字覆盖物对齐方式,默认居中对齐 v7.6.0后,若升级地图绘制方式为overlay2.0,该接口无效,替换接口为setLocate |
TextOptions |
setLocate (int locate) |
v7.6.0新增接口 设置文字覆盖物对齐方式, 默认居中 |
TextOptions |
typeface (Typeface typeface) |
设置文字覆盖物字体 升级地图绘制方式为overlay2.0后,该方法无效,替换方法为typeFaceType |
TextOptions |
typeFaceType (int typeface) |
v7.6.0新增接口 升级地图绘制方式为overlay2.0后,该方法生效 |
TextOptions |
bgBitmapDescriptor (BitmapDescriptor bitmapDescriptor) |
设置text背景图片 7.6.0新增接口 绘制方式升级为overlay2.0时,必须设置该接口才可以设置text背景颜色 |
TextOptions |
extraInfo (Bundle extraInfo) |
设置文字覆盖物额外信息 |
TextOptions |
visible (boolean visible) |
设置文字覆盖物可见性 |
TextOptions |
zIndex (int zIndex) |
设置文字覆盖物 zIndex |