/** * Builds a dimension helper from the CoverageInfo * * @param encodedId The encoded coverage id * @param ci The CoverageInfo * @param reader * @return A WCSDimensionsHelper, or null if there are no extra dimensions to handle * @throws Exception */ public static WCSDimensionsHelper getWCSDimensionsHelper( String encodedId, CoverageInfo ci, GridCoverage2DReader reader) throws Exception { WCSDimensionsHelper dimensionsHelper = null; MetadataMap metadata = ci.getMetadata(); Map<String, DimensionInfo> dimensionsMap = WCSDimensionsHelper.getDimensionsFromMetadata(metadata); // Setup a dimension helper in case we found some dimensions for that coverage if (!dimensionsMap.isEmpty()) { dimensionsHelper = new WCSDimensionsHelper(dimensionsMap, reader, encodedId); } return dimensionsHelper; }
final DimensionInfo timeDimension = helper.getTimeDimension(); if (timeDimension != null) { start(initStartMetadataTag(TAG.TIME_DOMAIN, null, timeDimension, helper)); final DimensionPresentation presentation = timeDimension.getPresentation(); final String id = helper.getCoverageId(); switch (presentation) { case CONTINUOUS_INTERVAL: encodeTimePeriod( helper.getBeginTime(), helper.getEndTime(), id + "_tp_0", null, case DISCRETE_INTERVAL: encodeTimePeriod( helper.getBeginTime(), helper.getEndTime(), id + "_tp_0", helper.getTimeResolutionUnit(), helper.getTimeResolutionValue()); break; default: final TreeSet<Object> domain = helper.getTimeDomain(); int i = 0; for (Object item : domain) {
WCSDimensionsHelper.getDimensionDescriptor( reader, coverageName, dimensionName); if (dimensionDescriptor != null) {
if (dimensionTag.equals(TAG.ADDITIONAL_DIMENSION)) { prolog = TAG.ADDITIONAL_DIMENSION + " name = \"" + name + "\""; defaultValue = helper.getDefaultValue(name); } else if (dimensionTag.equals(TAG.ELEVATION_DOMAIN)) { prolog = TAG.ELEVATION_DOMAIN; defaultValue = helper.getBeginElevation(); } else if (dimensionTag.equals(TAG.TIME_DOMAIN)) { prolog = TAG.TIME_DOMAIN; defaultValue = helper.getEndTime();
ci.getMetadata().get(ResourceInfo.TIME, DimensionInfo.class); WCSDimensionsHelper timeHelper = new WCSDimensionsHelper(time, reader, datasetId); dcTranslator.encodeTimePeriod( timeHelper.getBeginTime(), timeHelper.getEndTime(), datasetId + "_timeperiod", null,
boolean hasTime = false; if (dimensionHelper != null) { if (dimensionHelper.getElevationDimension() != null) { uomLabels = uomLabels + " m"; // TODO: Check elevation uom hasElevation = true; if (dimensionHelper.getTimeDimension() != null) { uomLabels = uomLabels + " s"; hasTime = true; .append(" ") .append(envelope.getLowerCorner().getOrdinate(axisSwap ? 0 : 1)) .append(hasElevation ? " " + dimensionHelper.getBeginElevation() : "") .toString(); .append(" ") .append(envelope.getUpperCorner().getOrdinate(axisSwap ? 0 : 1)) .append(hasElevation ? " " + dimensionHelper.getEndElevation() : "") .toString(); element("gml:beginPosition", dimensionHelper.getBeginTime()); element("gml:endPosition", dimensionHelper.getEndTime());
final DimensionInfo elevationDimension = helper.getElevationDimension(); if (elevationDimension != null) { start(initStartMetadataTag(TAG.ELEVATION_DOMAIN, null, elevationDimension, helper)); helper.getBeginElevation(), helper.getEndElevation(), null, null); break; case DISCRETE_INTERVAL: encodeInterval( helper.getBeginElevation(), helper.getEndElevation(), helper.getElevationResolutionUnit(), helper.getElevationResolutionValue()); break; default: final TreeSet<Object> domain = helper.getElevationDomain(); for (Object item : domain) { if (item instanceof Number) {
throw new WCS20Exception( "Requested time subset does not intersect the declared range " + helper.getBeginTime() + "/" + helper.getEndTime(), WCS20ExceptionCode.InvalidSubsetting, "subset"); timeDomain.stream().map(o -> helper.format(o)).collect(Collectors.toList()); throw new WCS20Exception( "Requested time subset does not intersect available values "
WCSDimensionsHelper.getWCSDimensionsHelper(coverageId, coverageInfo, reader); ReaderDimensionsAccessor accessor = helper.getDimensionAccessor(); DimensionInfo timeDimension = helper.getTimeDimension(); if (requestedTimeSubset != null && timeDimension != null && timeDimension.isEnabled()) { checkTimeDomainIntersection(helper, accessor, requestedTimeSubset, timeDimension); DimensionInfo elevationDimension = helper.getElevationDimension(); if (requestedElevationRange != null && elevationDimension != null
/** * Formats a dimension item into a string * * @param time */ public String format(Object o) { if (o instanceof Range) { Range range = (Range) o; return format(range.getMinValue()) + "/" + format(range.getMaxValue()); } else if (o instanceof Date) { return format((Date) o); } else { return String.valueOf(o); } }
final List<String> domain = helper.getDomain(name); Date date = WCSDimensionsValueParser.parseAsDate(item); if (date != null) { final String dimensionId = helper.getCoverageId() + "_dd_" + i; encodeDate(date, helper, dimensionId); continue;
throw new WCS20Exception( "Requested elevation subset does not intersect the declared range " + helper.getBeginElevation() + "/" + helper.getEndElevation(), WCS20ExceptionCode.InvalidSubsetting, "subset");
/** * Look for additional dimensions in the dimensionsHelper and put additional domains to the * metadata * * @param helper * @throws IOException */ private void handleAdditionalDimensionMetadata(final WCSDimensionsHelper helper) throws IOException { Utilities.ensureNonNull("helper", helper); final Map<String, DimensionInfo> additionalDimensions = helper.getAdditionalDimensions(); final Set<String> dimensionsName = additionalDimensions.keySet(); final Iterator<String> dimensionsIterator = dimensionsName.iterator(); while (dimensionsIterator.hasNext()) { final String dimensionName = dimensionsIterator.next(); final DimensionInfo customDimension = additionalDimensions.get(dimensionName); if (customDimension != null) { setAdditionalDimensionMetadata(dimensionName, customDimension, helper); } } }
(GridCoverage2DReader) ci.getGridCoverageReader(null, null); WCSDimensionsHelper dimensionsHelper = new WCSDimensionsHelper(time, reader, null); tx.start("gml:TimePeriod", atts("gml:id", datasetId + "__timeperiod")); element(tx, "gml:beginPosition", dimensionsHelper.getBeginTime(), null); element(tx, "gml:endPosition", dimensionsHelper.getEndTime(), null); tx.end("gml:TimePeriod"); tx.end("wcseo:DatasetSeriesSummary");
/** * Returns the minimum time, formatted according to ISO8601 * * @throws IOException */ public String getBeginTime() throws IOException { Date minTime = accessor.getMinTime(); return format(minTime); }
WCSDimensionsHelper dimensionHelper = new WCSDimensionsHelper(time, reader, coverageId); tx.start("wcseo:EOMetadata"); tx.start("eop:EarthObservation", atts("gml:id", coverageId + "_metadata")); element(tx, "gml:beginPosition", dimensionHelper.getBeginTime(), null); element(tx, "gml:endPosition", dimensionHelper.getEndTime(), null); tx.end("gml:TimePeriod"); tx.end("om:phenomenonTime"); element(tx, "gml:timePosition", dimensionHelper.getEndTime(), null); tx.end("gml:TimeInstant"); tx.end("om:resultTime");
String endTimeAttribute = null; DimensionDescriptor timeDescriptor = WCSDimensionsHelper.getDimensionDescriptor(reader, coverageName, "TIME"); String endElevationAttribute = null; DimensionDescriptor elevationDescriptor = WCSDimensionsHelper.getDimensionDescriptor(reader, coverageName, "ELEVATION"); if (elevationDescriptor != null) { startElevationAttribute = elevationDescriptor.getStartAttribute(); String endAttribute = null; DimensionDescriptor descriptor = WCSDimensionsHelper.getDimensionDescriptor(reader, coverageName, customDomain); if (descriptor != null) { startAttribute = descriptor.getStartAttribute();
/** * Returns the maximum time, formatted according to ISO8601 * * @throws IOException */ public String getEndTime() throws IOException { Date maxTime = accessor.getMaxTime(); return format(maxTime); }
WCSDimensionsHelper.getDimensionDescriptor( structuredReader, coverageName, dimensionID); if (descriptor == null) {
/** * Encode a DateRange item as a GML TimePeriod * * @param range * @param helper * @param id */ private void encodeDateRange( final DateRange range, final WCSDimensionsHelper helper, final String id) { encodeTimePeriod( helper.format(range.getMinValue()), helper.format(range.getMaxValue()), id, null, null); }