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

Flutter中如何绘制Google Maps多地点间的导航路线?

实现Flutter Google Maps多城市连续导航路线绘制

核心思路

Google Maps Directions API仅支持两点间路线查询,所以要把多城市连续路线拆成两两相邻城市的路段,分别获取每段路线的Polyline数据后合并,最终在地图上绘制完整路线。

具体实现步骤

  • 拆分城市路径段
    把服务器返回的城市经纬度列表按顺序拆成多组相邻城市对,比如[A,B,C,D,E]拆成(A,B)、(B,C)、(C,D)、(D,E)。循环处理每一组,调用Directions API获取对应路段的路线点数据。
    示例代码:

    List<LatLng> cityCoords = [/* 服务器返回的城市经纬度集合 */];
    List<List<LatLng>> routeSegments = [];
    
    for (int i = 0; i < cityCoords.length - 1; i++) {
      final start = cityCoords[i];
      final end = cityCoords[i+1];
      // 调用封装的Directions API请求方法
      final segmentPoints = await fetchRoutePoints(start, end);
      routeSegments.add(segmentPoints);
    }
    
  • 合并Polyline数据
    将各路段的路线点拼接成完整列表,注意移除相邻路段重复的端点(比如B点在第一段结尾和第二段开头是同一个,仅保留一次)。
    示例代码:

    List<LatLng> fullRoutePoints = [];
    for (final segment in routeSegments) {
      if (fullRoutePoints.isNotEmpty) {
        // 移除重复的起始端点
        segment.removeAt(0);
      }
      fullRoutePoints.addAll(segment);
    }
    
  • 绘制连续路线
    将合并后的完整路线点转换成Polyline,添加到Google Map组件中。如果需要区分不同路段,也可以给每个路段单独创建Polyline并设置不同颜色。
    示例代码:

    final fullRoutePolyline = Polyline(
      polylineId: const PolylineId("continuous_route"),
      points: fullRoutePoints,
      color: Colors.blueAccent,
      width: 6,
    );
    
    // 在GoogleMap组件中加载该Polyline
    GoogleMap(
      polylines: {fullRoutePolyline},
      initialCameraPosition: CameraPosition(target: cityCoords[0], zoom: 10),
      // 其他地图配置项...
    )
    

注意事项

  • API调用限制:多次调用Directions API可能触发请求频率限制,建议添加请求延迟或使用批量请求策略,必要时提升API密钥的配额。
  • 错误处理:需处理单个路段API请求失败的情况,比如跳过失败路段或提示用户重新获取路线。
  • 性能优化:城市数量过多时,合并后的路线点会非常多,可对路线点进行抽稀处理,减少地图绘制压力。

内容的提问来源于stack exchange,提问作者Adhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:55:13