安卓端Google Maps如何添加预估行程时长与备选路线功能
安卓端Google Maps多备选路线+对应预估时长实现方案
实现该效果核心依赖Google Directions API配合Maps SDK for Android完成自定义渲染,原生Maps SDK自带的路线控件仅支持单条最优路线展示,无法直接满足多路线+自定义时长标签的需求,具体实现步骤如下:
1. 前置服务配置
- 前往Google Cloud控制台开通对应服务权限:
Maps SDK for Android、Directions API,如果需要展示考虑实时拥堵的预估时长,可额外开通距离矩阵相关权限,注意给API密钥配置安卓包名、签名证书哈希的限制,避免密钥被盗刷配额。 - 在安卓项目中完成基础配置:添加网络权限、在Manifest中配置Maps API密钥元数据,引入最新版Maps SDK依赖。
2. 构造多路线请求
调用Directions API时必须开启多路线返回开关,核心参数配置如下:
- 将
alternatives参数设置为true,接口会返回最多3条可供选择的规划路线,默认值为false仅返回优先级最高的单条路线。 - 根据业务需求指定出行模式(驾车/步行/骑行/公共交通),如果需要实时路况下的预估时长,添加
departure_time=now参数即可返回拥堵加权后的时长结果。
使用官方API客户端构造请求的示例代码:
val directionsRequest = DirectionsApiRequest(geoApiContext) .origin(LatLng(startLat, startLng)) .destination(LatLng(endLat, endLng)) .mode(TravelMode.DRIVING) .alternatives(true) // 开启多备选路线返回 .departureTimeNow() // 可选:返回实时路况预估时长
3. 返回数据解析
接口返回的每条路线数据包含两类核心信息:
- 预估时长:单条路线
legs[0].duration字段为无路况加权的通用预估时长,legs[0].duration_in_traffic为开启实时路况参数后返回的拥堵场景预估时长,可直接取字段的展示文本或秒级数值使用。 - 路线轨迹:单条路线
overview_polyline.points字段为编码压缩的经纬度点串,通过Maps SDK提供的PolyUtil.decode()方法即可解码为可直接在地图上绘制的经纬度坐标列表。
4. 地图渲染与交互实现
- 路线绘制:遍历所有解析完成的路线对象,为每条路线创建独立的
PolylineOptions,选中态路线使用高对比度主色、更粗的线宽,未选中态路线使用浅灰/浅蓝色、更细的线宽,同时给选中态Polyline设置更高的zIndex避免被其他路线覆盖。 - 时长标签展示:如果要实现常驻时长标签效果,可在每条路线的中点位置(取解码后坐标列表的中间索引对应坐标)添加自定义Marker,将Marker布局设置为纯文本气泡样式,调整锚点让标签居中贴合路线;如果只需要点击展示,直接给Polyline绑定点击事件,点击时弹出InfoWindow展示对应路线的时长、距离信息即可。
- 交互联动:给每条Polyline、对应时长Marker绑定相同的路线标识作为tag,用户点击任意路线或标签时,遍历所有渲染元素切换选中/未选中样式即可。
注意:不建议直接在客户端硬编码存储API密钥,生产环境建议通过自有后端代理转发Directions API请求,避免密钥泄露产生额外成本。
内容的提问来源于stack exchange,提问作者Ezzy Wachira
相关产品推荐
相关产品推荐

