/** * Encode the interval range * * @param range */ private boolean setRange(NumberRange<? extends Number> range) { if (range != null && !Double.isInfinite(range.getMaximum()) && !Double.isInfinite(range.getMinimum())) { start("swe:interval"); chars(range.getMinValue() + " " + range.getMaxValue()); end("swe:interval"); return true; } return false; }
start("gml:domainSet"); start("gml:RectifiedGrid", gridAttrs); start("gml:limits"); start("gml:GridEnvelope"); element("gml:low", lowSb.toString().trim()); element("gml:high", highSb.toString().trim()); end("gml:GridEnvelope"); end("gml:limits"); element("gml:axisLabels", "i j"); pointAttr.addAttribute("", "gml:id", "gml:id", "", "p00_" + gcName); pointAttr.addAttribute("", "srsName", "srsName", "", srsName); start("gml:origin"); start("gml:Point", pointAttr); element( "gml:pos", axesSwap ? g2W.getTranslateY() + " " + g2W.getTranslateX() : g2W.getTranslateX() + " " + g2W.getTranslateY()); end("gml:Point"); end("gml:origin"); element( "gml:offsetVector", Double.valueOf(axesSwap ? g2W.getShearX() : g2W.getScaleX())
extractUoM(crs, cs.getAxis(axisSwap ? 1 : 0).getUnit()) + " " + extractUoM(crs, cs.getAxis(axisSwap ? 0 : 1).getUnit()); envelopeAttrs.addAttribute( "", "srsDimension", "srsDimension", "", String.valueOf(srsDimension)); start("gml:boundedBy"); String envelopeName; if (dimensionHelper != null && (hasTime || hasElevation)) { envelopeName = "gml:Envelope"; start(envelopeName, envelopeAttrs); element("gml:lowerCorner", lower); element("gml:upperCorner", upper); element("gml:beginPosition", dimensionHelper.getBeginTime()); element("gml:endPosition", dimensionHelper.getEndTime()); end(envelopeName); end("gml:boundedBy");
@Override public void encode(Object o) throws IllegalArgumentException { NamespaceSupport namespaces = getNamespaceSupport(); namespaces.declarePrefix( "wcscrs", "http://www.opengis.net/wcs/service-extension/crs/1.0"); helper.registerNamespaces(getNamespaceSupport(), attributes); start("gml:RectifiedGridCoverage", attributes); try { GeneralEnvelope envelope = new GeneralEnvelope(gc2d.getEnvelope()); handleBoundedBy(envelope, axisSwap, srsName, axesLabel, null); } catch (IOException ex) { throw new WCS20Exception(ex); handleDomainSet(gc2d.getGridGeometry(), gc2d.getDimension(), gcName, srsName, axisSwap); handleRangeType(gc2d); handleCoverageFunction(ge2D, axisSwap); handleRange(gc2d); handleMetadata(null, null); } catch (IOException e) { end("gml:RectifiedGridCoverage");
start("gml:rangeType"); start("swe:DataRecord"); start("swe:field", fieldAttr); start("swe:Quantity"); start("swe:description"); chars(sd.getDescription().toString()); // TODO can we make up something better?? end("swe:description"); "", uom == null ? "W.m-2.Sr-1" : SimpleUnitFormat.getInstance().format(uom)); start("swe:uom", uomAttr); end("swe:uom"); start("swe:constraint"); start("swe:AllowedValues"); handleSampleDimensionRange(sd); // TODO make this generic end("swe:AllowedValues"); end("swe:constraint"); handleSampleDimensionNilValues(gc2d, sd.getNoDataValues()); end("swe:Quantity"); end("swe:field"); end("swe:DataRecord"); end("gml:rangeType");
private void encodeAsDataBlocks(GridCoverage2D gc2d) { start("gml:DataBlock"); start("gml:rangeParameters"); end("gml:rangeParameters"); start("tupleList"); for (int i = 0; i < numBands; i++) { chars(String.valueOf(valuesI[i])); if (i + 1 < numBands) { chars(","); for (int i = 0; i < numBands; i++) { chars(String.valueOf(valuesD[i])); if (i + 1 < numBands) { chars(","); chars(" "); iterator.nextPixel(); chars("\n"); end("tupleList"); end("gml:DataBlock");
Utilities.ensureNonNull("helper", helper); final String startTag = initStartMetadataTag(TAG.ADDITIONAL_DIMENSION, name, dimension, helper); start(startTag); if (date != null) { final String dimensionId = helper.getCoverageId() + "_dd_" + i; encodeDate(date, helper, dimensionId); continue; element(TAG.SINGLE_VALUE, item.toString()); continue; encodeInterval( range.getMinValue().toString(), range.getMaxValue().toString(), element(TAG.SINGLE_VALUE, item.toString()); end(TAG.ADDITIONAL_DIMENSION);
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(), break; case DISCRETE_INTERVAL: encodeTimePeriod( helper.getBeginTime(), helper.getEndTime(), encodeDate((Date) item, helper, id + "_td_" + i); } else if (item instanceof DateRange) { encodeDateRange((DateRange) item, helper, id + "_td_" + i); end(TAG.TIME_DOMAIN);
start(initStartMetadataTag(TAG.ELEVATION_DOMAIN, null, elevationDimension, helper)); final DimensionPresentation presentation = elevationDimension.getPresentation(); switch (presentation) { encodeInterval( helper.getBeginElevation(), helper.getEndElevation(), null, null); break; case DISCRETE_INTERVAL: encodeInterval( helper.getBeginElevation(), helper.getEndElevation(), for (Object item : domain) { if (item instanceof Number) { element(TAG.SINGLE_VALUE, item.toString()); } else if (item instanceof NumberRange) { NumberRange range = (NumberRange) item; encodeInterval( range.getMinValue().toString(), range.getMaxValue().toString(), end(TAG.ELEVATION_DOMAIN);
public void handleSampleDimensionNilValues(GridCoverage2D gc2d, double[] nodataValues) { start("swe:nilValues"); start("swe:NilValues"); "", "http://www.opengis.net/def/nil/OGC/0/unknown"); element("swe:nilValue", String.valueOf(nodata), nodataAttr); "", "http://www.opengis.net/def/nil/OGC/0/unknown"); element("swe:nilValue", nodata, nodataAttr); } else { "", "http://www.opengis.net/def/nil/OGC/0/unknown"); element("swe:nilValue", nodata.toString(), nodataAttr); end("swe:NilValues"); end("swe:nilValues");
/** * Encode the coverage function or better the GridFunction as per clause 19.3.12 of GML * 3.2.1 which helps us with indicating in which way we traverse the data. * * <p>Notice that we use the axisOrder to actually <strong>always</strong> encode data il * easting,northing, hence in case of a northing,easting crs we use a reversed order to * indicate that we always walk on the raster columns first. * * <p>In cases where the coordinates increases in the opposite order ho our walk the * offsetVectors of the RectifiedGrid will do the rest. * * @param gc2d * @param axisSwap */ public void handleCoverageFunction(GridEnvelope2D gridRange, boolean axisSwap) { start("gml:coverageFunction"); start("gml:GridFunction"); // build the fragment final AttributesImpl gridAttrs = new AttributesImpl(); gridAttrs.addAttribute("", "axisOrder", "axisOrder", "", axisSwap ? "+2 +1" : "+1 +2"); element("gml:sequenceRule", "Linear", gridAttrs); // minOccurs 0, default Linear element( "gml:startPoint", gridRange.x + " " + gridRange.y); // we start at minx, miny (this is optional though) end("gml:GridFunction"); end("gml:coverageFunction"); }
start("gmlcov:metadata"); start("gmlcov:Extension"); handleTimeMetadata(dimensionsHelper); handleElevationMetadata(dimensionsHelper); handleAdditionalDimensionMetadata(dimensionsHelper); end("gmlcov:Extension"); end("gmlcov:metadata");
/** * Encode a GML time period * * @param beginPosition * @param endPosition * @param timePeriodId * @param intervalUnit * @param intervalValue */ public void encodeTimePeriod( String beginPosition, String endPosition, String timePeriodId, String intervalUnit, Long intervalValue) { AttributesImpl atts = new AttributesImpl(); atts.addAttribute("", "gml:id", "gml:id", "", timePeriodId); start("gml:TimePeriod", atts); element("gml:beginPosition", beginPosition); element("gml:endPosition", endPosition); if (intervalUnit != null && intervalValue != null) { atts = new AttributesImpl(); atts.addAttribute("", "unit", "unit", "", intervalUnit); element("gml:timeInterval", intervalValue.toString(), atts); } end("gml:TimePeriod"); }
/** * Encode Interval * * @param beginPosition * @param endPosition * @param dimensionId */ public void encodeInterval( String beginPosition, String endPosition, String intervalUnit, Double intervalValue) { AttributesImpl atts = new AttributesImpl(); start(TAG.RANGE, atts); element(TAG.INTERVAL_START, beginPosition); element(TAG.INTERVAL_END, endPosition); if (intervalUnit != null && intervalValue != null) { atts = new AttributesImpl(); atts.addAttribute("", "unit", "unit", "", intervalUnit); element(TAG.INTERVAL_PERIOD, intervalValue.toString(), atts); } end(TAG.RANGE); } /**
/** * 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); }
private void encodeFileReference(FileReference fileReference) { start("gml:File"); final AttributesImpl atts = new AttributesImpl(); atts.addAttribute("", "xlink:arcrole", "xlink:arcrole", "", "fileReference"); atts.addAttribute( "", "xlink:href", "xlink:href", "", "cid:" + fileReference.getReference()); atts.addAttribute( "", "xlink:role", "xlink:role", "", fileReference.getConformanceClass()); element("gml:rangeParameters", "", atts); element("gml:fileReference", "cid:" + fileReference.getReference()); element("gml:fileStructure", ""); element("gml:mimeType", fileReference.getMimeType()); end("gml:File"); }
/** * Encode a Date item as a GML TimeInstant * * @param item * @param helper * @param id */ private void encodeDate( final Date item, final WCSDimensionsHelper helper, final String id) { final AttributesImpl atts = new AttributesImpl(); atts.addAttribute("", "gml:id", "gml:id", "", id); start("gml:TimeInstant", atts); element("gml:timePosition", helper.format(item)); end("gml:TimeInstant"); }
/** * Encodes the Range as per the GML spec of the provided {@link GridCoverage2D} * * @param gc2d the {@link GridCoverage2D} for which to encode the Range. */ public void handleRange(GridCoverage2D gc2d) { // preamble start("gml:rangeSet"); if (fileReference != null) { encodeFileReference(fileReference); } else { encodeAsDataBlocks(gc2d); } end("gml:rangeSet"); }
@Override public Translator createTranslator(ContentHandler handler) { return new GMLTranslator(handler); } }