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 = _getBoundsZoom(camera, paddingTotalXY);
  if (maxZoom != null) newZoom = math.min(maxZoom!, newZoom);

  final paddingOffset = (paddingBR - paddingTL) / 2;
  final swPoint = camera.project(bounds.southWest, newZoom);
  final nePoint = camera.project(bounds.northEast, newZoom);

  final Point<double> projectedCenter;
  if (camera.rotation != 0.0) {
    final swPointRotated = swPoint.rotate(-camera.rotationRad);
    final nePointRotated = nePoint.rotate(-camera.rotationRad);
    final centerRotated =
        (swPointRotated + nePointRotated) / 2 + paddingOffset;

    projectedCenter = centerRotated.rotate(camera.rotationRad);
  } else {
    projectedCenter = (swPoint + nePoint) / 2 + paddingOffset;
  }

  final center = camera.unproject(projectedCenter, newZoom);
  return camera.withPosition(
    center: center,
    zoom: newZoom,
  );
}