private Term parseExpression() { final Term term; try { term = BandArithmetic.parseExpression(expression, products, defaultProductIndex); } catch (ParseException e) { throw new RuntimeException(MessageFormat.format( "Could not parse expression: ''{0}''. {1}", expression, e.getMessage()), e); } final ImageManager imageManager = ImageManager.getInstance(); for (final RasterDataSymbol symbol : BandArithmetic.getRefRasterDataSymbols(term)) { if (imageManager.getSourceImage(symbol.getRaster(), getLevel()) == this) { throw new RuntimeException(MessageFormat.format( "Invalid reference ''{0}''.", symbol.getName())); } } return term; }
private List<RenderedImage> createMosaicImages(List<List<RenderedImage>> sourceImageList, List<List<PlanarImage>> alphaImageList) { ImageLayout imageLayout = ImageManager.createSingleBandedImageLayout( ImageManager.getDataBufferType(ProductData.TYPE_FLOAT32), targetProduct.getSceneRasterWidth(), targetProduct.getSceneRasterHeight(), ImageManager.getPreferredTileSize(targetProduct), ResolutionLevel.MAXRES); Hints hints = new Hints(JAI.KEY_IMAGE_LAYOUT, imageLayout); final List<RenderedImage> mosaicImages = new ArrayList<RenderedImage>(sourceImageList.size()); for (int i = 0; i < sourceImageList.size(); i++) { final PlanarImage[] sourceAlphas = alphaImageList.get(i).toArray( new PlanarImage[alphaImageList.size()]); final List<RenderedImage> sourceImages = sourceImageList.get(i); final RenderedImage[] renderedImages = sourceImages.toArray(new RenderedImage[sourceImages.size()]); // we don't need ROIs, cause they are not considered by MosaicDescriptor when sourceAlphas are given mosaicImages.add(MosaicDescriptor.create(renderedImages, MosaicDescriptor.MOSAIC_TYPE_BLEND, sourceAlphas, null, null, null, hints)); } return mosaicImages; }
@Override public Object getCoordinateReferenceSystem() { final GeoCoding geoCoding = rasters[0].getGeoCoding(); if (geoCoding != null) { return ImageManager.getModelCrs(geoCoding); } return null; }
@Override public RenderedImage createImage(int level) { return ImageManager.getInstance().createColoredBandImage(rasterDataNodes, imageInfo, level); } }
@Override public RenderedImage createImage(int level) { return ImageManager.getInstance().createColoredMaskImage(product, expression, color, inverseMask, level); } }
private static MultiLevelImage getMaskImage(Product product, String maskExpr) { MultiLevelImage maskImage = null; if (StringUtils.isNotNullAndNotEmpty(maskExpr)) { maskImage = ImageManager.getInstance().getMaskImage(maskExpr, product); } return maskImage; }
private static Dimension computeDefaultSliceDimension(Product product) { final int sliceWidth = product.getSceneRasterWidth(); Dimension preferredTileSize = product.getPreferredTileSize(); int sliceHeight; if (preferredTileSize != null) { sliceHeight = preferredTileSize.height; } else { sliceHeight = ImageManager.getPreferredTileSize(product).height; } // TODO make this a parameter nf/mz 2013-11-05 String sliceHeightString = System.getProperty(PROPERTY_KEY_SLICE_HEIGHT, String.valueOf(sliceHeight)); Dimension dimension = new Dimension(sliceWidth, Integer.parseInt(sliceHeightString)); String logMsg = String.format("Using slice dimension [width=%d, height=%d] in binning", dimension.width, dimension.height); BeamLogManager.getSystemLogger().log(Level.INFO, logMsg); return dimension; }
private static DefaultMultiLevelImage createLatitudeSourceImage(final Orthorectifier orthorectifier, final Band band) { return new DefaultMultiLevelImage(new AbstractMultiLevelSource(ImageManager.getMultiLevelModel(band)) { @Override protected RenderedImage createImage(final int level) { return new LatitudeSourceImage(orthorectifier, band, ResolutionLevel.create(getModel(), level)); } }); }
private int getTargetDataType(Product sourceProduct) { final TiffIFD tiffIFD = new TiffIFD(sourceProduct); final int maxSourceDataType = tiffIFD.getBandDataType(); return ImageManager.getDataBufferType(maxSourceDataType); }
tileSize = new Dimension(tileSizeX, tileSizeY); } else { tileSize = ImageManager.getPreferredTileSize(targetProduct); Dimension sourceProductPreferredTileSize = sourceProduct.getPreferredTileSize(); if (sourceProductPreferredTileSize != null) { targetProduct.setEndTime(meanTime); srcModel = ImageManager.getMultiLevelModel(sourceProduct.getBandAt(0)); targetModel = ImageManager.createMultiLevelModel(targetProduct); reprojection = new Reproject(targetModel.getLevelCount()); reprojectRasterDataNodes(sourceProduct.getBands());
private static Shape convertToImageCoordinates(Shape shape, GeoCoding geoCoding) { AffineTransform m2iTransform; try { m2iTransform = ImageManager.getImageToModelTransform(geoCoding).createInverse(); } catch (NoninvertibleTransformException ignored) { m2iTransform = new AffineTransform(); } return m2iTransform.createTransformedShape(shape); }
private boolean isPixelValid(Band band, int pixelX, int pixelY, int level) { if (band.isValidMaskUsed()) { PlanarImage image = ImageManager.getInstance().getValidMaskImage(band, level); Raster data = getRasterTile(image, pixelX, pixelY); return data.getSample(pixelX, pixelY, 0) != 0; } else { return true; } }
private MultiLevelImage createProjectedImage(final GeoCoding sourceGeoCoding, final MultiLevelImage sourceImage, final Band targetBand, final Interpolation resampling) { final CoordinateReferenceSystem sourceModelCrs = ImageManager.getModelCrs(sourceGeoCoding); final CoordinateReferenceSystem targetModelCrs = ImageManager.getModelCrs(targetProduct.getGeoCoding()); final AffineTransform i2mSourceProduct = ImageManager.getImageToModelTransform(sourceGeoCoding); final AffineTransform i2mTargetProduct = ImageManager.getImageToModelTransform(targetProduct.getGeoCoding());
@Override public Color[] createColorPalette() { return ImageManager.createColorPalette(getImageInfo()); // return getImageInfo().getColorPaletteDef().createColorPalette(getSampleScaling()); }
private static MultiLevelImage replaceNoDataValueByNaN(final RasterDataNode rasterDataNode, final MultiLevelImage srcImage, final double noDataValue, final Number newValue) { final MultiLevelModel multiLevelModel = getMultiLevelModel(rasterDataNode); final int targetDataType = ImageManager.getDataBufferType(rasterDataNode.getGeophysicalDataType()); return new DefaultMultiLevelImage(new AbstractMultiLevelSource(multiLevelModel) { @Override public RenderedImage createImage(int sourceLevel) { return new ReplaceValueOpImage(srcImage, noDataValue, newValue, targetDataType); } }); }
public static ImageLayout createSingleBandedImageLayout(RasterDataNode rasterDataNode, int dataBufferType) { int width = rasterDataNode.getSceneRasterWidth(); int height = rasterDataNode.getSceneRasterHeight(); Dimension tileSize = getPreferredTileSize(rasterDataNode.getProduct()); return createSingleBandedImageLayout(dataBufferType, width, height, tileSize.width, tileSize.height); }
public static ImageLayout createSingleBandedImageLayout(RasterDataNode rasterDataNode) { return createSingleBandedImageLayout(rasterDataNode, getDataBufferType(rasterDataNode.getDataType())); }
@Override protected RenderedImage createImage(int level) { ImageManager imageManager = ImageManager.getInstance(); RenderingHints rh = new RenderingHints(JAI.KEY_BORDER_EXTENDER, BorderExtender.createInstance( BorderExtenderCopy.BORDER_COPY)); PlanarImage geophysicalImage = imageManager.getGeophysicalImage(getSource(), level); int dataBufferType = getDataType() == ProductData.TYPE_FLOAT64 ? DataBuffer.TYPE_DOUBLE : DataBuffer.TYPE_FLOAT; geophysicalImage = FormatDescriptor.create(geophysicalImage, dataBufferType, null); PlanarImage validMaskImage = imageManager.getValidMaskImage(getSource(), level); if (validMaskImage != null) { geophysicalImage = new FillConstantOpImage(geophysicalImage, validMaskImage, Float.NaN); } return createSourceLevelImage(geophysicalImage, level, rh); } };
public static ImageLayout createSingleBandedImageLayout(int dataBufferType, int sourceWidth, int sourceHeight, Dimension tileSize, ResolutionLevel level) { return createSingleBandedImageLayout(dataBufferType, null, sourceWidth, sourceHeight, tileSize, level); }
private BandImageMultiLevelSource(MultiLevelModel model, RasterDataNode[] rasterDataNodes) { super(model); this.rasterDataNodes = rasterDataNodes.clone(); imageInfo = ImageManager.getInstance().getImageInfo(rasterDataNodes); }