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

Flutter实现谷歌地图相机朝向跟随用户后方(类Waze)

Flutter实现导航地图后方跟随式相机朝向效果

要实现类似Waze或谷歌地图的后方跟随式导航相机效果,核心是利用CameraPosition的bearing(相机朝向)和tilt(俯视角度)参数,结合用户的实时航向角动态调整相机状态。以下是具体实现步骤:

1. 获取用户实时航向角

首先需要通过位置服务获取用户的移动航向(heading),这是相机跟随朝向的核心数据。可以使用geolocator包实现:

import 'package:geolocator/geolocator.dart';
import 'dart:math';

// 先请求位置权限
await Geolocator.requestPermission();

// 监听位置与航向的实时更新
StreamSubscription<Position> positionStream = Geolocator.getPositionStream(
  locationSettings: const LocationSettings(
    accuracy: LocationAccuracy.high, // 高精度模式
    distanceFilter: 1, // 移动1米触发更新
  ),
).listen((Position position) {
  // 获取用户当前航向角(范围0-360度)
  double? userHeading = position.heading;
  if (userHeading != null) {
    updateMapCamera(position, userHeading);
  }
});

2. 配置相机参数实现跟随效果

修改你现有的相机更新代码,添加bearing和tilt参数,还可以调整目标位置让用户处于画面更合理的区域:

void updateMapCamera(Position userPosition, double userHeading) {
  // 可选:计算用户后方偏移位置,让用户图标处于画面中间(比如偏移5米)
  const offsetDistance = 5.0; // 偏移距离(米)
  final radianHeading = userHeading * pi / 180; // 角度转弧度
  final offsetLat = userPosition.latitude - 
      (offsetDistance * sin(radianHeading)) / 111320; // 纬度偏移计算
  final offsetLng = userPosition.longitude - 
      (offsetDistance * cos(radianHeading)) / (111320 * cos(userPosition.latitude * pi / 180)); // 经度偏移计算

  mapController.moveCamera(CameraUpdate.newCameraPosition(CameraPosition(
    target: LatLng(offsetLat, offsetLng), // 偏移后的目标位置
    zoom: 18,
    bearing: userHeading, // 相机朝向与用户航向一致
    tilt: 60, // 俯视角度,模拟后方跟随视角(可调整50-70之间)
  )));
}

关键参数说明

  • bearing: 设置为用户的航向角,确保相机始终朝向用户前进方向,实现"跟随转向"效果。
  • tilt: 设置50-70度的俯视角度,模拟从用户后方斜向下看的视角,符合导航场景视觉习惯。
  • 目标位置偏移: 可选操作,将相机目标点设置在用户后方一小段距离,让用户图标处于画面中间偏下,前方道路完全展示,更贴近主流导航App体验。

注意事项

  • 部分设备可能无法提供航向数据,务必对userHeading做判空处理,避免报错。
  • 若需要更平滑的过渡效果,可替换moveCamera为animateCamera,并设置动画时长:
    mapController.animateCamera(
      CameraUpdate.newCameraPosition(...),
      duration: const Duration(milliseconds: 300),
    );
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:25:43