private CoverageInfo resolve(CoverageInfo r) { CoverageInfoImpl c = (CoverageInfoImpl) r; if (c.getDimensions() != null) { for (CoverageDimensionInfo dim : c.getDimensions()) { if (dim.getNullValues() == null) { ((CoverageDimensionImpl) dim).setNullValues(new ArrayList<Double>()); } } } resolveCollections(r); return r; }
double max = cat.getRange().getMaximum(); dim.getNullValues().add(min); if (min != max) { dim.getNullValues().add(max);
public CoverageDimensionImpl(CoverageDimensionInfo other) { this.id = other.getId(); this.name = other.getName(); this.description = other.getDescription(); this.range = other.getRange(); this.nullValues = other.getNullValues(); this.unit = other.getUnit(); this.dimensionType = other.getDimensionType(); }
final List<Double> nullValues = info.getNullValues(); double[] configuredNoDataValues; if (nullValues != null && nullValues.size() > 0) {
@Test public void testSingleBandedCoverage() throws Exception { // build a feature type (it's already in the catalog, but we just want to // check it's built as expected // LINES is a feature type with a native SRS, so we want the bounds to be there Catalog cat = getCatalog(); CatalogBuilder cb = new CatalogBuilder(cat); cb.setStore(cat.getCoverageStoreByName(MockData.TASMANIA_DEM.getLocalPart())); CoverageInfo ci = cb.buildCoverage(); // perform basic checks assertEquals(CRS.decode("EPSG:4326", true), ci.getCRS()); assertEquals("EPSG:4326", ci.getSRS()); assertNotNull(ci.getNativeCRS()); assertNotNull(ci.getNativeBoundingBox()); assertNotNull(ci.getLatLonBoundingBox()); // check the coverage dimensions List<CoverageDimensionInfo> dimensions = ci.getDimensions(); assertEquals(1, dimensions.size()); CoverageDimensionInfo dimension = dimensions.get(0); assertEquals("GRAY_INDEX", dimension.getName()); assertEquals(1, dimension.getNullValues().size()); assertEquals(-9999, dimension.getNullValues().get(0), 0d); assertEquals(Double.NEGATIVE_INFINITY, dimension.getRange().getMinimum(), 0d); // Huston, we have a problem here... // assertEquals(9999, dimension.getRange().getMaximum(), 0d); assertNull(dimension.getUnit()); }
@Test public void testMultiBandCoverage() throws Exception { Catalog cat = getCatalog(); CatalogBuilder cb = new CatalogBuilder(cat); cb.setStore(cat.getCoverageStoreByName(MockData.TASMANIA_BM.getLocalPart())); CoverageInfo ci = cb.buildCoverage(); // perform basic checks assertEquals(CRS.decode("EPSG:4326", true), ci.getCRS()); assertEquals("EPSG:4326", ci.getSRS()); assertNotNull(ci.getNativeCRS()); assertNotNull(ci.getNativeBoundingBox()); assertNotNull(ci.getLatLonBoundingBox()); // check the coverage dimensions List<CoverageDimensionInfo> dimensions = ci.getDimensions(); assertEquals(3, dimensions.size()); CoverageDimensionInfo dimension = dimensions.get(0); assertEquals("RED_BAND", dimension.getName()); assertEquals(0, dimension.getNullValues().size()); assertEquals(Double.NEGATIVE_INFINITY, dimension.getRange().getMinimum(), 0d); assertEquals(Double.POSITIVE_INFINITY, dimension.getRange().getMaximum(), 0d); assertEquals("W.m-2.Sr-1", dimension.getUnit()); }
@Test public void testMissingNullValuesInCoverageDimensions() throws IOException { CoverageInfo ci = getCatalog().getCoverageByName(getLayerId(MockData.TASMANIA_DEM)); List<CoverageDimensionInfo> dimensions = ci.getDimensions(); // legacy layers have no null value list dimensions.get(0).getNullValues().clear(); getCatalog().save(ci); // and now go back and ask for the reader ci = getCatalog().getCoverageByName(getLayerId(MockData.TASMANIA_DEM)); GridCoverageReader reader = ci.getGridCoverageReader(null, null); GridCoverage2D gc = null; try { // check that we maintain the native info if we don't have any gc = (GridCoverage2D) reader.read(null); assertEquals(-9999d, CoverageUtilities.getNoDataProperty(gc).getAsSingleValue(), 0d); } finally { if (gc != null) { RenderedImage ri = gc.getRenderedImage(); if (gc instanceof GridCoverage2D) { gc.dispose(true); } if (ri instanceof PlanarImage) { ImageUtilities.disposePlanarImageChain((PlanarImage) ri); } } } }
@Override public Object getPropertyValue(CoverageDimensionInfo item) { List<Double> values = item.getNullValues(); if (values == null || values.isEmpty()) { return "-"; } else { StringBuilder sb = new StringBuilder(); final int size = values.size(); for (int i = 0; i < size; i++) { sb.append(values.get(i)); if (i < size - 1) { sb.append(", "); } } return sb.toString(); } } });
protected void handleNullValues(List<CoverageDimensionInfo> dimensions) { for (CoverageDimensionInfo cd : dimensions) { List<Double> nulls = cd.getNullValues(); if (nulls == null) return; if (nulls.size() == 1) { element("wcs:NullValue", nulls.get(0).toString()); } else if (nulls.size() >= 1) { // the new specification allows only for a list of values, // Can we assume min and max are two integer numbers and // make up a list out of them? For the moment, just fail throw new IllegalArgumentException( "Cannot encode a range of null values, " + "only single values are handled"); } } }
List<Double> nullValues = sd.getNullValues(); if (nullValues != null && !nullValues.isEmpty()) { final int size = nullValues.size();
dimension.setUnit(originalUnit); List<Double> nullValues = dimension.getNullValues(); if (nullValues != null) { nullValues.clear();
dimension.setUnit(originalUnit); List<Double> nullValues = dimension.getNullValues(); if (nullValues != null) { nullValues.clear();
assertEquals(Double.POSITIVE_INFINITY, range.getMaximum(), DELTA); assertEquals("GridSampleDimension[-Infinity,Infinity]", dimension.getDescription()); List<Double> nullValues = dimension.getNullValues(); assertEquals(0, nullValues.size()); assertEquals("W.m-2.Sr-1", dimension.getUnit()); for (CoverageDimensionInfo dimensionInfo : dimensions) { dimensionInfo.getNullValues().add(-999d); dimensionInfo.setDescription("GridSampleDimension[-100.0,1000.0]"); dimensionInfo.setUnit("m");
assertEquals(Double.POSITIVE_INFINITY, range.getMaximum(), DELTA); assertEquals("GridSampleDimension[-Infinity,Infinity]", dimension.getDescription()); List<Double> nullValues = dimension.getNullValues(); assertEquals(-9999.0, nullValues.get(0), DELTA); assertEquals(1000.0, range.getMaximum(), DELTA); assertEquals("GridSampleDimension[-100.0,1000.0]", dimension.getDescription()); nullValues = dimension.getNullValues(); assertEquals(-999.0, nullValues.get(0), DELTA);