/** * Returns the transformation going from the map area space to the screen space taking into * account map rotation */ public AffineTransform getRenderingTransform() { Rectangle paintArea = new Rectangle(0, 0, getMapWidth(), getMapHeight()); ReferencedEnvelope dataArea = getViewport().getBounds(); AffineTransform tx; if (getAngle() != 0.0) { tx = new AffineTransform(); tx.translate(paintArea.width / 2, paintArea.height / 2); tx.rotate(Math.toRadians(getAngle())); tx.translate(-paintArea.width / 2, -paintArea.height / 2); tx.concatenate(RendererUtilities.worldToScreenTransform(dataArea, paintArea)); } else { tx = RendererUtilities.worldToScreenTransform(dataArea, paintArea); } return tx; }
/** * Returns the actual area that should be drawn taking into account the map rotation account map * rotation */ public ReferencedEnvelope getRenderingArea() { ReferencedEnvelope dataArea = getViewport().getBounds(); if (getAngle() == 0) return dataArea; 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(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, dataArea.getCoordinateReferenceSystem()); }
angle = mapContent.getAngle(); mapWidth = mapContent.getMapWidth(); mapHeight = mapContent.getMapHeight();
&& mapContent.getAngle() == 0.0 && (layout == null || layout.isEmpty())) { List<GridCoverage2D> renderedCoverages = new ArrayList<GridCoverage2D>(2);