// Setup a dimension helper in case we found some dimensions for that coverage
if (!dimensionsMap.isEmpty()) {
dimensionsHelper = new WCSDimensionsHelper(dimensionsMap, RequestUtils.getCoverageReader(ci), encodedId);
}
GridCoverage2DReader reader = (GridCoverage2DReader) ci.getGridCoverageReader(null, null);
if (reader== null) {
throw new WCS20Exception("Unable to read sample coverage for " + ci.getName());
}
// get the crs and look for an EPSG code
final CoordinateReferenceSystem crs = reader.getCoordinateReferenceSystem();
List<String> axesNames = envelopeDimensionsMapper.getAxesNames(
reader.getOriginalEnvelope(), true);
// lookup EPSG code
Integer EPSGCode = null;
try {
EPSGCode = CRS.lookupEpsgCode(crs, false);
} catch (FactoryException e) {
throw new IllegalStateException("Unable to lookup epsg code for this CRS:"
+ crs, e);
}
if (EPSGCode == null) {
throw new IllegalStateException("Unable to lookup epsg code for this CRS:"
+ crs);
}
final String srsName = GetCoverage.SRS_STARTER + EPSGCode;
// handle axes swap for geographic crs
final boolean axisSwap = CRS.getAxisOrder(crs).equals(AxisOrder.EAST_NORTH);
// encoding ID of the coverage
final AttributesImpl coverageAttributes = new AttributesImpl();
coverageAttributes.addAttribute("", "gml:id", "gml:id", "", encodedId);
// starting encoding
start("wcs:CoverageDescription", coverageAttributes);
// handle domain
final StringBuilder builder = new StringBuilder();
for (String axisName : axesNames) {
builder.append(axisName).append(" ");
}
if (dimensionsHelper != null && dimensionsHelper.getElevationDimension() != null) {
builder.append("elevation ");
}
if (dimensionsHelper != null && dimensionsHelper.getTimeDimension() != null) {
builder.append("time ");
}
String axesLabel = builder.substring(0, builder.length() - 1);
GeneralEnvelope envelope = reader.getOriginalEnvelope();
handleBoundedBy(envelope, axisSwap, srsName, axesLabel, dimensionsHelper);
// coverage id
element("wcs:CoverageId", encodedId);
// handle coverage function
handleCoverageFunction((GridEnvelope2D) reader.getOriginalGridRange(), axisSwap);
// metadata
handleMetadata(ci, dimensionsHelper);
// handle domain
builder.setLength(0);
axesNames = envelopeDimensionsMapper.getAxesNames(reader.getOriginalEnvelope(), false);
for (String axisName : axesNames) {
builder.append(axisName).append(" ");
}
axesLabel = builder.substring(0, builder.length() - 1);
GridGeometry2D gg = new GridGeometry2D(reader.getOriginalGridRange(),
reader.getOriginalGridToWorld(PixelInCell.CELL_CENTER), reader.getCoordinateReferenceSystem());
handleDomainSet(gg, 2, encodedId, srsName, axisSwap);
// handle rangetype
handleRangeType(ci.getDimensions());