/** * The BandMerge operation takes indexed images and expands them, however in the context of * coverage view band merging we don't normally want that, e.g., raster mask bands are * represented as indexed but we really want to keep them in their binary, single band form. To * do so, the IndexColorModel is replaced by a ComponentColorModel * * @param coverage * @return */ private GridCoverage2D prepareForBandMerge(GridCoverage2D coverage) { RenderedImage ri = coverage.getRenderedImage(); SampleModel sampleModel = ri.getSampleModel(); if (sampleModel.getNumBands() == 1 && ri.getColorModel() instanceof IndexColorModel) { ImageWorker worker = new ImageWorker(ri); worker.removeIndexColorModel(); RenderedImage formatted = worker.getRenderedImage(); return new GridCoverageFactory() .create( coverage.getName(), formatted, coverage.getGridGeometry(), coverage.getSampleDimensions(), new GridCoverage[] {coverage}, coverage.getProperties()); } return coverage; }
public GridCoverage2D getGridCoverage2D(BufferedImage image) { GridCoverage2D gridCoverage = new GridCoverageFactory() .create("isochrone", image, gg.getEnvelope2D()); return gridCoverage; }
public void writeGeotiff(String fileName, ResultSet results) { LOG.info("writing geotiff."); float[][] imagePixelData = new float[rows][cols]; for (int row = 0; row < rows; row++) { for (int col = 0; col < cols; col++) { int index = row * cols + col; float pixel = (float) (results.results[index]); if (unitySeconds > 0) pixel /= unitySeconds; imagePixelData[row][col] = pixel; } } GridCoverage2D coverage = new GridCoverageFactory().create("OTPAnalyst", imagePixelData, refEnvelope); try { GeoTiffWriteParams wp = new GeoTiffWriteParams(); wp.setCompressionMode(GeoTiffWriteParams.MODE_EXPLICIT); wp.setCompressionType("LZW"); ParameterValueGroup params = new GeoTiffFormat().getWriteParameters(); params.parameter(AbstractGridFormat.GEOTOOLS_WRITE_PARAMS.getName().toString()).setValue(wp); GeoTiffWriter writer = new GeoTiffWriter(new File(fileName)); writer.write(coverage, (GeneralParameterValue[]) params.values().toArray(new GeneralParameterValue[1])); } catch (Exception e) { LOG.error("exception while writing geotiff.", e); } LOG.info("done writing geotiff."); }
protected GridCoverage2D execute() { return CoverageFactoryFinder.getGridCoverageFactory(null) .create( "name", PlanarImage.wrapRenderedImage( RasterSymbolizerTest.getSynthetic(Double.NaN)), new GeneralEnvelope( new double[] {-90, -180}, new double[] {90, 180}), new GridSampleDimension[] { new GridSampleDimension( "sd", new Category[] { new Category("", Color.BLACK, 0) }, null) }, null, null); } };
final RenderedImage sourceImage = source.getRenderedImage(); if (type != null && type.equalsIgnoreCase("HISTOGRAM")) { worker = new ImageWorker(sourceImage) .setROI(roi) .setNoData(nodata) imageLayout.setColorModel(IHS.getColorModel()); imageLayout.setSampleModel(IHS.getSampleModel()); final RenderingHints rendHints = new RenderingHints(Collections.EMPTY_MAP); rendHints.add(hints); imageLayout.setSampleModel( cm.createCompatibleSampleModel( intensityWorker.getRenderedImage().getWidth(), factory.create( name, finalImage, factory.create(
MismatchedDimensionException, TransformException { RenderedImage rasterData = gridCoverage.getRenderedImage(); final GridEnvelope requestedRange = (GridEnvelope) requestedGridGeometry.getGridRange(); final int requestedW = requestedRange.getSpan(0); final int requestedH = requestedRange.getSpan(1); MathTransform mt = ProjectiveTransform.create(envToGrid); org.locationtech.jts.geom.Envelope transformedEnvelope = JTS.transform(new ReferencedEnvelope(requestedGridGeometry.getEnvelope()), mt); rasterData.getSampleModel().createCompatibleSampleModel(requestedW, requestedH)); layout.setColorModel(rasterData.getColorModel()); new GeneralEnvelope( new GridEnvelope2D(minX, minY, requestedW, requestedH), PixelInCell.CELL_CENTER, requestedGridGeometry.getGridToCRS(), requestedGridGeometry.getCoordinateReferenceSystem()); return GC_FACTORY.create("mosaic", mosaic, envelope);
final RenderedImage sourceImage = source.getRenderedImage(); new ImageWorker(sourceImage) .setRenderingHints(hints) .forceComponentColorModel() .rescaleToBytes() .getRenderedImage(); .getRenderedImage(); final int numbands = initialImage.getSampleModel().getNumBands(); imageLayout.setColorModel(IHS.getColorModel()); imageLayout.setSampleModel(IHS.getSampleModel()); final RenderingHints rendHints = new RenderingHints(Collections.EMPTY_MAP); rendHints.add(hints); final String name = "ce_coverage" + source.getName(); output = factory.create( name, finalImage, for(int i=0;i<numActualBands;i++) sd[i]=(GridSampleDimension) source.getSampleDimension(0); output = factory.create( "ce_coverage"+source.getName().toString(), finalImage,
@Override public GridCoverage2D read(GeneralParameterValue[] parameters) throws IOException { GridCoverage2D originalCoverage = super.read(parameters); RenderedImage source = new ImageWorker(originalCoverage.getRenderedImage()) .format(DataBuffer.TYPE_USHORT) .getRenderedImage(); TiledImage shortImage = new TiledImage( source.getMinX(), source.getMinY(), source.getWidth(), source.getHeight(), source.getTileGridXOffset(), source.getTileGridYOffset(), source.getSampleModel(), null); shortImage.set(source); // force color model to be null, this also occurs in real cases GridCoverage2D coverage = CoverageFactoryFinder.getGridCoverageFactory(null) .create( originalCoverage.getName(), shortImage, originalCoverage.getEnvelope2D()); return coverage; } };
RenderedImage sourceImage = sourceCoverage.getRenderedImage(); sourceImage.getColorModel() instanceof IndexColorModel; if (!(asPhotographicStrategy)) targetHints.add(ImageUtilities.DONT_REPLACE_INDEX_COLOR_MODEL); final double scaleX = image.getWidth() / (1.0 * sourceImage.getWidth()); final double scaleY = image.getHeight() / (1.0 * sourceImage.getHeight()); final double tX = image.getMinX() - sourceImage.getMinX() * scaleX; finalTransform = ConcatenatedTransform.create( tr, sourceCoverage.getGridGeometry().getGridToCRS2D()); } catch (Exception e) { throw new RuntimeException(e); final GridCoverage2D result = getFactory(parameters.hints) .create( ? null : sourceCoverage .getSampleDimensions()
LOGGER.fine("Drawing coverage "+gridCoverage.toString()); final CoordinateReferenceSystem sourceCoverageCRS = gridCoverage.getCoordinateReferenceSystem2D(); final GeneralEnvelope sourceCoverageEnvelope = (GeneralEnvelope) gridCoverage.getEnvelope(); destinationEnvelopeWGS84 = new GeneralEnvelope( destinationEnvelope); float opacity = getOpacity(symbolizer); if(opacity < 1) { ImageWorker ow = new ImageWorker(symbolizerImage); finalImage = ow.applyOpacity(opacity).getRenderedImage(); final int numBands=finalImage.getSampleModel().getNumBands(); final GridSampleDimension [] sd= new GridSampleDimension[numBands]; for(int i=0;i<numBands;i++) { sd[i]= new GridSampleDimension(TypeMap.getColorInterpretation(finalImage.getColorModel(), i).name()); GridCoverageFactory factory = CoverageFactoryFinder.getGridCoverageFactory(hints); finalGC = factory.create( "opacity_"+symbolizerGC.getName().toString(), finalImage, final MathTransform2D finalGCTransform=recoloredCoverageGridGeometry.getGridToCRS2D(PixelOrientation.UPPER_LEFT); if (!(finalGCTransform instanceof AffineTransform)) { throw new UnsupportedOperationException(
RenderedImage outputImage = output.getRenderedImage(); final SampleModel outputImageSampleModel = outputImage.getSampleModel(); int numBands = outputImageSampleModel.getNumBands(); final int dataType = outputImageSampleModel.getDataType(); GridSampleDimension sd[]; if (numBands > 4) { new ImageWorker(outputImage) .setRenderingHints(this.getHints()) .retainBands(new int[] {visibleBand}) new GridSampleDimension[] { (GridSampleDimension) output.getSampleDimension(visibleBand) }; } else { sd = output.getSampleDimensions(); if (outputImage.getColorModel() instanceof IndexColorModel) { break; .create( .create(
CoordinateReferenceSystem targetCRS = destinationEnvelope.getCoordinateReferenceSystem(); continue; final CoordinateReferenceSystem coverageCRS = coverage.getCoordinateReferenceSystem(); if (!CRS.equalsIgnoreMetadata(coverageCRS, destinationCRS)) { reprojectionNeeded = true; ColorModel cm = coverages.get(0).getRenderedImage().getColorModel(); if (cm instanceof IndexColorModel && background != null) { IndexColorModel icm = (IndexColorModel) cm; ImageWorker iw = new ImageWorker(coverage.getRenderedImage()); iw.forceComponentColorModel(); GridCoverage2D expandedCoverage = gridCoverageFactory.create( coverage.getName(), iw.getRenderedImage(), coverage.getGridGeometry(), null, ((long) r2.getWidth()) * r2.getHeight() - ((long) r1.getWidth()) * r1.getHeight(); return (int) Math.signum(areaDiff);
RenderedImage input = coverage.getRenderedImage(); Object roiObject = input.getProperty("ROI"); Object gcRoiObject = coverage.getProperty("GC_ROI"); if (!(roiObject instanceof ROI) && !(gcRoiObject instanceof ROI)) { Envelope env = new Envelope( input.getMinX(), input.getMinX() + input.getWidth(), input.getMinY(), input.getMinY() + input.getHeight()); PlanarImage pi = PlanarImage.wrapRenderedImage(input); pi.setProperty("ROI", roi); final Map sourceProperties = coverage.getProperties(); Map properties = sourceProperties == null ? new HashMap() : new HashMap(sourceProperties); properties.put("GC_ROI", roi); return gridCoverageFactory.create( coverage.getName(), pi,
final Hints hints = getHints(); final List<GridCoverage2D> sourceGridCoverages = new ArrayList<GridCoverage2D>(); ImageWorker w = new ImageWorker(); do { (GridCoverage2D) currentSourceNode.getOutput(); sourceGridCoverages.add(currentSourceCoverage); final GridGeometry2D gg = (GridGeometry2D) currentSourceCoverage.getGridGeometry(); if (gridGeometry == null) { op = currentSourceCoverage.getRenderedImage(); w.setImage(op); w.setROI(CoverageUtilities.getROIProperty(currentSourceCoverage)); NoDataContainer container = CoverageUtilities.getNoDataProperty(currentSourceCoverage); if (hasAlpha && !op.getColorModel().hasAlpha()) { intermediateOps.add(op); .create( "BandMerge", op,
private GridCoverage2D prepareCoverage(RenderedImage image) throws IOException { // creating bands final SampleModel sm = image.getSampleModel(); final ColorModel cm = image.getColorModel(); final int numBands = sm.getNumBands(); final GridSampleDimension[] bands = new GridSampleDimension[numBands]; // setting bands names. for (int i = 0; i < numBands; i++) { final ColorInterpretation colorInterpretation = TypeMap.getColorInterpretation(cm, i); if (colorInterpretation == null) throw new IOException("Unrecognized sample dimension type"); bands[i] = new GridSampleDimension(colorInterpretation.name()); } return coverageFactory.create( rasterManager.getCoverageIdentifier(), image, new GeneralEnvelope(bbox), bands, null, null); }
final RenderedImage finalImage = input.getRenderedImage(); final GridGeometry2D preSymbolizerGridGeometry = (input.getGridGeometry()); preSymbolizerGridGeometry.getGridToCRS2D(PixelOrientation.UPPER_LEFT); if (!(finalGCTransform instanceof AffineTransform)) { throw new UnsupportedOperationException( localHints.put(JAI.KEY_REPLACE_INDEX_COLOR_MODEL, false); ImageWorker iw = new ImageWorker(finalImage); iw.setRenderingHints(localHints); iw.setROI(roi); iw.setNoData(noData); iw.affine(finalRasterTransformation, interpolation, bkgValues); Map properties = input.getProperties(); if (properties == null) { properties = new HashMap<>(); return this.gridCoverageFactory.create( input.getName(), im, new GridGeometry2D( new GridEnvelope2D(PlanarImage.wrapRenderedImage(im).getBounds()), input.getEnvelope()),
private GridCoverage2D createCoverageFromElement( MosaicElement mosaicElement, GridCoverageFactory factory, ReferencedEnvelope submosaicBBOX) { RenderedImage image = mosaicElement.getSource(); Object roiProperty = image.getProperty("ROI"); if (!(roiProperty instanceof ROI)) { // need the ROI before warp, as the area of validity needs to be warped along, so // if missing add one now ROIGeometry roi = new ROIGeometry( JTS.toGeometry( new Envelope( image.getMinX(), image.getMinX() + image.getWidth(), image.getMinY(), image.getMinY() + image.getHeight()))); ImageWorker iw = new ImageWorker(image); iw.setROI(roi); image = iw.getRenderedImage(); roiProperty = roi; } // move the property at the coverage level too Map<String, Object> properties = new HashMap<>(); CoverageUtilities.setROIProperty(properties, (ROI) roiProperty); return factory.create("submosaic", image, submosaicBBOX, null, null, properties); }
new GeneralEnvelope(new double[] {-180, -90}, new double[] {180, 90}); envelope.setCoordinateReferenceSystem(DefaultGeographicCRS.WGS84); java.net.URL surl = TestData.url(this, "raster.sld"); SLDParser stylereader = new SLDParser(sf, surl); CoverageFactoryFinder.getGridCoverageFactory(null) .create( "name", JAI.create("ImageRead", TestData.file(this, "test_ushort.tif")), envelope, new GridSampleDimension[] { new GridSampleDimension("test_dimension") }, null, rsh.visit(rs); RenderedImage outputImage = ((GridCoverage2D) rsh.getOutput()).getRenderedImage(); int dataType = outputImage.getSampleModel().getDataType(); assertEquals(DataBuffer.TYPE_BYTE, dataType);
RenderedImage src = op.src.getRenderedImage(); Object property = op.getProperty("ROI"); if (property == null srcBounds = new Rectangle( src.getMinX() + interp.getLeftPadding(), src.getMinY() + interp.getTopPadding(), src.getWidth() - interp.getWidth() + 1, src.getHeight() - interp.getHeight() + 1); } else { new GridCoverageFactory(GeoTools.getDefaultHints()) .create(name, constantImage, op.src.getEnvelope()); PlanarImage roiImage = null;
final int numBands = sm.getNumBands(); final GridSampleDimension[] bands = new GridSampleDimension[numBands]; bandName = colorInterpretation.name(); bands[i] = new GridSampleDimension(bandName); return coverageFactory.create( coverageName, image, coverageCRS, raster2Model, bands, null, null); return coverageFactory.create( coverageName, image, new GeneralEnvelope(coverageEnvelope), bands, null, null);