百度地图SDK Android版开发 6 显示覆盖物

百度地图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
相关推荐
拭心5 小时前
Google 提供的 Android 端上大模型组件:MediaPipe LLM 介绍
android
带电的小王7 小时前
WhisperKit: Android 端测试 Whisper -- Android手机(Qualcomm GPU)部署音频大模型
android·智能手机·whisper·qualcomm
梦想平凡7 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
元争栈道8 小时前
webview和H5来实现的android短视频(短剧)音视频播放依赖控件
android·音视频
阿甘知识库9 小时前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站
元争栈道9 小时前
webview+H5来实现的android短视频(短剧)音视频播放依赖控件资源
android·音视频
MuYe9 小时前
Android Hook - 动态加载so库
android
居居飒10 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
Henry_He13 小时前
桌面列表小部件不能点击的问题分析
android
工程师老罗13 小时前
Android笔试面试题AI答之Android基础(1)
android