new GridGeometry2D(reader.getOriginalGridRange(), subEnvelope));
GridCoverage2D gc = (GridCoverage2D) reader.read(CoverageUtils.getParameters(readParams, parameters,
true));
// grid geometry
final GridGeometry geometry = gc.getGridGeometry();
final int dimensions = geometry.getGridRange().getDimension();
String lower = "";
String upper = "";
for(int i = 0; i < dimensions; i++) {
lower = lower + geometry.getGridRange().getLow(i) + " ";
upper = upper + geometry.getGridRange().getHigh(i) + " ";
}
writer.write("<grid dimension = \"" + dimensions + "\">\n");
writer.write("<low>" + lower + "</low>\n");
writer.write("<high>" + upper + "</high>\n");
final CoordinateSystem cs = crs.getCoordinateSystem();
for (int i=0; i < cs.getDimension(); i++) {
writer.write("<axisName>" + cs.getAxis(i).getName().getCode() + "</axisName>\n");
}
if(geometry.getGridToCRS() instanceof AffineTransform) {
AffineTransform aTX = (AffineTransform) geometry.getGridToCRS();
writer.write("<geoTransform>");
writer.write("<scaleX>" + aTX.getScaleX() + "</scaleX>\n");
writer.write("<scaleY>" + aTX.getScaleY() + "</scaleY>\n");
writer.write("<shearX>" + aTX.getShearX() + "</shearX>\n");
writer.write("<shearY>" + aTX.getShearY() + "</shearY>\n");