高德地图SDK Android版开发 6 显示覆盖物

前言

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

地图类中覆盖物的接口

  • AMap类中添加Overlay的接口:
类型方法说明
MarkeraddMarker(MarkerOptions options)在地图上添一个图片标记(marker)对象。
ArrayList< Marker >addMarkers(ArrayList< MarkerOptions > options, boolean moveToCenter)在地图上添一组图片标记(marker)对象,并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示。
PolylineaddPolyline(PolylineOptions options)在地图上添加一个折线对象(polyline)对象。
PolygonaddPolygon(PolygonOptions options)在地图上添加一个多边形(polygon)对象。
ArcaddArc(ArcOptions options)在地图上添加一个圆弧(arc)对象。
CircleaddCircle(CircleOptions options)在地图上添加一个圆(circle)对象。
TextaddText(TextOptions options)在地图上添一个文字标记(text)对象。
  • AMap类中删除Overlay的接口:
类型方法说明
voidclear()从地图上删除所有的overlay(marker,circle,polyline 等对象)。
voidclear(boolean isKeepMyLocationOverlay)从地图上删除所有的覆盖物(marker,circle,polyline 等对象),
但myLocationOverlay(内置定位覆盖物)除外。

覆盖物类

类型说明覆盖物类选项
定义地图 Marker 覆盖物。
Marker 是在地图上的一个点绘制图标。
这个图标和屏幕朝向一致,和地图朝向无关,也不会受地图的旋转、倾斜、缩放影响。
MarkerMarkerOptions
折线定义地图线段覆盖物。一个线段是多个连贯点的集合线段。PolylinePolylineOptions
多边形定义在地图上绘制多边形覆盖物。一个多边形可以凸面体,也可是凹面体。PolygonPolygonOptions
弧线定义了在地图上绘制弧形的类。ArcArcOptions
定义了在地图上绘制圆的类。CircleCircleOptions
文本定义在地图中绘制的文字覆盖物。TextTextOptions

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()
        .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()
        .strokeColor(Color.RED)
        .strokeWidth(10)
        .point(p1, p2, p3);

// 在地图上显示弧线
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,circle,polyline 等对象),
// 但myLocationOverlay(内置定位覆盖物)除外。
boolean isKeepMyLocationOverlay = true;
map.clear(isKeepMyLocationOverlay);

效果图

在这里插入图片描述

Marker的更多属性

Marker有如下属性:

  • 锚点:图标摆放在地图上的基准点。默认情况下,锚点是从图片下沿的中间处。
  • 位置:Marker是通过经纬度的值来标注在地图上的。
  • 标题:当点击Marker显示在信息窗口的文字,随时可以更改。
  • 片段:除了标题外其他的文字,随时可以更改。
  • 图标:Marker显示的图标。如果未设置图标,API 将使用默认的图标,高德为默认图标提供了10 种颜色备选。默认情况下,Marker 是可见的。可随时更改Marker 的可见性。

常用属性

类型方法说明
MarkerOptionsicon(BitmapDescriptor icon)设置Marker覆盖物的图标。
MarkerOptionsposition(LatLng position)设置Marker覆盖物的位置坐标。
MarkerOptionsalpha(float alpha)设置Marker覆盖物的透明度
MarkerOptionsperspective(boolean perspective)已过时。
MarkerOptionsdraggable(boolean enable)设置Marker覆盖物是否可拖拽。
MarkerOptionssetFlat(boolean flat)设置Marker覆盖物是否平贴地图。
MarkerOptionsanchor(float u, float v)设置Marker覆盖物的锚点比例。
MarkerOptionsrotateAngle(float rotate)设置Marker覆盖物的图片旋转角度,从正北开始,逆时针计算。
MarkerOptionsvisible(boolean visible)设置Marker覆盖物是否可见。

交互

启用允许拖拽时,在拖拽Marker时,会回调AMap.OnMarkerDragListener

类型方法说明
MarkerOptionsdraggable(boolean enable)设置Marker覆盖物是否可拖拽。

动画

  • SDK提供了给Marker增加帧动画的功能,通过MarkerOptions类来设置,一次传入一个Icon列表,通过period设定刷新的帧间隔。
  • 自地图 SDK V4.0.0 版本起,SDK 提供了给 Marker 设置动画的方法。通过MarkersetAnimation方法设置。
类型方法说明
MarkerOptionsicons(ArrayList< BitmapDescriptor > icons)设置Marker覆盖物的动画帧图标列表,多张图片模拟gif的效果。
MarkerOptionsperiod(int period)设置多少帧刷新一次图片资源,Marker动画的间隔时间,值越小动画越快。

其它属性

