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

能否在Flutter应用中实现Google Maps离线路线,无需重复API请求?

Flutter集成Google Maps离线导航实现方案

核心问题解答

是可以实现单次请求路线后离线导航的,具体方案如下:


1. 单次请求并保存路线数据

使用Google Directions API发起仅一次请求,获取从location1到location2的完整路线数据(包括路线坐标polyline、转向步骤、距离时长等),然后将这些数据持久化存储在本地设备(比如用Hive、SQLite或SharedPreferences),避免后续重复请求产生额外成本。

示例代码片段(获取并保存路线):

import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:hive/hive.dart';

// 发起Directions API请求
Future<void> fetchAndSaveRoute(String origin, String destination) async {
  final apiKey = 'YOUR_API_KEY';
  final url = Uri.parse(
    'https://maps.googleapis.com/maps/api/directions/json?origin=$origin&destination=$destination&key=$apiKey'
  );
  
  final response = await http.get(url);
  if (response.statusCode == 200) {
    final routeData = json.decode(response.body);
    // 提取关键路线信息:polyline、转向步骤等
    final route = routeData['routes'][0];
    final savedRoute = {
      'polyline': route['overview_polyline']['points'],
      'legs': route['legs'],
      'summary': route['summary']
    };
    // 存储到本地Hive数据库
    final box = await Hive.openBox('routes');
    await box.put('saved_route', savedRoute);
  }
}

2. 离线加载路线并实现基础导航

  • 离线地图底图:提前引导用户下载目标区域的Google Maps离线瓦片包(通过Google Maps应用或插件相关设置),确保离线时能显示地图背景。
  • 绘制预存路线:使用google_maps_flutter插件,从本地读取保存的polyline数据,解码后绘制在地图上。
  • 基础导航逻辑:监听设备的实时位置(通过geolocator插件),对比预存的路线坐标,判断当前位置是否在路线上,并展示预存的转向指令。这种方式没有实时路况和自动重规划功能,但能满足无网络环境下的徒步导航需求。

示例代码片段(离线绘制路线):

import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:hive/hive.dart';
import 'package:google_maps_polyline/google_maps_polyline.dart';

// 从本地加载并绘制路线
Future<void> loadOfflineRoute(GoogleMapController controller) async {
  final box = await Hive.openBox('routes');
  final savedRoute = box.get('saved_route');
  if (savedRoute != null) {
    // 解码polyline为坐标点
    final polylinePoints = GoogleMapsPolyline().decodePolyline(savedRoute['polyline']);
    final LatLngBounds bounds = LatLngBounds(
      southwest: polylinePoints.first,
      northeast: polylinePoints.last,
    );
    // 绘制路线
    final Polyline routePolyline = Polyline(
      polylineId: const PolylineId('offline_route'),
      points: polylinePoints,
      width: 5,
      color: Colors.blue,
    );
    await controller.addPolyline(routePolyline);
    // 移动地图到路线区域
    await controller.animateCamera(CameraUpdate.newLatLngBounds(bounds, 50));
  }
}

3. 关键注意事项

  • 成本控制:仅发起一次Directions API请求,后续完全使用本地数据,避免频繁请求产生的高额费用。
  • 功能限制:离线状态下无法获取实时路况、交通事件,也不能自动重新规划路线,适合徒步等对路线变动要求低的场景。
  • 合规要求:需遵守Google Maps Platform的服务条款,不得篡改或滥用获取的路线数据,离线使用范围需符合条款规定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:20:17