腾讯地图SDK Android版开发 6 显示覆盖物

前言

在地图应用中,Overlay(覆盖层)是指在地图图层之上叠加显示的额外信息层。这些覆盖层可以用来展示各种数据,如交通状况、用户位置、兴趣点(POI)等。在腾讯地图SDK中,可以使用多种类型的覆盖层来增强地图的功能和视觉效果。文本介绍简单的点线面覆盖物使用方法和属性。

地图类中覆盖物的接口

  • TencentMap类中添加Overlay的接口:
类型方法说明
MarkeraddMarker(MarkerOptions options)添加标注(Marker)
PolylineaddPolyline(PolylineOptions options)添加线
PolygonaddPolygon(PolygonOptions options)添加多边形
ArcaddArc(ArcOptions options)添加弧线
CircleaddCircle(CircleOptions options)添加圆
  • TencentMap类中删除Overlay的接口:
类型方法说明
voidclearAllOverlays()清除地图上所有的标注类(Marker、Polyline、Polygon,TileOverlay除外)
  • 覆盖物类移除接口Removable
类型方法说明
voidremove();从地图移除覆盖物
booleanisRemoved();
voidreleaseData();

覆盖物类

类型覆盖物类选项
MarkerMarkerOptions
折线PolylinePolylineOptions
多边形PolygonPolygonOptions
弧线ArcArcOptions
CircleCircleOptions

Marker示例

// 定义Maker坐标点
LatLng point = new LatLng(39.963175, 116.400244);
// 构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory
        .fromResource(R.drawable.icon_mark_a);
// 构建MarkerOption,用于在地图上添加Marker
MarkerOptions option = new MarkerOptions(point)
        .position(point)
        .icon(bitmap);
