g2w.concatenate(CoverageUtilities.CENTER_TO_CORNER);
// keep into account levels and subsampling
final OverviewLevel level = rasterManager.overviewsController.resolutionsLevels.get(overviewsLevel);
final OverviewLevel baseLevel = rasterManager.overviewsController.resolutionsLevels.get(0);
final AffineTransform2D adjustments = new AffineTransform2D(
(level.resolutionX / baseLevel.resolutionX)
* baseReadParameters.getSourceXSubsampling(), 0, 0,
(level.resolutionY / baseLevel.resolutionY)
* baseReadParameters.getSourceYSubsampling(), 0, 0);
g2w.concatenate(adjustments);
// move it to the corner
finalGridToWorldCorner = new AffineTransform2D(g2w);
finalWorldToGridCorner = finalGridToWorldCorner.inverse();
final GeneralEnvelope tempRasterBounds = CRS.transform(finalWorldToGridCorner, finalBBox);
rasterBounds=tempRasterBounds.toRectangle2D().getBounds();
if (rasterBounds.width == 0)
rasterBounds.width++;
if (rasterBounds.height == 0)
rasterBounds.height++;
final double[] requestRes = request.getRequestedResolution();
final double resX = baseLevel.resolutionX;
final double resY = baseLevel.resolutionY;
if ((requestRes[0] < resX || requestRes[1] < resY) ) {
// Using the best available resolution
oversampledRequest = true;
}
if(oversampledRequest)
rasterBounds.grow(2, 2);
RenderedImage theImage=null;
try {
RasterLoadingResult result = rasterManager.rasterDescriptor.loadRaster(baseReadParameters, overviewsLevel, finalBBox,
finalWorldToGridCorner, request, request.getTileDimensions());
theImage =result.getRaster();
if (theImage == null) {
if (LOGGER.isLoggable(Level.FINE)) {
LOGGER.log(Level.FINE, "Unable to load the raster with request " + request.toString());
}
}
//
// Set final transformation
//
RasterLayerResponse.this.finalGridToWorldCorner=new AffineTransform2D(result.gridToWorld);
} catch (ImagingException e) {
if (LOGGER.isLoggable(Level.INFO)) {
LOGGER.fine("Unable to load the raster with request " + request);