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

    腾讯位置服务地图SDK是一套提供多种地理位置服务的应用程序接口。通过调用该接口,开发者可以在自己的应用中加入地图相关的功能(如地图展示、标注、绘制图形等),轻松访问腾讯地图服务和数据,构建功能丰富、交互性强、符合各种行业场景的地图类应用程序。
    以下内容转载自工程师Nero8421 的文章《 地图中添加沿线文字标注
    作者:Nero8421
    链接:https://www.cnblogs.com/Allen...
    来源:博客园
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

    路线规划

    导航

    上面的截图中,路线上面都绘制出了路名,方便用户查看自己选择的路线都经过了哪些道路。这里用到的地图的能力即为沿线文字标注腾讯地图 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();
    }
    
    
    

    最终的效果:

    652980-20191009103014443-35662945.png

    注意事项

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

      1. PolylineOptions.Text.Builder.priority(TextPriority priority) 设置文字优先级的接口,只有普通和高两个级别,在需要多条线上需要标注文字时,只能有一条线上的文字是 TextPriority.HIGH, 否则多条线重叠时,无法保证优先展示的是用户希望的那条线的文字
      2. 文字是不可变的。当通过 Tencentmap.addPolyline 向地图添加线后,用户通过 PolylineOptions 设置的 PolylineOptions.Text 是不能改变的,如果想改变文字内容只能使用 Polyline.setText 接口设置 一个新的 PolylineOptions.Text 对象。
        3、如果要移除文字,可以通过 Polyline.setText 接口传入 null。
  • 相关阅读:
    sqlplus时报Linux-x86_64 Error: 13: Permission denied
    thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 合并石子
  • 原文地址:https://www.cnblogs.com/TencentLBS/p/11661021.html
Copyright © 2011-2022 走看看