}
public static void fitRequestToRaster(final GeneralEnvelope requestedEnvelope,
final RasterDatasetInfo rasterInfo, final RasterQueryInfo query) {
GridEnvelope resultGridRange;
GeneralEnvelope resultEnvelope;
// GridEnvelope resultDimensionInsideTiledImage;
GridEnvelope tiledImageGridRange;
// GridEnvelope levelTileRange;
GridEnvelope matchingTiles;
int rasterIndex = query.getRasterIndex();
int pyramidLevel = query.getPyramidLevel();
MathTransform2D rasterToModel = (MathTransform2D) rasterInfo.getRasterToModel(rasterIndex,
pyramidLevel);
MathTransform2D modelToRaster;
try {
modelToRaster = (MathTransform2D) rasterToModel.inverse();
final GeneralEnvelope adjustedGRange = CRS.transform(modelToRaster, requestedEnvelope);
int xmin = (int) Math.floor(adjustedGRange.getMinimum(0));
int ymin = (int) Math.floor(adjustedGRange.getMinimum(1));
int xmax = (int) Math.ceil(adjustedGRange.getMaximum(0));
int ymax = (int) Math.ceil(adjustedGRange.getMaximum(1));
final GridEnvelope levelRange = rasterInfo.getGridRange(rasterIndex, pyramidLevel);
xmin = Math.max(xmin, levelRange.getLow(0));
ymin = Math.max(ymin, levelRange.getLow(1));
xmax = Math.min(xmax, levelRange.getHigh(0) + 1);// 1+ because getHigh is inclusive
ymax = Math.min(ymax, levelRange.getHigh(1) + 1);// 1+ because getHigh is inclusive
int width = xmax - xmin;
int height = ymax - ymin;
resultGridRange = new GridEnvelope2D(xmin, ymin, width, height);