String coverageId = NCNameResourceCodec.encode(ci);
WCSDimensionsHelper dimensionHelper = new WCSDimensionsHelper(time, reader, coverageId);
tx.start("wcseo:EOMetadata");
tx.start("eop:EarthObservation", atts("gml:id", coverageId + "_metadata"));
tx.start("om:phenomenonTime");
tx.start("gml:TimePeriod", atts("gml:id", coverageId + "_tp"));
element(tx, "gml:beginPosition", dimensionHelper.getBeginTime(), null);
element(tx, "gml:endPosition", dimensionHelper.getEndTime(), null);
tx.start("om:resultTime");
tx.start("gml:TimeInstant", atts("gml:id", coverageId + "_rt"));
element(tx, "gml:timePosition", dimensionHelper.getEndTime(), null);
tx.end("gml:TimeInstant");
double maxx = ge.getUpperCorner().getOrdinate(axisSwap ? 1 : 0);
double maxy = ge.getUpperCorner().getOrdinate(axisSwap ? 0 : 1);
tx.start("om:featureOfInterest");
tx.start("eop:Footprint", atts("gml:id", coverageId + "_fp"));
tx.start("eop:multiExtentOf");
tx.start("gml:MultiSurface", atts("gml:id", coverageId + "_ms", "srsName", srsName));
tx.start("gml:surfaceMembers");
tx.start("gml:Polygon", atts("gml:id", coverageId + "_msp"));
tx.start("gml:exterior");
tx.start("gml:LinearRing");
String posList = posList(minx, miny, minx, maxy, maxx, maxy, maxx, miny, minx, miny);
element(tx, "gml:posList", posList, null);
double midx = (minx + maxx) / 2;