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

Flutter问题:根据当前位置与Bearing计算目标点异常排查

问题分析与解决方案

核心错误原因

你的计算代码存在致命疏漏:直接使用度数格式的经纬度参与三角函数运算,而sin/cos/asin等三角函数要求输入值为弧度。这会导致方位角计算完全失效,不同Bearing值算出的终点坐标几乎重合,最终线条视觉上没有区别。

修正后的代码

final la1 = vector.radians(userPosition.latitude); // 纬度转弧度
final lo1 = vector.radians(userPosition.longitude); // 经度转弧度

const r = 6367; // 地球半径(单位:公里)
const d = 40; // 目标距离(单位:公里)
const dist = d / r; // 弧度制距离

final bearing = vector.radians(direction.value); // 确保direction.value是地理正北为基准的方位角

// 计算终点的弧度坐标
final la2 = asin(
  sin(la1) * cos(dist) + cos(la1) * sin(dist) * cos(bearing)
);
final lo2 = lo1 + atan2(
  sin(bearing) * sin(dist) * cos(la1),
  cos(dist) - sin(la1) * sin(la2)
);

// 将弧度转回度数,生成最终坐标
return LatLng(vector.degrees(la2), vector.degrees(lo2));

额外注意事项

  • 确认direction.value的定义:必须是以地理正北为0度的方位角。如果是设备自身的朝向(比如屏幕顶部指向的方向),需要结合地图的当前旋转角度,或者通过传感器数据将设备朝向转换为地理方位角,否则旋转手机时线条方向不会匹配地图视角。
  • 测试验证:可以用已知方位角测试,比如输入0度(正北),终点应在当前位置正北;输入90度(正东),终点应在正东,以此确认计算逻辑正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:55:32