private static void setScaling(final Element element, final Band band) { final String scalingFactorString = element.getChildTextTrim(DimapProductConstants.TAG_SCALING_FACTOR); if (scalingFactorString != null) { band.setScalingFactor(Double.parseDouble(scalingFactorString)); } final String scalingOffsetString = element.getChildTextTrim(DimapProductConstants.TAG_SCALING_OFFSET); if (scalingOffsetString != null) { band.setScalingOffset(Double.parseDouble(scalingOffsetString)); } final String log10ScaledString = element.getChildTextTrim(DimapProductConstants.TAG_SCALING_LOG_10); if (log10ScaledString != null) { band.setLog10Scaled(Boolean.parseBoolean(log10ScaledString)); } }
private Band createTargetBand(Product product, H5ScalarDS scalarDS, String bandName, int dataType) throws Exception { final List<Attribute> metadata = scalarDS.getMetadata(); final float scaleFactorAttr = ProbaVUtils.getFloatAttributeValue(metadata, "SCALE"); final float scaleFactor = Float.isNaN(scaleFactorAttr) ? 1.0f : scaleFactorAttr; final float scaleOffsetAttr = ProbaVUtils.getFloatAttributeValue(metadata, "OFFSET"); final float scaleOffset = Float.isNaN(scaleOffsetAttr) ? 0.0f : scaleOffsetAttr; final Band band = product.addBand(bandName, dataType); band.setScalingFactor(1.0 / scaleFactor); band.setScalingOffset(-1.0 * scaleOffset / scaleFactor); return band; }
private Band createTargetBand(Product product, H5ScalarDS scalarDS, String bandName, int dataType) throws Exception { final List<Attribute> metadata = scalarDS.getMetadata(); final float scaleFactorAttr = ProbaVUtils.getFloatAttributeValue(metadata, "SCALE"); final float scaleFactor = Float.isNaN(scaleFactorAttr) ? 1.0f : scaleFactorAttr; final float scaleOffsetAttr = ProbaVUtils.getFloatAttributeValue(metadata, "OFFSET"); final float scaleOffset = Float.isNaN(scaleOffsetAttr) ? 0.0f : scaleOffsetAttr; final Band band = product.addBand(bandName, dataType); band.setScalingFactor(scaleFactor); band.setScalingOffset(scaleOffset); return band; }
private Band addBand(Product product, int bandDataType, BandInfo bandInfo, NetcdfFile netcdfFile, Variable variable) { Band band = product.addBand(bandInfo.name, bandDataType); if (! Boolean.getBoolean("beam.spotvgt.donotapplysolarilluminationfactor") && product.getName().matches("V.KRNP.*") && ("B0".equals(bandInfo.name) || "B2".equals(bandInfo.name) || "B3".equals(bandInfo.name) || "MIR".equals(bandInfo.name))) { int doy = product.getStartTime().getAsCalendar().get(Calendar.DAY_OF_YEAR); band.setScalingFactor(bandInfo.coefA * SpotVgtConstants.SOLAR_ILLUMINATION_FACTOR[doy-1]); } else { band.setScalingFactor(bandInfo.coefA); } band.setScalingOffset(bandInfo.offsetB); band.setUnit(bandInfo.unit); band.setDescription(bandInfo.description); fileVars.put(band, new FileVar(netcdfFile, variable)); return band; }
private void addBand(String varName) { VariableMetadata variableMetadata = getVariableMetadata(varName); if (variableMetadata != null) { Band band = new Band(variableMetadata.name, ProductData.TYPE_INT16, _sceneRasterWidth, _sceneRasterHeight); band.setDescription(variableMetadata.description); band.setScalingOffset(variableMetadata.scalingOffset); band.setScalingFactor(variableMetadata.scalingFactor); band.setLog10Scaled(variableMetadata.log10Scaled); band.setNoDataValue(variableMetadata.fillValue); band.setNoDataValueUsed(variableMetadata.fillValue != Double.NaN); _product.addBand(band); bandMap.put(band, variableMetadata); } }
private Band createBand(Product product, int type, double scalingFactor, double scalingOffset, boolean log10scaled) { final Band node = new Band("b", type, 10, 10); node.setScalingFactor(scalingFactor); node.setScalingOffset(scalingOffset); node.setLog10Scaled(log10scaled); product.addBand(node); return node; }
private Band addBand(Product product, String varName, int productType) { Band band = new Band(varName, productType, product.getSceneRasterWidth(), product.getSceneRasterHeight()); band.setScalingOffset(0.0); band.setScalingFactor(1.0); band.setLog10Scaled(false); if (productType == ProductData.TYPE_FLOAT32) { band.setNoDataValue(Double.NaN); } else { band.setNoDataValue(-999); } product.addBand(band); return band; } }
private Band addBand(Product product, String varName, int productType) { Band band = new Band(varName, productType, product.getSceneRasterWidth(), product.getSceneRasterHeight()); band.setScalingOffset(0.0); band.setScalingFactor(1.0); band.setLog10Scaled(false); if (productType == ProductData.TYPE_FLOAT32) { band.setNoDataValue(Double.NaN); } else { band.setNoDataValue(-999); } band.setNoDataValueUsed(true); product.addBand(band); return band; }
band.setScalingOffset(bandDescriptor.getScalingOffset()); product.addBand(band);
private Band createBand(double factor, double offset, boolean log10Scaled) { Product p = new Product("n", "t", 2, 2); Band band = p.addBand("b", ProductData.TYPE_INT8); band.setScalingFactor(factor); band.setScalingOffset(offset); band.setLog10Scaled(log10Scaled); band.setSourceImage(createSourceImage()); return band; }
public void testSetAndGetPixels_UShort_Int() throws Exception { final Band band = new Band("radiance_4", ProductData.TYPE_UINT16, 3, 2); band.ensureRasterData(); short[] testShortsRaw, trueShortsRaw; final ProductData data = band.getData(); int[] testInts, trueInts; testInts = new int[]{1, 2, 3, 4, 5, 6}; band.setPixels(0, 0, 3, 2, testInts); trueInts = band.getPixels(0, 0, 3, 2, (int[]) null, ProgressMonitor.NULL); assertTrue(Arrays.equals(testInts, trueInts)); testShortsRaw = new short[]{1, 2, 3, 4, 5, 6}; trueShortsRaw = (short[]) data.getElems(); assertTrue(Arrays.equals(testShortsRaw, trueShortsRaw)); band.setScalingFactor(0.5); band.setScalingOffset(-13); testInts = new int[]{3, -5, 7, -9, 11, -13}; band.setPixels(0, 0, 3, 2, testInts); trueInts = band.getPixels(0, 0, 3, 2, (int[]) null, ProgressMonitor.NULL); assertTrue(Arrays.equals(testInts, trueInts)); testShortsRaw = new short[]{32, 16, 40, 8, 48, 0}; trueShortsRaw = (short[]) data.getElems(); assertTrue(Arrays.equals(testShortsRaw, trueShortsRaw)); }
public void testSetAndGetPixels_UShort_Double() throws Exception { final Band band = new Band("radiance_4", ProductData.TYPE_UINT16, 3, 2); band.ensureRasterData(); short[] testShortsRaw, trueShortsRaw; final ProductData data = band.getData(); double[] testDoubles, trueDoubles; band.setScalingFactor(0.01); band.setScalingOffset(-10); testDoubles = new double[]{1.1, -2.2, 3.3, -4.4, 5.5, -6.6}; band.setPixels(0, 0, 3, 2, testDoubles); trueDoubles = band.getPixels(0, 0, 3, 2, (double[]) null, ProgressMonitor.NULL); for (int i = 0; i < testDoubles.length; i++) { assertEquals(testDoubles[i], trueDoubles[i], 1e-6f); } testShortsRaw = new short[]{1110, 780, 1330, 560, 1550, 340}; trueShortsRaw = (short[]) data.getElems(); assertTrue(Arrays.equals(testShortsRaw, trueShortsRaw)); }
private void addBand(final Product product) { final String bandName = "radiance_1"; // constant final Band band = new Band(bandName, ProductData.TYPE_UINT8, product.getSceneRasterWidth(), product.getSceneRasterHeight()); band.setSpectralBandIndex(0); // constant band.setSpectralWavelength(645); // constant band.setSpectralBandwidth(250); // constant band.setUnit("mw / (m^2*sr*nm)"); // constant band.setScalingFactor(leaderFile.getAncillary2Record().getAbsoluteCalibrationGain()); band.setScalingOffset(leaderFile.getAncillary2Record().getAbsoluteCalibrationOffset()); band.setNoDataValue(0.00); band.setNoDataValueUsed(true); product.addBand(band); }
public void testSetAndGetPixels_UShort_Float() throws Exception { final Band band = new Band("radiance_4", ProductData.TYPE_UINT16, 3, 2); band.ensureRasterData(); short[] testShortsRaw, trueShortsRaw; final ProductData data = band.getData(); float[] testFloats, trueFloats; band.setScalingFactor(0.01); band.setScalingOffset(-10); testFloats = new float[]{1.1f, -2.2f, 3.3f, -4.4f, 5.5f, -6.6f}; band.setPixels(0, 0, 3, 2, testFloats); trueFloats = band.getPixels(0, 0, 3, 2, (float[]) null, ProgressMonitor.NULL); for (int i = 0; i < testFloats.length; i++) { assertEquals(testFloats[i], trueFloats[i], 1e-6f); } testShortsRaw = new short[]{1110, 780, 1330, 560, 1550, 340}; trueShortsRaw = (short[]) data.getElems(); assertTrue(Arrays.equals(testShortsRaw, trueShortsRaw)); }
public void testComputeBandWithScaling() throws IOException, ParseException { _targetBand.setScalingFactor(0.05); _targetBand.setScalingOffset(-7); _product1.getBand("b1").setDataElems(new float[]{ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }); _product1.setModified(false); _targetBand.computeBand("b1", null, new Product[]{_product1}, 0, false, false, 0, ProgressMonitor.NULL); for (int y = 0; y < _height; y++) { for (int x = 0; x < _width; x++) { final float expected = 2 + y * _width + x; assertEquals("at index(x,y) = " + x + "," + y, expected, _targetBand.getPixelFloat(x, y), 1e-5); } } }
private Band createBand(final Avnir2ImageFile avnir2ImageFile) throws IOException, IllegalCeosFormatException { final Band band = new Band(avnir2ImageFile.getBandName(), ProductData.TYPE_UINT8, sceneWidth, sceneHeight); final int bandIndex = avnir2ImageFile.getBandIndex(); band.setSpectralBandIndex(bandIndex - 1); band.setSpectralWavelength(avnir2ImageFile.getSpectralWavelength()); band.setSpectralBandwidth(avnir2ImageFile.getSpectralBandwidth()); band.setUnit(avnir2ImageFile.getGeophysicalUnit()); final double scalingFactor = leaderFile.getAbsoluteCalibrationGain(bandIndex); final double scalingOffset = leaderFile.getAbsoluteCalibrationOffset(bandIndex); band.setScalingFactor(scalingFactor); band.setScalingOffset(scalingOffset); band.setNoDataValueUsed(false); band.setDescription("Radiance band " + avnir2ImageFile.getBandIndex()); return band; }
@Override public void initialize() throws OperatorException { l3GeoCoding = l3Product.getGeoCoding(); l1GeoCoding = l1Product.getGeoCoding(); targetProduct = createCompatibleProduct(l1Product, "l3tol1", "L3"); Band[] l3Bands = l3Product.getBands(); for (Band sourceBand : l3Bands) { Band targetBand = targetProduct.addBand(sourceBand.getName(), sourceBand.getDataType()); ProductUtils.copySpectralBandProperties(sourceBand, targetBand); targetBand.setDescription(sourceBand.getDescription()); targetBand.setUnit(sourceBand.getUnit()); targetBand.setScalingFactor(sourceBand.getScalingFactor()); targetBand.setScalingOffset(sourceBand.getScalingOffset()); targetBand.setLog10Scaled(sourceBand.isLog10Scaled()); targetBand.setNoDataValueUsed(sourceBand.isNoDataValueUsed()); targetBand.setNoDataValue(sourceBand.getNoDataValue()); if (sourceBand.getFlagCoding() != null) { FlagCoding srcFlagCoding = sourceBand.getFlagCoding(); ProductUtils.copyFlagCoding(srcFlagCoding, targetProduct); targetBand.setSampleCoding(targetProduct.getFlagCodingGroup().get(srcFlagCoding.getName())); } } }
@Override public void initialize() throws OperatorException { rrGeoCoding = rrProduct.getGeoCoding(); frsGeoCoding = frsProduct.getGeoCoding(); final int width = frsProduct.getSceneRasterWidth(); final int height = frsProduct.getSceneRasterHeight(); checkThatRRContainsFRSData(width, height); targetProduct = new Product("L1", "L1", width, height); Band[] srcBands = rrProduct.getBands(); for (Band sourceBand : srcBands) { Band targetBand = targetProduct.addBand(sourceBand.getName(), sourceBand.getDataType()); ProductUtils.copySpectralBandProperties(sourceBand, targetBand); targetBand.setDescription(sourceBand.getDescription()); targetBand.setUnit(sourceBand.getUnit()); targetBand.setScalingFactor(sourceBand.getScalingFactor()); targetBand.setScalingOffset(sourceBand.getScalingOffset()); targetBand.setLog10Scaled(sourceBand.isLog10Scaled()); targetBand.setNoDataValueUsed(sourceBand.isNoDataValueUsed()); targetBand.setNoDataValue(sourceBand.getNoDataValue()); if (sourceBand.getFlagCoding() != null) { FlagCoding srcFlagCoding = sourceBand.getFlagCoding(); ProductUtils.copyFlagCoding(srcFlagCoding, targetProduct); targetBand.setSampleCoding(targetProduct.getFlagCodingGroup().get(srcFlagCoding.getName())); } } }
private Product createTestProduct() { Product p = new Product("p", "t", SW, SH, TPRPI.createReaderInstance()); final float[] tiePoints = new float[GW * GH]; for (int j = 0; j < GH; j++) { for (int i = 0; i < GW; i++) { tiePoints[j * GW + i] = getTiePointValue(i, j); } } TiePointGrid tpg = new TiePointGrid(TIE_POINT_GRID_NAME, GW, GH, 0.5f, 0.5f, (SW - 1) / (float) (GW - 1), (SH - 1) / (float) (GH - 1), tiePoints); p.addTiePointGrid(tpg); Band floatBand = new Band(FLOAT_BAND_NAME, ProductData.TYPE_FLOAT32, SW, SH); p.addBand(floatBand); Band scaledIntBand = new Band(SCALED_USHORT_BAND_NAME, ProductData.TYPE_UINT16, SW, SH); scaledIntBand.setScalingFactor(SFAC); scaledIntBand.setScalingOffset(SOFF); p.addBand(scaledIntBand); Band syntFloatBand = new Band(BUFFERED_FLOAT_BAND_NAME, ProductData.TYPE_FLOAT32, SW, SH); syntFloatBand.ensureRasterData(); p.addBand(syntFloatBand); VirtualBand virtBand = new VirtualBand(VIRT_BAND_NAME, ProductData.TYPE_FLOAT32, SW, SH, VIRT_BAND_EXPR); p.addBand(virtBand); return p; }
@Test public void testWriteReadBeamMetadata() throws IOException { final Band expectedBand = outProduct.getBand("int16"); expectedBand.setDescription("Danger"); expectedBand.setUnit("Voltage"); expectedBand.setScalingFactor(0.7); expectedBand.setScalingOffset(100); expectedBand.setLog10Scaled(true); expectedBand.setNoDataValue(12.5); expectedBand.setNoDataValueUsed(true); final Product inProduct = writeReadProduct(); assertEquals(outProduct.getName(), inProduct.getName()); assertEquals(outProduct.getProductType(), inProduct.getProductType()); assertEquals(outProduct.getNumBands(), inProduct.getNumBands()); final Band actualBand = inProduct.getBandAt(0); assertEquals(expectedBand.getName(), actualBand.getName()); assertEquals(expectedBand.getDescription(), actualBand.getDescription()); assertEquals(expectedBand.getUnit(), actualBand.getUnit()); assertEquals(expectedBand.getDataType(), actualBand.getDataType()); assertEquals(expectedBand.getScalingFactor(), actualBand.getScalingFactor(), 1.0e-6); assertEquals(expectedBand.getScalingOffset(), actualBand.getScalingOffset(), 1.0e-6); assertEquals(expectedBand.isLog10Scaled(), actualBand.isLog10Scaled()); assertEquals(expectedBand.getNoDataValue(), actualBand.getNoDataValue(), 1.0e-6); assertEquals(expectedBand.isNoDataValueUsed(), actualBand.isNoDataValueUsed()); }