package org.geotools.styling.builder;
import static org.junit.Assert.*;
import org.geotools.styling.ColorMap;
import org.geotools.styling.ColorMapEntry;
import org.geotools.styling.RasterSymbolizer;
import org.geotools.styling.ShadedRelief;
import org.geotools.styling.Style;
import org.junit.Test;
import org.opengis.style.ContrastMethod;
/**
*
*
* @source $URL$
*/
public class CookbookRasterTest extends AbstractStyleTest {
@Test
public void testSimple() {
Style style = new RasterSymbolizerBuilder().buildStyle();
// print(style);
// round up the basic elements and check its simple
StyleCollector collector = new StyleCollector();
style.accept(collector);
assertSimpleStyle(collector);
// check the symbolizer
RasterSymbolizer rs = (RasterSymbolizer) collector.symbolizers.get(0);
assertNull(rs.getChannelSelection());
assertEquals(0, rs.getColorMap().getColorMapEntries().length);
}
@Test
public void testTwoColorGradient() {
ColorMapBuilder cm = new ColorMapBuilder();
cm.entry().quantity(70).colorHex("#008000");
cm.entry().quantity(256).colorHex("#663333");
Style style = cm.buildStyle();
// print(style);
// round up the basic elements and check its simple
StyleCollector collector = new StyleCollector();
style.accept(collector);
assertSimpleStyle(collector);
// check the symbolizer
RasterSymbolizer rs = (RasterSymbolizer) collector.symbolizers.get(0);
assertNull(rs.getChannelSelection());
ColorMap cmap = rs.getColorMap();
assertEquals(ColorMap.TYPE_RAMP, cmap.getType());
assertFalse(cmap.getExtendedColors());
assertEntry("#008000", 70.0, 1.0, null, cmap.getColorMapEntry(0));
assertEntry("#663333", 256.0, 1.0, null, cmap.getColorMapEntry(1));
}
@Test
public void testTransparentGradient() {
ColorMapBuilder cm = new RasterSymbolizerBuilder().opacity(0.3).colorMap();
cm.entry().quantity(70).colorHex("#008000");
cm.entry().quantity(256).colorHex("#663333");
Style style = cm.buildStyle();
// print(style);
// round up the basic elements and check its simple
StyleCollector collector = new StyleCollector();
style.accept(collector);
assertSimpleStyle(collector);
// check the symbolizer
RasterSymbolizer rs = (RasterSymbolizer) collector.symbolizers.get(0);
assertEquals(0.3, rs.getOpacity().evaluate(null, Double.class), 0.0);
assertNull(rs.getChannelSelection());
ColorMap cmap = rs.getColorMap();
assertEquals(ColorMap.TYPE_RAMP, cmap.getType());
assertFalse(cmap.getExtendedColors());
assertEntry("#008000", 70.0, 1.0, null, cmap.getColorMapEntry(0));
assertEntry("#663333", 256.0, 1.0, null, cmap.getColorMapEntry(1));
}
@Test
public void testBrightnessAndContrast() {
RasterSymbolizerBuilder rsb = new RasterSymbolizerBuilder();
rsb.contrastEnhancement().normalize().gamma(0.5);
ColorMapBuilder cm = rsb.colorMap();
cm.entry().quantity(70).colorHex("#008000");
cm.entry().quantity(256).colorHex("#663333");
Style style = cm.buildStyle();
// print(style);
// round up the basic elements and check its simple
StyleCollector collector = new StyleCollector();
style.accept(collector);
assertSimpleStyle(collector);
// check the symbolizer
RasterSymbolizer rs = (RasterSymbolizer) collector.symbolizers.get(0);
assertEquals(1.0, rs.getOpacity().evaluate(null, Double.class), 0.0);
assertNotNull(rs.getContrastEnhancement());
assertEquals(ContrastMethod.NORMALIZE, rs.getContrastEnhancement().getMethod());
assertEquals(0.5, rs.getContrastEnhancement().getGammaValue().evaluate(null, Double.class),
0.0);
assertNull(rs.getChannelSelection());
ColorMap cmap = rs.getColorMap();
assertEquals(ColorMap.TYPE_RAMP, cmap.getType());
assertFalse(cmap.getExtendedColors());
assertEntry("#008000", 70.0, 1.0, null, cmap.getColorMapEntry(0));
assertEntry("#663333", 256.0, 1.0, null, cmap.getColorMapEntry(1));
}
@Test
public void testThreeColorGradient() {
ColorMapBuilder cm = new ColorMapBuilder();
cm.entry().quantity(150).colorHex("#0000FF");
cm.entry().quantity(200).colorHex("#FFFF00");
cm.entry().quantity(250).colorHex("#FF0000");
Style style = cm.buildStyle();
// print(style);
// round up the basic elements and check its simple
StyleCollector collector = new StyleCollector();
style.accept(collector);
assertSimpleStyle(collector);
// check the symbolizer
RasterSymbolizer rs = (RasterSymbolizer) collector.symbolizers.get(0);
assertNull(rs.getChannelSelection());
ColorMap cmap = rs.getColorMap();
assertEquals(ColorMap.TYPE_RAMP, cmap.getType());
assertFalse(cmap.getExtendedColors());
assertEquals(3, cmap.getColorMapEntries().length);
assertEntry("#0000FF", 150.0, 1.0, null, cmap.getColorMapEntry(0));
assertEntry("#FFFF00", 200.0, 1.0, null, cmap.getColorMapEntry(1));
assertEntry("#FF0000", 250.0, 1.0, null, cmap.getColorMapEntry(2));
}
@Test
public void testAlphaChannel() {
ColorMapBuilder cm = new ColorMapBuilder();
cm.entry().quantity(70).colorHex("#008000");
cm.entry().quantity(256).colorHex("#008000").opacity(0);
Style style = cm.buildStyle();
// print(style);
// round up the basic elements and check its simple
StyleCollector collector = new StyleCollector();
style.accept(collector);
assertSimpleStyle(collector);
// check the symbolizer
RasterSymbolizer rs = (RasterSymbolizer) collector.symbolizers.get(0);
assertNull(rs.getChannelSelection());
ColorMap cmap = rs.getColorMap();
assertEquals(ColorMap.TYPE_RAMP, cmap.getType());
assertFalse(cmap.getExtendedColors());
assertEquals(2, cmap.getColorMapEntries().length);
assertEntry("#008000", 70.0, 1.0, null, cmap.getColorMapEntry(0));
assertEntry("#008000", 256.0, 0.0, null, cmap.getColorMapEntry(1));
}
@Test
public void testDiscreteColors() {
ColorMapBuilder cm = new ColorMapBuilder().type(ColorMap.TYPE_INTERVALS);
cm.entry().quantity(150).colorHex("#008000");
cm.entry().quantity(256).colorHex("#663333");
Style style = cm.buildStyle();
// print(style);
// round up the basic elements and check its simple
StyleCollector collector = new StyleCollector();
style.accept(collector);
assertSimpleStyle(collector);
// check the symbolizer
RasterSymbolizer rs = (RasterSymbolizer) collector.symbolizers.get(0);
assertNull(rs.getChannelSelection());
ColorMap cmap = rs.getColorMap();
assertEquals(ColorMap.TYPE_INTERVALS, cmap.getType());
assertFalse(cmap.getExtendedColors());
assertEquals(2, cmap.getColorMapEntries().length);
assertEntry("#008000", 150.0, 1.0, null, cmap.getColorMapEntry(0));
assertEntry("#663333", 256.0, 1.0, null, cmap.getColorMapEntry(1));
}
void assertEntry(String colorHex, double quantity, double opacity, String label,
ColorMapEntry colorMapEntry) {
assertEquals(colorHex, colorMapEntry.getColor().evaluate(null, String.class));
assertEquals(quantity, colorMapEntry.getQuantity().evaluate(null, Double.class), 0.0);
assertEquals(opacity, colorMapEntry.getOpacity().evaluate(null, Double.class), 0.0);
assertEquals(label, colorMapEntry.getLabel());
}
@Test
public void testShadedRelief() {
Style style = new ShadedReliefBuilder().factor(10).brightnessOnly(true).buildStyle();
// print(style);
// round up the basic elements and check its simple
StyleCollector collector = new StyleCollector();
style.accept(collector);
assertSimpleStyle(collector);
// check the symbolizer
RasterSymbolizer rs = (RasterSymbolizer) collector.symbolizers.get(0);
assertNull(rs.getChannelSelection());
assertNull(rs.getColorMap());
ShadedRelief sr = rs.getShadedRelief();
assertEquals(10.0, sr.getReliefFactor().evaluate(null, Double.class), 0.0);
assertTrue(sr.isBrightnessOnly());
}
}