public static VirtualBandOpImage create(String expression, int dataType, Number fillValue, Product product, ResolutionLevel level) { return create(expression, dataType, fillValue, false, product, level); }
public static VirtualBandOpImage createMask(String expression, Product product, ResolutionLevel level) { return create(expression, ProductData.TYPE_UINT8, null, true, product, level); }
public static VirtualBandOpImage create(String expression, int dataType, Number fillValue, Product[] products, int defaultProductIndex, ResolutionLevel level) { return create(expression, dataType, fillValue, false, products, defaultProductIndex, level); }
PlanarImage createValidMaskImage(Product product) { if (expression != null && product.isCompatibleBandArithmeticExpression(expression)) { return VirtualBandOpImage.create(expression, ProductData.TYPE_UINT8, 0, product, ResolutionLevel.MAXRES); } else { return ConstantDescriptor.create((float) product.getSceneRasterWidth(), (float) product.getSceneRasterHeight(), new Byte[]{-1}, null); } }
private PlanarImage createExpressionImage(final String expression, Product product) { final MultiLevelImage sourceImage = product.getBandAt(0).getSourceImage(); final ResolutionLevel resolutionLevel = ResolutionLevel.create(sourceImage.getModel(), 0); final float fillValue = 0.0f; return VirtualBandOpImage.create(expression, ProductData.TYPE_FLOAT32, fillValue, product, resolutionLevel); }
@Override public RenderedImage createImage(int level) { return VirtualBandOpImage.create(expression, associatedNode.getDataType(), associatedNode.isNoDataValueUsed() ? associatedNode.getGeophysicalNoDataValue() : null, associatedNode.getProduct(), ResolutionLevel.create(getModel(), level)); } };
private static VirtualBandOpImage create(String expression, int dataType, Number fillValue, boolean mask, Product product, ResolutionLevel level) { Assert.notNull(product, "product"); Assert.notNull(level, "level"); final Product[] products; final int defaultProductIndex; if (product.getProductManager() != null) { products = product.getProductManager().getProducts(); defaultProductIndex = product.getProductManager().getProductIndex(product); } else { products = new Product[]{product}; defaultProductIndex = 0; } Assert.state(defaultProductIndex >= 0 && defaultProductIndex < products.length); Assert.state(products[defaultProductIndex] == product); return create(expression, dataType, fillValue, mask, products, defaultProductIndex, level); }
@Test public void testGetSamplesFloatWithNoDataAndBorderExtender() { Product product = new Product("n", "t", 1000, 1000); product.setPreferredTileSize(100, 100); Band band = product.addBand("x", ProductData.TYPE_FLOAT32); band.setScalingFactor(10.0); band.setGeophysicalNoDataValue(5025); band.setNoDataValueUsed(true); band.setSourceImage(VirtualBandOpImage.create("Y * 1000 + X", band.getDataType(), Float.NaN, product, ResolutionLevel.MAXRES)); MultiLevelImage sourceImage = band.getSourceImage(); Rectangle tileBounds = sourceImage.getTile(0,0).getBounds(); tileBounds.grow(10,0); BorderExtenderConstant nanExtender = new BorderExtenderConstant(new double[]{Float.NaN}); TileImpl tile = new TileImpl(band, sourceImage.getExtendedData(tileBounds, nanExtender)); try { float[] samplesFloat = tile.getSamplesFloat(); assertEquals(120*100, samplesFloat.length); assertEquals(Float.NaN, samplesFloat[2], 1.0e-6f); // NaN because of BorderExtender assertEquals(5005, samplesFloat[10], 1.0e-6f); assertEquals(Float.NaN, samplesFloat[12], 1.0e-6f); // NaN because of GeophysicalNoDataValue } catch (OperatorException e) { Assert.fail("OperatorException should not been thrown."); } }