百度地图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示例
LatLng point = new LatLng(39.963175, 116.400244);
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.icon_mark_a);
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap);
Marker marker = (Marker) map.addOverlay(option);
Polyline示例
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示例
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 = new PolygonOptions()
.points(points)
.fillColor(0xAAFFFF00)
.stroke(new Stroke(5, 0xAA00FF00));
Polygon polygon = (Polygon) map.addOverlay(polygonOptions);
Arc示例
LatLng p1 = new LatLng(39.97923, 116.357428);
LatLng p2 = new LatLng(40.00923, 116.397428);
LatLng p3 = new LatLng(39.97923, 116.437428);
OverlayOptions arcOptions = new ArcOptions()
.color(Color.RED)
.width(10)
.points(p1, p2, p3);
Arc arc = (Arc) map.addOverlay(arcOptions);
Circle示例
LatLng center = new LatLng(39.90923, 116.447428);
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示例
LatLng llText = new LatLng(39.86923, 116.397428);
OverlayOptions textOptions = new TextOptions()
.text("百度地图SDK")
.bgColor(0xAAFFFF00)
.fontSize(28)
.fontColor(0xFFFF0000)
.rotate(0)
.position(llText);
Text text = (Text) map.addOverlay(textOptions);
效果图
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b6a8cae3bc294cf8b5cbc128da15c32c.png#pic_center)
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 |