类型方法说明
MarkerOptionstitle(String title)设置 Marker覆盖物 的标题
MarkerOptionssnippet(String snippet)设置 Marker覆盖物的 文字描述
MarkerOptionsinfoWindowEnable(boolean enabled)设置Marker覆盖物的InfoWindow是否允许显示,默认为true
MarkerOptionssetInfoWindowOffset(int offsetX, int offsetY)设置Marker覆盖物的InfoWindow相对Marker的偏移。
MarkerOptionsaltitude(float altitude)marker的海拔
MarkerOptionszIndex(float zIndex)设置Marker覆盖物 zIndex。
MarkerOptionssetGps(boolean isGps)设置Marker覆盖物的坐标是否是Gps,默认为false。

折线的更多属性

地图线段覆盖物。一个线段是多个连贯点的集合线段。它拥有以下属性:

  • 顶点:线段是由两个顶点之间连贯的点构成的。如果两个顶点相同,则一个线段将闭合。
  • 宽度:宽度是单位是像素。宽度是可视区域的缩放级别无关。默认为10。
  • 颜色:线段的颜色是ARGB格式,颜色格式可以参考 Color。默认是黑色(0xff000000)。
  • Z轴:Z轴是控制地图覆盖物之间的绘制层次的参数。这个参数能够控制CirclesPolygonsPolyline的绘制层次,但不会影响Marker。 Z轴数值越大的覆盖物将会绘制在更上层。如果两个及两个以上覆盖物的Z轴数值相同,则最后的绘制结果是随机的。 覆盖物的Z轴默认为0。
  • 可见:这个属性表示了线段是否可以显示在地图上。如果设置为不可见,则绘制地图时不会绘制此线段,但其他属性不受影响。默认为可见。

常用属性

类型方法说明
PolylineOptionswidth(float width)设置线段的宽度,默认为10。
PolylineOptionscolor(int color)设置线段的颜色,需要传入32位的ARGB格式。
PolylineOptionstransparency(float transparency)设置线段的透明度0~1,默认是1,1表示不透明
PolylineOptionsadd(LatLng… points)追加一批顶点到线段的坐标集合。
PolylineOptionsadd(LatLng point)追加一个顶点到线段的坐标集合。
PolylineOptionsaddAll(Iterable< LatLng > points)追加一批顶点到线段的坐标集合。
PolylineOptionscolorValues(List< Integer > colors)设置线段的颜色
PolylineOptionssetCustomTexture(BitmapDescriptor customTexture)设置线段的纹理图,图片为2的n次方。
PolylineOptionssetCustomTextureList(List< BitmapDescriptor > customTextureList)设置线段纹理list
PolylineOptionssetCustomTextureIndex(List< Integer > custemTextureIndexs)设置线段纹理index数组
PolylineOptionssetUseTexture(boolean useTexture)设置是否使用纹理贴图画线。
PolylineOptionsvisible(boolean isVisible)设置线段的可见性。
PolylineOptionssetDottedLine(boolean isDottedLine)设置是否画虚线,默认为false,画实线。
PolylineOptionssetDottedLineType(int type)设置虚线形状。

其它属性

类型方法说明
PolylineOptionsgeodesic(boolean isGeodesic)设置线段是否为大地曲线,默认false,不画大地曲线。
PolylineOptionsuseGradient(boolean useGradient)设置线段是否使用渐变色
PolylineOptionssetEraseColor(boolean eraseVisible, int eraseColor)设置线段擦除(显示范围外)颜色,需要传入32位的ARGB格式,针对颜色线段生效。
PolylineOptionslineCapType(PolylineOptions.LineCapType lineCapType)设置Polyline尾部形状
PolylineOptionslineJoinType(PolylineOptions.LineJoinType lineJoinType)设置Polyline连接处形状
PolylineOptionszIndex(float zIndex)设置线段Z轴的值。

多边形的更多属性

多边形覆盖物。一个多边形可以凸面体,也可是凹面体。它有以下属性:

  • 边框:一个多边开的边框由一系列的顺时针或逆时针顶点组成。边框不需要声明起点和终点一致。如果边框的起点与终点不一致,API会自动将它封闭。
  • 边框宽度:边框的宽度以像素为单位,不会受可视区域缩放级别的影响。默认为10。
  • 边框颜色:边框颜色是一个ARGB格式,ARGB请参考android.graphics.Color。默认为黑色。
  • 填充颜色:填充颜色是一个ARGB格式,ARGB格式可参考android.graphics.Color。默认是透明的。如果多边形的几何图形不正确,则填充颜色不会被绘制。
  • Z轴:Z轴是控制覆盖物重复区域的绘制顺序的值。Z轴较大的覆盖物会在绘制在Z轴较小的覆盖物上面。如果两个覆盖物的Z轴数值相同,则覆盖情况将随机。默认为0。
  • 可见性:标示多边形是否可见。如果可见性为否,则不会被绘制。

多边形方法必须在主线程中调用,否则会抛出IllegalStateException

常用属性

