ReferencedEnvelope dataArea = mapContext.getAreaOfInterest();
AffineTransform tx = new AffineTransform();
double offsetX = dataArea.getMinX() + dataArea.getWidth() / 2;
double offsetY = dataArea.getMinY() + dataArea.getHeight() / 2;
tx.translate(offsetX, offsetY);
tx.rotate(Math.toRadians(mapContext.getAngle()));
tx.translate(-offsetX, -offsetY);
Rectangle2D dataAreaShape = new Rectangle2D.Double(dataArea.getMinX(), dataArea.getMinY(), dataArea.getWidth(), dataArea.getHeight());
Rectangle2D transformedBounds = tx.createTransformedShape(dataAreaShape).getBounds2D();
return new ReferencedEnvelope(transformedBounds, mapContext.getAreaOfInterest().getCoordinateReferenceSystem());
}