fit method

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

Create a new fitted camera based off the current camera

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;
  final paddingOffset = (paddingBR - paddingTL) / 2;

  final cameraSize = camera.nonRotatedSize - paddingTotalXY;

  final projectedBoundsSize = Bounds(
    camera.project(bounds.southEast, camera.zoom),
    camera.project(bounds.northWest, camera.zoom),
  ).size;

  final scale = _rectInRotRectScale(
    angleRad: camera.rotationRad,
    smallRectHalfWidth: cameraSize.x / 2.0,
    smallRectHalfHeight: cameraSize.y / 2.0,
    bigRectHalfWidth: projectedBoundsSize.x / 2.0,
    bigRectHalfHeight: projectedBoundsSize.y / 2.0,
  );

  var newZoom = camera.getScaleZoom(1.0 / scale);

  if (forceIntegerZoomLevel) {
    newZoom = newZoom.ceilToDouble();
  }

  final min = math.max(
    camera.minZoom ?? 0,
    minZoom,
  );
  final max = math.min(
    camera.maxZoom ?? double.infinity,
    maxZoom ?? double.infinity,
  );
  newZoom = newZoom.clamp(min, max);

  final newCenter = _getCenter(
    camera,
    newZoom: newZoom,
    paddingOffset: paddingOffset,
  );

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