public static Coverage bandSelect(final GridCoverage coverage, final int[] bands) { Coverage bandSelectedCoverage; if ((bands != null) && (bands.length > 0)) { /* Operations.DEFAULT.selectSampleDimension(coverage, bands) */ final ParameterValueGroup param = (ParameterValueGroup) PROCESSOR.getOperation("SelectSampleDimension").getParameters(); param.parameter("Source").setValue(coverage); param.parameter("SampleDimensions").setValue(bands); // param.parameter("VisibleSampleDimension").setValue(bands); bandSelectedCoverage = ((SelectSampleDimension) PROCESSOR.getOperation("SelectSampleDimension")) .doOperation(param, hints); } else { bandSelectedCoverage = coverage; } return bandSelectedCoverage; }
if (names != null) { for (int i = 0; i < names.length; i++) { final Operation operation = getOperation(names[i]); if (operation instanceof AbstractOperation) { out.write(lineSeparator);
private GridCoverage2D retainBands( List<Integer> bandIndices, GridCoverage2D coverage, Hints hints) { final ParameterValueGroup param = PROCESSOR.getOperation("SelectSampleDimension").getParameters(); param.parameter("Source").setValue(coverage); final int[] sampleDimensionArray = ArrayUtils.toPrimitive(bandIndices.toArray(new Integer[bandIndices.size()])); param.parameter("SampleDimensions").setValue(sampleDimensionArray); coverage = (GridCoverage2D) PROCESSOR.doOperation(param, hints); return coverage; }
(ParameterValueGroup) PROCESSOR.getOperation("Interpolate").getParameters(); param.parameter("Source").setValue(coverage); param.parameter("Type").setValue(interpolation); ((Interpolate) PROCESSOR.getOperation("Interpolate")).doOperation(param, hints);
/** * <strong>Reprojecting</strong><br> * The new grid geometry can have a different coordinate reference system than the underlying * grid geometry. For example, a grid coverage can be reprojected from a geodetic coordinate * reference system to Universal Transverse Mercator CRS. * * @param coverage GridCoverage2D * @param sourceCRS CoordinateReferenceSystem * @param targetCRS CoordinateReferenceSystem * @return GridCoverage2D * @throws WcsException */ public static GridCoverage2D resample( final GridCoverage2D coverage, final CoordinateReferenceSystem sourceCRS, final CoordinateReferenceSystem targetCRS, final GridGeometry2D gridGeometry, final Interpolation interpolation) throws WcsException { final ParameterValueGroup param = (ParameterValueGroup) PROCESSOR.getOperation("Resample").getParameters(); param.parameter("Source").setValue(coverage); param.parameter("CoordinateReferenceSystem").setValue(targetCRS); param.parameter("GridGeometry").setValue(gridGeometry); param.parameter("InterpolationType").setValue(interpolation); return (GridCoverage2D) ((Resample) PROCESSOR.getOperation("Resample")).doOperation(param, hints); }
final ParameterValueGroup param = PROCESSOR.getOperation("Mosaic").getParameters(); param.parameter("Sources").setValue(sources); param.parameter("geometry").setValue(target);
final ParameterValueGroup param = PROCESSOR.getOperation(operationName).getParameters(); if (!handler.isHomogeneousCoverages()) { param.parameter("transform_choice").setValue("index");
/** * Crops the coverage to the specified bounds * * @param coverage * @param bounds */ public static GridCoverage2D crop(final GridCoverage2D coverage, final Envelope bounds) { // checks final ReferencedEnvelope cropBounds = new ReferencedEnvelope(bounds); final ReferencedEnvelope coverageBounds = new ReferencedEnvelope(coverage.getEnvelope()); if (cropBounds.contains((org.locationtech.jts.geom.Envelope) coverageBounds)) { return coverage; } Polygon polygon = JTS.toGeometry(cropBounds); Geometry roi = polygon.getFactory().createMultiPolygon(new Polygon[] {polygon}); // perform the crops final ParameterValueGroup param = PROCESSOR.getOperation("CoverageCrop").getParameters(); param.parameter("Source").setValue(coverage); param.parameter("Envelope").setValue(bounds); param.parameter("ROI").setValue(roi); return (GridCoverage2D) PROCESSOR.doOperation(param); }
/** * Applies a process operation with default parameters. This is a helper method for * implementation of various convenience methods in this class. * * @param operationName Name of the operation to be applied to the coverage. * @param source The source coverage. * @return The result as a coverage. * @throws OperationNotFoundException if there is no operation named {@code operationName}. * @throws CoverageProcessingException if the operation can't be applied. */ protected final Coverage doOperation(final String operationName, final Coverage source) throws OperationNotFoundException, CoverageProcessingException { final Operation operation = processor.getOperation(operationName); final ParameterValueGroup parameters = operation.getParameters(); addSources(operationName, parameters, source); return processor.doOperation(parameters); }
/** * Applies a process binary operation on two coverages with default parameters. This is a helper * method for implementation of various convenience methods in this class. * * @param operationName Name of the operation to be applied to the coverage. * @param source0 The first source coverage. * @param source1 The second source coverage. * @return The result as a coverage. * @throws OperationNotFoundException if there is no operation named {@code operationName}. * @throws CoverageProcessingException if the operation can't be applied. */ protected final Coverage doOperation( final String operationName, final Coverage source0, final Coverage source1) throws OperationNotFoundException, CoverageProcessingException { final Operation operation = processor.getOperation(operationName); final ParameterValueGroup parameters = operation.getParameters(); addSources(operationName, parameters, source0, source1); return processor.doOperation(parameters); }
/** * This method is called when the user has registered another {@link OperationDescriptor} and * must remove the old operation instance from the processors. * * @param operationName Name of the operation to remove */ public static synchronized void removeOperationFromProcessors(String operationName) { List<String> operations = JAIExt.getJAINames(operationName); Set<Hints> keySet = processorsPool.keySet(); for (Hints key : keySet) { for (String opName : operations) { CoverageProcessor processor = processorsPool.get(key); try { Operation op = processor.getOperation(opName); if (op != null) { processor.removeOperation(op); } } catch (OperationNotFoundException e) { LOGGER.warning("Operation: " + opName + " not found in CoverageProcessor"); } } } }
throws IOException { ParameterValueGroup param = PROCESSOR.getOperation("Extrema").getParameters(); param.parameter("Source").setValue(coverage); param = PROCESSOR.getOperation("DivideByConst").getParameters(); param.parameter("source").setValue(coverage); param.parameter("constants").setValue(max);
@DescribeResult(name = "result", description = "Summed rasters") public GridCoverage2D execute( @DescribeParameter(name = "coverageA", description = "First input raster") GridCoverage2D coverageA, @DescribeParameter(name = "coverageB", description = "Second input raster") GridCoverage2D coverageB, ProgressListener progressListener) throws ProcessException { // // // // Initialization: compatibility checks // // // BaseCoverageAlgebraProcess.checkCompatibleCoverages(coverageA, coverageB); // // // // Doing the Operation // // // final ParameterValueGroup param = PROCESSOR.getOperation("Add").getParameters(); List<GridCoverage2D> sources = new ArrayList<GridCoverage2D>(); sources.add(coverageA); sources.add(coverageB); param.parameter("Sources").setValue(sources); return (GridCoverage2D) PROCESSOR.doOperation(param); } }
@DescribeResult(name = "result", description = "Computed raster") public GridCoverage2D execute( @DescribeParameter(name = "coverageA", description = "First input raster") GridCoverage2D coverageA, @DescribeParameter(name = "coverageB", description = "Second input raster") GridCoverage2D coverageB, ProgressListener progressListener) throws ProcessException { // // // // Initialization: compatibility checks // // // BaseCoverageAlgebraProcess.checkCompatibleCoverages(coverageA, coverageB); // // // // Doing the Operation // // // final ParameterValueGroup param = PROCESSOR.getOperation("Multiply").getParameters(); List<GridCoverage2D> sources = new ArrayList<GridCoverage2D>(); sources.add(coverageA); sources.add(coverageB); param.parameter("Sources").setValue(sources); return (GridCoverage2D) PROCESSOR.doOperation(param); } }
/** * Applies a process operation with one parameter. This is a helper method for implementation of * various convenience methods in this class. * * @param operationName Name of the operation to be applied to the coverage. * @param source The source coverage. * @param argumentName1 The name of the first parameter to setParameterValue. * @param argumentValue1 The value for the first parameter. * @return The result as a coverage. * @throws OperationNotFoundException if there is no operation named {@code operationName}. * @throws InvalidParameterNameException if there is no parameter with the specified name. * @throws CoverageProcessingException if the operation can't be applied. */ protected final Coverage doOperation( final String operationName, final Coverage source, final String argumentName1, final Object argumentValue1) throws OperationNotFoundException, InvalidParameterNameException, CoverageProcessingException { final Operation operation = processor.getOperation(operationName); final ParameterValueGroup parameters = operation.getParameters(); addSources(operationName, parameters, source); setParameterValue(parameters, argumentName1, argumentValue1); return processor.doOperation(parameters); }
private GridCoverage2D cropCoverage(GridCoverage2D coverage, ReferencedEnvelope cropEnvelope) { if (isNotEmpty(cropEnvelope)) { final ParameterValueGroup param = PROCESSOR.getOperation("CoverageCrop").getParameters(); param.parameter("Source").setValue(coverage); param.parameter("Envelope").setValue(cropEnvelope); try { GridCoverage2D cropped = (GridCoverage2D) PROCESSOR.doOperation(param); return cropped; } catch (EmptyIntersectionException e) { return null; } } else { return null; } }
@Test public void testReprojectTransparency() throws Exception { ReferencedEnvelope re = new ReferencedEnvelope(0, 20, 20, 40, DefaultGeographicCRS.WGS84); CoordinateReferenceSystem utm32n = CRS.decode("EPSG:32632", true); ReferencedEnvelope mapExtent = re.transform(utm32n, true); // get a subset of the coverage GridCoverage2D global = worldReader.read(null); CoverageProcessor processor = CoverageProcessor.getInstance(new Hints(Hints.LENIENT_DATUM_SHIFT, Boolean.TRUE)); final ParameterValueGroup param = processor.getOperation("CoverageCrop").getParameters().clone(); param.parameter("source").setValue(global); param.parameter("Envelope").setValue(re); GridCoverage2D cropped = (GridCoverage2D) ((Crop) processor.getOperation("CoverageCrop")).doOperation(param, null); // render with reprojection, the ROI should be used to create transparent pixels BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_4BYTE_ABGR); Graphics2D graphics = bi.createGraphics(); GridCoverageRenderer renderer = new GridCoverageRenderer(utm32n, mapExtent, new Rectangle(0, 0, 100, 100), null); renderer.paint(graphics, cropped, new StyleBuilder().createRasterSymbolizer()); graphics.dispose(); // top left and top right corners must be transparent now, the UTM shrinks towards the pole assertPixelIsTransparent(bi, 0, 0); assertPixelIsTransparent(bi, bi.getWidth() - 1, 0); }
processor.getOperation("Resample").getParameters().clone(); param.parameter("source").setValue(gc); param.parameter("CoordinateReferenceSystem").setValue(crs); ((Resample) processor.getOperation("Resample")).doOperation(param, hints);
@Test public void testRenderOutsideBounds() throws Exception { ReferencedEnvelope re = new ReferencedEnvelope(0, 20, 20, 40, DefaultGeographicCRS.WGS84); // get a subset of the coverage GridCoverage2D global = worldReader.read(null); CoverageProcessor processor = CoverageProcessor.getInstance(new Hints(Hints.LENIENT_DATUM_SHIFT, Boolean.TRUE)); final ParameterValueGroup param = processor.getOperation("CoverageCrop").getParameters().clone(); param.parameter("source").setValue(global); param.parameter("Envelope").setValue(re); GridCoverage2D cropped = (GridCoverage2D) ((Crop) processor.getOperation("CoverageCrop")).doOperation(param, null); ReferencedEnvelope reOutside = new ReferencedEnvelope(40, 60, 20, 40, DefaultGeographicCRS.WGS84); GridCoverageRenderer renderer = new GridCoverageRenderer( DefaultGeographicCRS.WGS84, reOutside, new Rectangle(0, 0, 100, 100), null); RasterSymbolizer symbolizer = new StyleBuilder().createRasterSymbolizer(); Interpolation interpolation = Interpolation.getInstance(Interpolation.INTERP_NEAREST); RenderedImage image = renderer.renderImage(cropped, symbolizer, interpolation, null, 256, 256); // outside coverage bounds, just return null but don't NPE assertNull(image); }
PROCESSOR.getOperation("SelectSampleDimension").getParameters();