/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geotools.process.raster;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.factory.GeoTools;
import org.geotools.process.ProcessException;
import org.geotools.process.factory.DescribeParameter;
import org.geotools.process.factory.DescribeProcess;
import org.geotools.process.factory.DescribeResult;
import org.geotools.process.raster.RasterProcess;
import org.geotools.renderer.lite.gridcoverage2d.RasterSymbolizerHelper;
import org.geotools.styling.ColorMap;
import org.geotools.styling.RasterSymbolizer;
import org.geotools.styling.StyleBuilder;
/**
* Render a GridCoverage based on a dynamic colormap
*
* @author Daniele Romagnoli, GeoSolutions SAS
*/
@DescribeProcess(title = "dynamicColorMap", description = "Apply a Dynamic colorMap to a coverage")
public class DynamicColorMapProcess implements RasterProcess {
public final static String NAME= "DynamicColorMap";
public DynamicColorMapProcess() {
}
@DescribeResult(name = "result", description = "output raster")
public GridCoverage2D execute(
@DescribeParameter(name = "data", description = "Input raster") GridCoverage2D coverage,
@DescribeParameter(name = "colorRamp", description = "The name of the color ramp.") ColorMap colorMap,
@DescribeParameter(name = "opacity", description = "The opacity level, between 0 and 1.",
defaultValue="1", min=0, minValue=0, maxValue=1) float opacity)
throws ProcessException {
final RasterSymbolizer rsb_1 = buildRasterSymbolizer(colorMap, opacity);
RasterSymbolizerHelper rsh = new RasterSymbolizerHelper(coverage, GeoTools.getDefaultHints());
rsh.visit(rsb_1);
return (GridCoverage2D) rsh.getOutput();
}
private RasterSymbolizer buildRasterSymbolizer(ColorMap colorMap, float opacity) {
// build the RasterSymbolizer
StyleBuilder sldBuilder = new StyleBuilder();
final RasterSymbolizer rsb_1 = sldBuilder.createRasterSymbolizer();
rsb_1.setColorMap(colorMap);
rsb_1.setOpacity(sldBuilder.getFilterFactory().literal(opacity));
return rsb_1;
}
}