fit method

  1. @override
MapCamera fit(
  1. MapCamera camera
)
override

Returns a new MapCamera which fits this classes configuration.

Implementation

@override
MapCamera fit(MapCamera camera) {
  final paddingTL = Point<double>(padding.left, padding.top);
  final paddingBR = Point<double>(padding.right, padding.bottom);

  final paddingTotalXY = paddingTL + paddingBR;

  var newZoom = _getCoordinatesZoom(camera, paddingTotalXY);
  if (maxZoom != null) newZoom = math.min(maxZoom!, newZoom);

  final projectedPoints =
      coordinates.map((coord) => camera.project(coord, newZoom));

  final rotatedPoints =
      projectedPoints.map((point) => point.rotate(-camera.rotationRad));

  final rotatedBounds = Bounds.containing(rotatedPoints);

  // Apply padding
  final paddingOffset = (paddingBR - paddingTL) / 2;
  final rotatedNewCenter = rotatedBounds.center + paddingOffset;

  // Undo the rotation
  final unrotatedNewCenter = rotatedNewCenter.rotate(camera.rotationRad);

  final newCenter = camera.unproject(unrotatedNewCenter, newZoom);

  return camera.withPosition(
    center: newCenter,
    zoom: newZoom,
  );
}