类型方法说明
PolygonOptionsstrokeColor(int paramInt)设置多边形的边框颜色,32位 ARGB格式,默认为黑色。
PolygonOptionsstrokeWidth(float paramFloat)设置多边形的边框宽度,单位:像素。
PolygonOptionsfillColor(int paramInt)设置多边形的填充颜色,32位ARGB格式。
PolygonOptionsadd(LatLng… paramArrayOfLatLng)添加多个多边形边框的顶点
PolygonOptionsadd(LatLng paramLatLng)添加一个多边形边框的顶点
PolygonOptionsaddAll(Iterable< LatLng > paramIterable)添加多个多边形边框的顶点

其它属性

类型方法说明
PolygonOptionsaddHoles(BaseHoleOptions… paramArrayOfOptions)设置空心洞的配置项
PolygonOptionsaddHoles(Iterable paramIterable)添加空心洞的配置项
PolygonOptionsvisible(boolean paramBoolean)设置多边形是否可见。
PolygonOptionszIndex(float paramFloat)设置多边形的Z轴数值
PolygonOptionslineJoinType(AMapPara.LineJoinType lineJoinType)设置边框连接处形状

Arc的更多属性

弧形的类。它有以下属性:

  • 边框宽度:弧形边框的宽度。这个值设置后不会受到可视区域缩放级别的影响。默认为10。
  • 边框颜色:边框颜色是一个ARGB格式,ARGB请参考android.graphics.Color。默认为黑色。
  • Z轴:Z轴是控制覆盖物重复区域的绘制顺序的值。Z轴较大的覆盖物会绘制在Z轴较小的覆盖物上面。如果两个覆盖物的Z轴数值相同,则覆盖情况将随机。默认值为0。
  • 可见性:标示弧形是否可见。如果可见性为否,则不会被绘制。

弧形方法必须在主线程中调用,否则会抛出IllegalStateException

类型方法说明
ArcOptionsstrokeColor(int color)设置弧形边框颜色参数,ARGB格式。
ArcOptionsstrokeWidth(float width)设置弧形边框宽度参数,单位:像素。
ArcOptionspoint(LatLng startpoint, LatLng passedpoint, LatLng endpoint)设置弧线的起终点和途径点。
ArcOptionsvisible(boolean visible)设置弧形是否可见参数。
ArcOptionszIndex(float zIndex)设置弧形Z轴数值参数,默认为0。

Circle的更多属性

圆对象有以下属性:

  • 圆心 :圆心的经纬度。
  • 半径: 圆的半径,单位:米。这个值应该大于等于0。
  • 边框宽度: 圆的边框宽度。这个值设置后不会受到可视区域缩放级别的影响。默认为10。
  • 边框颜色:圆的边框颜色,ARGB格式。默认为黑色。
  • 填充颜色:圆的填充颜色,ARGB格式。默认为透明。
  • Z轴:Z轴是控制覆盖物重复区域的绘制顺序的值。Z轴较大的覆盖物会绘制在Z轴较小的覆盖物上面。如果两个覆盖物的Z轴数值相同,则覆盖情况将随机。默认值为0。
  • 可见属性:标识多边形是否可见。如果可见性为否,则不会被绘制。

圆形方法必须在主线程中调用,否则会抛出IllegalStateException

类型方法说明
CircleOptionsradius(double radius)设置圆的半径,单位米。
CircleOptionsfillColor(int color)设置圆的填充颜色。
CircleOptionsstrokeColor(int color)设置圆的边框颜色,ARGB格式。
CircleOptionsstrokeWidth(float width)设置圆的边框宽度,单位像素。
CircleOptionssetStrokeDottedLineType(int type)设置圆的边框虚线形状。
CircleOptionscenter(LatLng point)设置圆心经纬度坐标。
CircleOptionsaddHoles(BaseHoleOptions… paramArrayOfOptions)添加空心洞的配置项
CircleOptionsaddHoles(Iterable paramIterable)添加空心洞的配置项
CircleOptionsvisible(boolean visible)设置圆的可见属性
CircleOptionszIndex(float zIndex)设置圆的Z轴数值,默认为0。

Text的更多属性

类型方法说明
TextOptionstext(String text)设置文字覆盖物的文字内容。
TextOptionsbackgroundColor(int backgroundColor)设置文字覆盖物的背景颜色
TextOptionsfontSize(int fontSize)设置文字覆盖物字体大小
TextOptionsfontColor(int fontColor)设置文字覆盖物的字体颜色,默认黑色。
TextOptionsrotate(float rotate)设置文字覆盖物的旋转角度,逆时针。
TextOptionsposition(LatLng position)设置文字覆盖物的地理坐标。
TextOptionsalign(int alignX, int alignY)设置文字覆盖物的对齐方式,默认居中对齐。
TextOptionstypeface(Typeface typeface)设置文字覆盖物的字体。
TextOptionssetObject(Object object)设置文字覆盖物的额外信息
TextOptionsvisible(boolean visible)设置文字覆盖物的可见性。
TextOptionszIndex(float zIndex)设置文字覆盖物 zIndex。
  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值