最近需要實現導航功能,其中路線規劃和導航場景如下圖所示: 上面的截圖中,路線上面都繪製出了路名,方便用戶查看自己選擇的路線都經過了哪些道路。這裡用到的地圖的能力即為 騰訊地圖 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();
}
最終的效果:
註意事項
在使用這個功能的時候也遇到了一些問題,這裡也列舉下
- PolylineOptions.Text.Builder.priority(TextPriority priority) 設置文字優先順序的介面,只有普通和高兩個級別,在需要多條線上需要標註文字時,只能有一條線上的文字是 TextPriority.HIGH, 否則多條線重疊時,無法保證優先展示的是用戶希望的那條線的文字
- 文字是不可變的。當通過 Tencentmap.addPolyline 向地圖添加線後,用戶通過 PolylineOptions 設置的 PolylineOptions.Text 是不能改變的,如果想改變文字內容只能重新添加一條線並設置 PolylineOptions.Text。