欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

地图中添加沿线文字标注

程序员文章站 2022-06-04 20:37:49
最近需要实现导航功能,其中路线规划和导航场景如下图所示: 上面的截图中,路线上面都绘制出了路名,方便用户查看自己选择的路线都经过了哪些道路。这里用到的地图的能力即为 腾讯地图 Android SDK v4.2.7 已经开放了实现此功能的能力。 主要涉及接口如下: 接口名称 | 功能概述 : | : ......

最近需要实现导航功能,其中路线规划和导航场景如下图所示:

地图中添加沿线文字标注

地图中添加沿线文字标注

上面的截图中,路线上面都绘制出了路名,方便用户查看自己选择的路线都经过了哪些道路。这里用到的地图的能力即为沿线文字标注腾讯地图 android sdk v4.2.7 已经开放了实现此功能的能力。

主要涉及接口如下:

接口名称 功能概述
polylineoptions.text(text text) 置沿 polyline 展示的文字
polylineoptions.text.builder(segmenttext segmenttext polylineoptions.text 构造器
polylineoptions.text.builder.addsegmenttext(segmenttext segmenttext) 添加线上展示文字的点串范围
polylineoptions.text.builder.color(int color) 设置文字颜色
polylineoptions.text.builder.strokecolor(int color) 设置文字描边颜色
polylineoptions.text.builder.size(int size) 设置文字尺寸
polylineoptions.text.builder.priority(textpriority priority) 设置文字优先级

从这个功能涉及到的接口可以看出沿线文字标注是作为 polyline 的一个属性供用户在添加线的时候展示所需文字。

为一条线添加文字标注

1、选择合适的点串作为文字标注的路径。如下,我们选择了 苏州街-北四环西路辅路-彩和坊路 的一个点串作为 polyline 绘制的路径。

//这一个点串表示了经 苏州街-北四环-彩和坊路 的一条路线
list<latlng> points = new arraylist<>();
//苏州街
points.add(new latlng(39.982382, 116.305883));
//北四环西路辅路
points.add(new latlng(39.984914, 116.305690));
//彩和坊路
points.add(new latlng(39.985045, 116.308136));
points.add(new latlng(39.983570, 116.308088));
points.add(new latlng(39.980063, 116.308297));

2、绘制 polyline 及其文字标注

public polyline createlinewithtext() {
    if (mtencentmap == null) {
        return null;
    }

    polyline polyline = mtencentmap.addpolyline(
            new polylineoptions()
                    .addall(points)
                    .color(0xff54ce4d)
                    .text(createtext()));
    return polyline;
}

public polylineoptions.text createtext() {
    list<polylineoptions.segmenttext> segmenttexts = new arraylist<>();
    //苏州街 的绘制范围是从第0个点开始,第1个点结束
    segmenttexts.add(new polylineoptions.segmenttext(0, 1, "苏州街"));
    //北四环西路辅路 的绘制范围是从第1个点开始,第2个点结束
    segmenttexts.add(new polylineoptions.segmenttext(1, 2, "北四环西路辅路"));
    //彩和坊路 的绘制范围是从第2个点开始,第4个点结束
    segmenttexts.add(new polylineoptions.segmenttext(2, 4, "彩和坊路"));
    return new polylineoptions.text.builder(segmenttexts).build();
}

最终的效果:

地图中添加沿线文字标注

注意事项

在使用这个功能的时候也遇到了一些问题,这里也列举下

  1. polylineoptions.text.builder.priority(textpriority priority) 设置文字优先级的接口,只有普通和高两个级别,在需要多条线上需要标注文字时,只能有一条线上的文字是 textpriority.high, 否则多条线重叠时,无法保证优先展示的是用户希望的那条线的文字
  2. 文字是不可变的。当通过 tencentmap.addpolyline 向地图添加线后,用户通过 polylineoptions 设置的 polylineoptions.text 是不能改变的,如果想改变文字内容只能重新添加一条线并设置 polylineoptions.text。