// 在地图上添加Marker,并显示
Marker marker = map.addMarker(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<>();
points.add(p1);
points.add(p2);
points.add(p3);

// 设置折线的属性
PolylineOptions polylineOptions = new PolylineOptions()
        .width(10)
        .color(0xAA00FF00)
        .addAll(points);
// 在地图上绘制折线
Polyline polyline = map.addPolyline(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 polygonOptions = new PolygonOptions()
        .addAll(points)
        .fillColor(0xAAFFFF00) // 填充颜色
        .strokeColor(0xAA00FF00) // 边框颜色
        .strokeWidth(5); // 边框宽度

// 在地图上显示多边形
Polygon polygon = map.addPolygon(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); // 终点

// 构造ArcOptions对象
ArcOptions arcOptions = new ArcOptions()
        .color(Color.RED)
        .width(10)
        .points(p1, p3)
        .pass(p2);

// 在地图上显示弧线
Arc arc = map.addArc(arcOptions);

Circle示例

// 圆心位置
LatLng center = new LatLng(39.90923, 116.447428);

// 构造CircleOptions对象
CircleOptions circleOptions = new CircleOptions()
        .center(center)
        .radius(1400)
        .fillColor(0xAAFFFF00) // 填充颜色
        .strokeColor(0xAA00ff00) // 边框颜色
        .strokeWidth(5); // 边框宽度

// 在地图上显示圆
Circle circle = map.addCircle(circleOptions);

移除示例

// 清除地图上所有的标注类(Marker、Polyline、Polygon,TileOverlay除外)
map.clearAllOverlays();
marker.remove();
polyline.remove();
polygon.remove();
arc.remove();
circle.remove();

效果图

在这里插入图片描述

Marker的更多属性

点标记,是在地图上用来标记一个经纬度坐标的覆盖物,包括点图标和浮在点之上的信息窗(常称之为InfoWindow)。腾讯地图SDK为点标记提供了丰富的样式和场景使用。

腾讯地图SDK提供很多默认的Marker样式,通过TencentMap添加Marker接口,即可添一个默认样式的Marker。

Marker marker = mTencentMap.addMarker(new MarkerOptions(position));

开发者如果想自定义Marker的样式属性,可以通过两个阶段进行修改:

  1. 创建Marker对象之前,可以通过修改MarkerOptions选项来初始化Marker
  2. 创建Marker对象之后,可以通过Marker对象,来修改属性

常用属性

类型方法说明
MarkerOptionsicon(BitmapDescriptor icon)设置标注的样式
MarkerOptionsposition(LatLng latlng)设置标注的位置
MarkerOptionsalpha(float alpha)设置标注的透明度
MarkerOptionsflat(boolean flat)设置是不是3D标注,3D标注会随着地图倾斜面倾斜
MarkerOptionsanchor(float anchorU, float anchorV)设置标注的锚点
MarkerOptionsclockwise(boolean clockwise)旋转角度是否沿顺时针方向
MarkerOptionsrotation(float rotation)设置标注的旋转角度
MarkerOptionsvisible(boolean flag)设置标注是否可见

交互

  • 启用可点击时,在点击Marker时,会回调TencentMap.OnMarkerClickListener
  • 启用允许拖拽时,在拖拽Marker时,会回调TencentMap.OnMarkerDragListener
类型方法说明
MarkerOptionsdraggable(boolean flag)设置标注是否可以被拖动

碰撞

腾讯地图SDK4.4.1版本起,支持点标记与地图POI元素的碰撞功能,当开启碰撞功能时,与点标记重合的POI元素将会被隐藏。

类型方法说明
MarkerOptionscollisionBy(MarkerCollisionItem… item)设置可被碰撞的类型,默认无碰撞关系 构造子MarkerMarkerCollisionRelationUnit时,如果主Marker的getCollisionRelation() == MarkerCollisionRelation.TOGETHER,碰撞类型不支持配置,默认使用主Marker的碰撞类型
MarkerOptionssetCollisionRelation(MarkerCollisionRelation collisionRelation)设置碰撞关联类型

动画

  • Marke支持轮播的功能,通过MarkersetIconLooper方法来传入轮播图数组,并通过MarkerOptionsiconLooper设定轮播模式。
  • Marker还支持Animation动画,目前支持平移、缩放、旋转、渐变四种。通过Marker类setAnimation方法设置。
类型方法说明
MarkerOptionsiconLooper(boolean enable)设置图标轮播模式, 默认周期时长为300ms
MarkerOptionsiconLooper(boolean enable, int duration)设置图标轮播模式

其它属性

类型方法说明
MarkerOptionstitle(String s)设置标注的InfoWindow(气泡)的标题,如果设置了 TencentMap.setInfoWindowAdapter(TencentMap.InfoWindowAdapter) 则失效
MarkerOptionssnippet(String snippet)设置标注的InfoWindow(气泡)的内容,如果设置了 TencentMap.setInfoWindowAdapter(TencentMap.InfoWindowAdapter) 则失效
MarkerOptionsinfoWindowEnable(boolean enabled)设置标注是否可以弹出InfoWindow(气泡)
MarkerOptionsviewInfoWindow(boolean enabled)设置此 marker 的 infowindow 是否用 view 实现 infowindow
MarkerOptionsinfoWindowAnchor(float u, float v)设置infowindow anchor point
MarkerOptionsinfoWindowOffset(int offsetX, int offsetY)设置InfoWindow的偏移,在基准(InfoWindow在Marker正上方中间处显示 —— 默认位置)上偏移 方向:向右,向下为正方向,向左,向上为负方向
MarkerOptionsinfoWindowCollisionBy(MarkerCollisionItem… infoWindowCollisions)设置InfoWindow 可被碰撞的类型,默认无碰撞关系
MarkerOptionszIndex(float zIndex)设置相同显示Level level(int) 的Marker的堆叠顺序,相同显示level,zIndex越大越靠上显示 level优先级大于zIndex
MarkerOptionslevel(int level)设置Marker的显示Level,level用于控制Marker与楼块,道路,POI的显示层级关系。
MarkerOptionstag(Object tag)设置标签对象
MarkerOptionsindoorInfo(IndoorInfo indoorInfo)为Marker添加室内图信息(buildingId,floorName) 当添加室内图信息后,Marker将会随着绑定的室内图状态改变而展示和隐藏
MarkerOptionsfastLoad(boolean fastLoad)设置是否允许 marker 快速加载,默认此选项为 true 如果当前屏幕内有大量 marker 动态变化其 icon 可能会有性能问题 可以尝试关闭不需要此功能的 marker,关闭此功能后可能导致切换 icon 时闪烁
MarkerOptionscontentDescription(String contentDescription)设置无障碍相关描述信息

折线的更多属性

线是由一组经纬度点按照一定的顺序连接而成,在地图上绘制线由 Polyline 类定义实现。通常用来表示一段路、轨迹等线型场景。

常用属性

类型方法说明
PolylineOptionswidth(float width)设置线宽度
PolylineOptionscolor(int i)设置线的颜色
PolylineOptionsalpha(float a)设置透明度
PolylineOptionsadd(LatLng[] latLngs)添加顶点
PolylineOptionsadd(LatLng latlng, LatLng… args)添加顶点
PolylineOptionsaddAll(Iterable< LatLng > latLngs)添加顶点
PolylineOptionslatLngs(List< LatLng > listLatlngs)设置折线坐标
PolylineOptionsupdatePoints(Iterable< LatLng > latLngs)添加顶点,该方法会清空原来顶点集合
PolylineOptionscolors(int[] colors, int[] indexes)设置线的分段颜色
PolylineOptionscolorTexture(BitmapDescriptor bitmapDescriptor)注意:1、当调用此接口,且LineType不为LINE_TYPE_DOTTEDLINE时,color和colors接口指定的值代表用此接口设置纹理的第几像素行,以绘制纹理线。2、当调用此接口,且LineType设置为LINE_TYPE_DOTTEDLINE时,绘制线时会连续绘制此接口设置的纹理。
PolylineOptionscolorType(PolylineOptions.ColorType type)设置颜色类型
PolylineOptionsvisible(boolean visible)设置折线可见性
PolylineOptionslineType(int lineType)设置线的类型,必须LineType里面的一种
PolylineOptionspattern(List< Integer > pattern)设置ARGB虚线的样式

交互

类型方法说明
PolylineOptionsclickable(boolean clickable)是否可以点击

其它属性

类型方法说明
PolylineOptionsgradient(boolean enable)渐变色开关 只有 getLineType() == PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE 且 isRoad() == true 才生效
PolylineOptionsborderColor(int borderColor)设置线ARGB的描边颜色:当线是纯色线的时候,设置border的颜色可用此接口
PolylineOptionsborderColors(int[] borderColors)设置ARGB线的描边颜色,borderColors的数量应该与 colors(int[], int[])接口中的colors的长度保持一致。
PolylineOptionsborderWidth(float borderWidth)设置ARGB线 描边的宽度
PolylineOptionseraseColor(int eraseColor)设置ARGB类型线的擦除色,默认为Color.GRAY
PolylineOptionslineCap(boolean cap)设置路线是否显示半圆端点
PolylineOptionszIndex(int zIndex)设置相同显示Level level(int) 的折线堆叠顺序,相同显示level,zIndex越大越靠上显示 level优先级大于zIndex
PolylineOptionsanimation(Animation a)执行一个动画
PolylineOptionsindoorInfo(IndoorInfo indoorInfo)为Polyline添加室内图信息(buildingId,floorName) 当添加室内图信息后,Marker将会随着绑定的室内图状态改变而展示和隐藏
PolylineOptionslevel(int level)设置Polyline的显示Level,level用于控制Polyline与楼块,道路,POI的显示层级关系。
PolylineOptionsroad(boolean isRoad)设置线是否为路线
PolylineOptionstext(PolylineOptions.Text text)设置沿 polyline 展示的文字。只要调用 TencentMap.addPolyline(PolylineOptions) 构造出 PolylineOptions.Text 就不可以再调用 Polyline.setPoints(List) 修改展示的路径,只能创建新的 Polyline

多边形的更多属性

多边形是由 Polygon 类定义的一组在地图上的封闭线段组成的图形,它由一组 LatLng 点按顺序连接而成。可以设置多边形顶点、描边的宽度和颜色、多边形的填充色、层级关系、可见性、可点击性等属性。

常用属性

类型方法说明
PolygonOptionsstrokeColor(int strokeColor)设置PolygonOptions描边颜色, 与 texture(BitmapDescriptor) 互斥
PolygonOptionsstrokeWidth(float strokeWidth)设置PolygonOptions描边宽度
PolygonOptionsfillColor(int fillColor)设置PolygonOptions填充颜色
PolygonOptionsadd(LatLng… latLngs)向PolygonOptions添加顶点
PolygonOptionsadd(LatLng latLng)向PolygonOptions添加顶点
PolygonOptionsadd(List< LatLng > points)添加顶点坐标
PolygonOptionsaddAll(Iterable< LatLng > latLngs)向PolygonOptions添加顶点

交互

类型方法说明
PolygonOptionsclickable(boolean clickable)多边形是否支持点击

其它属性

类型方法说明
PolygonOptionssetHolePoints(List< List < LatLng > > holePoints)设置PolygonOptions 带洞顶点
PolygonOptionsvisible(boolean flag)设置折线可见性
PolygonOptionszIndex(int zIndex)设置相同显示Level level(int) 的多边形堆叠顺序,相同显示level,zIndex越大越靠上显示 level优先级大于zIndex
PolygonOptionslevel(int level)设置Polygon的显示Level,level用于控制Polygon与楼块,道路,POI的显示层级关系。
PolygonOptionspattern(List< Integer > pattern)设置ARGB虚线的样式,与 texture(BitmapDescriptor) 互斥
PolygonOptionstexture(BitmapDescriptor texture)设置纹理图片,这个纹理会重复地绘填充到线上,同时用户应配置纹理间隔 textureSpacing(int), 与 strokeColor(int)、pattern(List)两个配置互斥,这三个接口最后调用的会生效
PolygonOptionstextureSpacing(int textureSpacing)纹理间隔

Arc的更多属性

弧线是由一组经纬度点和夹角角度绘制而成,在地图上绘制弧线由 Arc类定义实现。

  • 基础圆弧途径点必须在起终点有效坐标范围内,否则不能生成正确的弧线,同时设置夹角角度时,以夹角角度为准。
  • 如果使用的是起终点绘制弧线,一定要添加夹角角度。
类型方法说明
ArcOptionscolor(int color)设置线颜色,默认黑色
ArcOptionswidth(float width)设置线宽,默认5
ArcOptionsstrokeColor(int strokeColor)设置描边颜色,不设置不显示
ArcOptionsstrokeWidth(float strokeWidth)设置描边宽度,默认1
ArcOptionspoints(LatLng start, LatLng end)设置起终点坐标
ArcOptionsangle(float angle)设置起点到终点,与起点外切线逆时针旋转的夹角角度 通过设置起终点+夹角角度,即可确定一个圆弧线,如果同时设置途经点和夹角时,优先以夹角角度为准
ArcOptionspass(LatLng pass)设置途经点 通过设置起终点+途经点,即可确定一个圆弧线,途经点必须在起终点有效坐标范围内,否则不能生成正确的弧线,同时设置夹角角度时,以夹角角度为准
ArcOptionsshowArrow(boolean showArrow)设置箭头显示状态,默认为false,不显示

Circle的更多属性

圆形是由 Circle 类定义的封闭曲线,在腾讯地图构造一个圆形需要确定它的圆心和半径。可以设置圆心坐标、半径、描边的宽度和颜色、圆的填充颜色、层级、可见性、可点击性等属性。

类型方法说明
CircleOptionsradius(double radius)设置圆的半径, 单位为米
CircleOptionsfillColor(int color)设置圆的填充颜色
CircleOptionsstrokeColor(int color)设置圆的描边颜色
CircleOptionsstrokeWidth(float width)设置圆的描边宽度
CircleOptionsborderType(CircleOptions.CircleBorderType borderType)设置描边类型
CircleOptionspattern(List< Integer > pattern)设置描边虚线的样式
CircleOptionscenter(LatLng latlng)设置圆心坐标
CircleOptionsclickable(boolean clickable)圆形是否支持点击
CircleOptionsvisible(boolean flag)设置圆的可见性
CircleOptionszIndex(int zIndex)设置相同显示Level level(int) 的Circle的堆叠顺序,相同显示level,zIndex越大越靠上显示
CircleOptionslevel(int level)设置Circle的显示Level,level用于控制Circle与楼块,道路,POI的显示层级关系。
  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在uni-app中使用腾讯地图SDK,需要先在腾讯地图开放平台申请开发者账号,然后创建应用并获取到腾讯地图SDK的App Key。接下来,可以按照以下步骤来集成腾讯地图SDK到uni-app项目中: 1. 在uni-app项目中的manifest.json文件中,添加以下配置: ``` "permission": { "android": { "name": [ "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION", "android.permission.READ_PHONE_STATE", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.ACCESS_NETWORK_STATE", "android.permission.ACCESS_WIFI_STATE", "android.permission.INTERNET" ] } }, "app-plus": { "modules": { "tencentmap": { "version": "1.0.0", "provider": "xxxxx" // 申请开发者账号时填写的公司名称或个人名字 } } } ``` 2. 将下载的腾讯地图SDK的jar包和so文件放到uni-app项目的unpackage文件夹下的lib文件夹中。 3. 在uni-app项目中的vue文件中,使用以下代码来调用腾讯地图SDK: ``` <template> <div id="map-container"></div> </template> <script> export default { mounted() { const map = new plus.maps.Map("map-container", { zoom: 15, center: {lat: 39.92, lng: 116.46} }); const marker = new plus.maps.Marker({position: {lat: 39.92, lng: 116.46}}); map.addOverlay(marker); } } </script> ``` 以上代码创建了一个地图容器,并在地图上添加了一个标记点。 需要注意的是,在使用腾讯地图SDK时,需要在manifest.json文件中配置权限,并且需要在使用地图相关功能时,用户需要授权给应用访问位置信息的权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值