zoukankan      html  css  js  c++  java
  • 地图中添加沿线文字标注

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

    路线规划

    导航

    上面的截图中,路线上面都绘制出了路名,方便用户查看自己选择的路线都经过了哪些道路。这里用到的地图的能力即为沿线文字标注腾讯地图 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 是不能改变的,如果想改变文字内容只能使用 Polyline.setText 接口设置 一个新的 PolylineOptions.Text 对象。
      3、如果要移除文字,可以通过 Polyline.setText 接口传入 null。
  • 相关阅读:
    [JSOI2007][BZOJ1030] 文本生成器|AC自动机|动态规划
    [NOI2014][BZOJ3670] 动物园|KMP
    [HAOI2010][BZOJ2427] 软件安装|tarjan|树型dp
    [JSOI2008][BZOJ1017] 魔兽地图DotR|树型dp
    [JLOI2014][BZOJ3631] 松鼠的新家|树上倍增LCA|差分
    [SDOI2010][BZOJ1975] 魔法猪学院|A*|K短路
    [BZOJ1251] 序列终结者|Splay
    hdu 2141 Can you find it?
    hdu 3152 Obstacle Course
    hdu 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/Allen-wxk/p/11640119.html
Copyright © 2011-2022 走看看