You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓端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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 17:33:40