public void openDatasetAndView(String url) throws IOException { Array temp_data; try (GridDataset dataset = GridDataset.open(url)) { for (GridDatatype grid : dataset.getGrids()) { temp_data = grid.readDataSlice(0, 0, -1, -1); assert grid.getMinMaxSkipMissingData(temp_data).min == 0.0; // min assert grid.getMinMaxSkipMissingData(temp_data).max == 42.0; // max } } }
/** * Replace missing values with dataMinMax.min - 1.0; return a floating point data array. * * @param grid GridDatatype * @param data input data array * @return floating point data array with missing values replaced. */ private ArrayFloat replaceMissingValues(GridDatatype grid, Array data) { MAMath.MinMax dataMinMax = grid.getMinMaxSkipMissingData(data); float minValue = (float) (dataMinMax.min - 1.0); ArrayFloat floatArray = (ArrayFloat) Array.factory(float.class, data.getShape()); IndexIterator dataIter = data.getIndexIterator(); IndexIterator floatIter = floatArray.getIndexIterator(); while (dataIter.hasNext()) { float v = dataIter.getFloatNext(); if (grid.isMissingData((double) v)) { v = minValue; } floatIter.setFloatNext(v); } return floatArray; }
/** * Replace missing values with dataMinMax.min - 1.0; return a floating point data array. * * @param grid GridDatatype * @param data input data array * @return floating point data array with missing values replaced. */ private ArrayFloat replaceMissingValues(GridDatatype grid, Array data) { MAMath.MinMax dataMinMax = grid.getMinMaxSkipMissingData(data); float minValue = (float) (dataMinMax.min - 1.0); ArrayFloat floatArray = (ArrayFloat) Array.factory(float.class, data.getShape()); IndexIterator dataIter = data.getIndexIterator(); IndexIterator floatIter = floatArray.getIndexIterator(); while (dataIter.hasNext()) { float v = dataIter.getFloatNext(); if (grid.isMissingData((double) v)) { v = minValue; } floatIter.setFloatNext(v); } return floatArray; }
/** * Replace missing values with 0; scale other values between 1 and 255, return a byte data array. * * @param grid GridDatatype * @param data input data array * @return byte data array with missing values replaced and data scaled from 1- 255. */ private ArrayByte replaceMissingValuesAndScale(GridDatatype grid, Array data) { MAMath.MinMax dataMinMax = grid.getMinMaxSkipMissingData(data); double scale = 254.0 / (dataMinMax.max - dataMinMax.min); ArrayByte byteArray = (ArrayByte) Array.factory(byte.class, data.getShape()); IndexIterator dataIter = data.getIndexIterator(); IndexIterator resultIter = byteArray.getIndexIterator(); byte bv; while (dataIter.hasNext()) { double v = dataIter.getDoubleNext(); if (grid.isMissingData(v)) { bv = 0; } else { int iv = (int) ((v - dataMinMax.min) * scale + 1); bv = (byte) (iv & 0xff); } resultIter.setByteNext(bv); } return byteArray; }
/** * Replace missing values with 0; scale other values between 1 and 255, return a byte data array. * * @param grid GridDatatype * @param data input data array * @return byte data array with missing values replaced and data scaled from 1- 255. */ private ArrayByte replaceMissingValuesAndScale(GridDatatype grid, Array data) { MAMath.MinMax dataMinMax = grid.getMinMaxSkipMissingData(data); double scale = 254.0 / (dataMinMax.max - dataMinMax.min); ArrayByte byteArray = (ArrayByte) Array.factory(byte.class, data.getShape()); IndexIterator dataIter = data.getIndexIterator(); IndexIterator resultIter = byteArray.getIndexIterator(); byte bv; while (dataIter.hasNext()) { double v = dataIter.getDoubleNext(); if (grid.isMissingData(v)) { bv = 0; } else { int iv = (int) ((v - dataMinMax.min) * scale + 1); bv = (byte) (iv & 0xff); } resultIter.setByteNext(bv); } return byteArray; }
MAMath.MinMax dataMinMax = grid.getMinMaxSkipMissingData(data); if (greyScale) { ArrayByte result = replaceMissingValuesAndScale(grid, data, dataMinMax);
geotiff.addTag(new IFDEntry(Tag.SampleFormat, FieldType.SHORT).setValue(3)); // Sample Format geotiff.addTag(new IFDEntry(Tag.SamplesPerPixel, FieldType.SHORT).setValue(1)); MAMath.MinMax dataMinMax = grid.getMinMaxSkipMissingData(data); float min = (float) (dataMinMax.min); float max = (float) (dataMinMax.max);
geotiff.addTag(new IFDEntry(Tag.SampleFormat, FieldType.SHORT).setValue(3)); // Sample Format geotiff.addTag(new IFDEntry(Tag.SamplesPerPixel, FieldType.SHORT).setValue(1)); MAMath.MinMax dataMinMax = grid.getMinMaxSkipMissingData(data); float min = (float) (dataMinMax.min); float max = (float) (dataMinMax.max);