GoogleMapsFlutter 使用 LatLngBounds 将相机更新到子区域

GoogleMapsFlutter update camera to subregion with LatLngBounds

正如标题所暗示的那样,我正在尝试更新相机,以便它在小部件视口的特定部分包含 2 个坐标,而不是将相机聚焦在整个视口上。

我正在使用 Google Maps Flutter 包,这里是相机更新方式的片段:

import 'package:google_maps_flutter/google_maps_flutter.dart';

var markerPositions = [LatLng(-117.000, 23.22), LatLng(LatLng(-116.000, 2.22))];
const cameraPadding = 50.0;

// returns a `LatLngBounds` object that includes the marker positions
var bounds = Geo.boundsFromLatLngList(markerPositions);
var cameraUpdate = CameraUpdate.newLatLngBounds(bounds, cameraPadding);

// ... some code after ...
// GoogleMapsController controller;

controller.animateCamera(cameraUpdate);

相机更新工作正常,缩放级别自动设置,但它经常导致部分坐标隐藏在浮动视图后面,就像这样(不要介意 non-updating 地图背景):

现在,我想要实现的是如下所示,我想在地图小部件的子区域中显示 2 个坐标并更新相机;基本上是这样的:

我一直在研究包的 API,但我认为没有任何函数或方法可以直接实现这一点。我试过使用填充,但它只会导致非常缩小的焦点。

到目前为止,我认为我最好的选择是执行以下操作:

  1. 将相机更新为完整的小部件视口
  2. 抓取边界框的当前“X”和“Y”位置
  3. 计算当前边界框的中点
  4. 计算一个新的“目标”,将当前中点相对于 XY 距离向左偏移
  5. 相对于 XY 和边界框以某种方式调整缩放级别。

我不完全确定这是否是正确的方法或者我是否使用了正确的术语,但是如果有任何其他语言或技术的示例可以作为我可以推荐的起点阅读,我很高兴看到他们,或者如果有人遇到同样的问题并解决了它,如果您能分享他们的解决方案,我将不胜感激。

非常感谢!

GoogleMap(
    padding: EdgeInsets.only(right: 60),
)

调整所需的填充