地圖中添加沿線文字標註

如下內容轉載自工程師 Nero8421 的文章《 地圖中添加沿線文字標註
做者: Nero8421
連接: https://www.cnblogs.com/Allen...
來源:博客園
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

最近須要實現導航功能,其中路線規劃和導航場景以下圖所示:html

路線規劃

導航

上面的截圖中,路線上面都繪製出了路名,方便用戶查看本身選擇的路線都通過了哪些道路。這裏用到的地圖的能力即爲沿線文字標註騰訊地圖 Android SDK v4.2.7 已經開放了實現此功能的能力。android

主要涉及接口以下:ui

接口名稱 功能概述
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 的一個屬性供用戶在添加線的時候展現所需文字。spa

爲一條線添加文字標註

一、選擇合適的點串做爲文字標註的路徑。以下,咱們選擇了 蘇州街-北四環西路輔路-彩和坊路 的一個點串做爲 Polyline 繪製的路徑。code

//這一個點串表示了經 蘇州街-北四環-彩和坊路 的一條路線
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));

二、繪製 Polyline 及其文字標註htm

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

注意事項

在使用這個功能的時候也遇到了一些問題,這裏也列舉下blog

  1. PolylineOptions.Text.Builder.priority(TextPriority priority) 設置文字優先級的接口,只有普通和高兩個級別,在須要多條線上須要標註文字時,只能有一條線上的文字是 TextPriority.HIGH, 不然多條線重疊時,沒法保證優先展現的是用戶但願的那條線的文字
  2. 文字是不可變的。當經過 Tencentmap.addPolyline 向地圖添加線後,用戶經過 PolylineOptions 設置的 PolylineOptions.Text 是不能改變的,若是想改變文字內容只能使用 Polyline.setText 接口設置 一個新的 PolylineOptions.Text 對象。三、若是要移除文字,能夠經過 Polyline.setText 接口傳入 null。
相關文章
相關標籤/搜索