Package org.geotools.styling.builder

Source Code of org.geotools.styling.builder.CookbookPointTest

package org.geotools.styling.builder;

import static org.junit.Assert.*;

import java.awt.Color;
import java.util.List;

import javax.measure.unit.SI;

import org.geotools.filter.function.CategorizeFunction;
import org.geotools.styling.ExternalGraphic;
import org.geotools.styling.Font;
import org.geotools.styling.Graphic;
import org.geotools.styling.PointPlacement;
import org.geotools.styling.PointSymbolizer;
import org.geotools.styling.Rule;
import org.geotools.styling.Style;
import org.geotools.styling.TextSymbolizer;
import org.junit.Test;
import org.opengis.filter.Filter;
import org.opengis.filter.expression.Function;
import org.opengis.style.Fill;
import org.opengis.style.GraphicalSymbol;
import org.opengis.style.Mark;
import org.opengis.style.Stroke;

/**
*
*
* @source $URL$
*/
public class CookbookPointTest extends AbstractStyleTest {

    @Test
    public void testSimple() {
        Style style = new GraphicBuilder().size(6).mark().name("circle").fill().color(Color.RED)
                .buildStyle();
        // print(style);

        // round up the basic elements and check its simple
        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        assertSimpleStyle(collector);

        // check the size
        PointSymbolizer ps = (PointSymbolizer) collector.symbolizers.get(0);
        Graphic graphic = ps.getGraphic();
        assertEquals(6, (int) graphic.getSize().evaluate(null, Integer.class));

        // check the mark
        List<GraphicalSymbol> symbols = graphic.graphicalSymbols();
        assertEquals(1, symbols.size());
        Mark mark = (Mark) symbols.get(0);
        assertEquals("circle", mark.getWellKnownName().evaluate(null));
        assertEquals(Color.RED, mark.getFill().getColor().evaluate(null, Color.class));
    }

    @Test
    public void testPointWithStroke() {
        MarkBuilder mb = new GraphicBuilder().size(6).mark().name("circle");
        mb.fill().color(Color.RED);
        mb.stroke().width(2).color(Color.BLUE);
        Style style = mb.buildStyle();
        // print(style);

        // round up the basic elements and check its simple
        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        assertSimpleStyle(collector);

        // check the size
        PointSymbolizer ps = (PointSymbolizer) collector.symbolizers.get(0);
        Graphic graphic = ps.getGraphic();
        assertEquals(6, (int) graphic.getSize().evaluate(null, Integer.class));

        // check the mark
        List<GraphicalSymbol> symbols = graphic.graphicalSymbols();
        assertEquals(1, symbols.size());
        Mark mark = (Mark) symbols.get(0);
        assertEquals("circle", mark.getWellKnownName().evaluate(null));
        assertEquals(Color.RED, mark.getFill().getColor().evaluate(null, Color.class));
        Stroke stroke = mark.getStroke();
        assertEquals(Color.BLUE, stroke.getColor().evaluate(null, Color.class));
        assertEquals(2, (int) stroke.getWidth().evaluate(null, Integer.class));
    }

    @Test
    public void testRotatedSquare() {
        Style style = new GraphicBuilder().size(12).rotation(45).mark().name("square").fill()
                .color(Color.GREEN).buildStyle();
        // print(style);

        // round up the basic elements and check its simple
        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        assertSimpleStyle(collector);

        // check the size and rotation
        PointSymbolizer ps = (PointSymbolizer) collector.symbolizers.get(0);
        Graphic graphic = ps.getGraphic();
        assertEquals(12, (int) graphic.getSize().evaluate(null, Integer.class));
        assertEquals(45, (int) graphic.getRotation().evaluate(null, Integer.class));

        // check the mark
        List<GraphicalSymbol> symbols = graphic.graphicalSymbols();
        assertEquals(1, symbols.size());
        Mark mark = (Mark) symbols.get(0);
        assertEquals("square", mark.getWellKnownName().evaluate(null));
        assertEquals(Color.GREEN, mark.getFill().getColor().evaluate(null, Color.class));
    }

    @Test
    public void testTransparentTriangle() {
        MarkBuilder mb = new GraphicBuilder().size(12).mark().name("triangle");
        mb.fill().color(Color.RED).opacity(0.2);
        mb.stroke().color(Color.BLUE).width(2);
        Style style = mb.buildStyle();
        // print(style);

        // round up the basic elements and check its simple
        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        assertSimpleStyle(collector);

        // check the size and rotation
        PointSymbolizer ps = (PointSymbolizer) collector.symbolizers.get(0);
        Graphic graphic = ps.getGraphic();
        assertEquals(12, (int) graphic.getSize().evaluate(null, Integer.class));

        // check the mark
        List<GraphicalSymbol> symbols = graphic.graphicalSymbols();
        assertEquals(1, symbols.size());
        Mark mark = (Mark) symbols.get(0);
        assertEquals("triangle", mark.getWellKnownName().evaluate(null));
        Fill fill = mark.getFill();
        assertEquals(Color.RED, fill.getColor().evaluate(null, Color.class));
        assertEquals(0.2, (double) fill.getOpacity().evaluate(null, Double.class), 0);
        Stroke stroke = mark.getStroke();
        assertEquals(Color.BLUE, stroke.getColor().evaluate(null, Color.class));
        assertEquals(2, (int) stroke.getWidth().evaluate(null, Integer.class));
    }

    @Test
    public void testPointAsGraphics() {
        Style style = new GraphicBuilder().size(32).externalGraphic("smileyface.png", "image/png")
                .buildStyle();
        // print(style);

        // round up the basic elements and check its simple
        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        assertSimpleStyle(collector);

        // check the size and rotation
        PointSymbolizer ps = (PointSymbolizer) collector.symbolizers.get(0);
        Graphic graphic = ps.getGraphic();
        assertEquals(32, (int) graphic.getSize().evaluate(null, Integer.class));

        // check the mark
        List<GraphicalSymbol> symbols = graphic.graphicalSymbols();
        assertEquals(1, symbols.size());
        ExternalGraphic eg = (ExternalGraphic) symbols.get(0);
        assertEquals("image/png", eg.getFormat());
        assertEquals("smileyface.png", eg.getOnlineResource().getLinkage().toString());
    }

    @Test
    public void testPointDefaultLabel() {
        RuleBuilder rb = new RuleBuilder();
        rb.point().graphic().size(6).mark().name("circle").fill().color(Color.RED);
        rb.text().label("name").fill().color(Color.BLACK);
        Style style = rb.buildStyle();

        // round up the basic elements and check its simple
        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        basicPointWithLabelAssertions(collector);

        TextSymbolizer ps = (TextSymbolizer) collector.symbolizers.get(1);
        assertEquals(ff.property("name"), ps.getLabel());
        assertEquals(Color.BLACK, ps.getFill().getColor().evaluate(null, Color.class));
    }

    @Test
    public void testPointStyledLabel() {
        RuleBuilder rb = new RuleBuilder();
        rb.point().graphic().size(6).mark().name("circle").fill().color(Color.RED);
        TextSymbolizerBuilder tb = rb.text().label("name");
        tb.fill().color(Color.BLACK);
        tb.newFont().familyName("Arial").size(12).styleName(Font.Style.NORMAL)
                .weightName(Font.Weight.BOLD);
        tb.pointPlacement().displacement().x(0).y(5);
        tb.pointPlacement().anchor().x(0.5);
        Style style = rb.buildStyle();

        // round up the basic elements and check its simple
        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        basicPointWithLabelAssertions(collector);

        TextSymbolizer ps = (TextSymbolizer) collector.symbolizers.get(1);
        assertEquals(ff.property("name"), ps.getLabel());
        assertEquals(Color.BLACK, ps.getFill().getColor().evaluate(null, Color.class));

        // font
        Font font = ps.getFont();
        assertEquals("Arial", font.getFamily().get(0).evaluate(null, String.class));
        assertEquals(12, (int) font.getSize().evaluate(null, Integer.class));
        assertEquals(Font.Style.NORMAL, font.getStyle().evaluate(null, String.class));
        assertEquals(Font.Weight.BOLD, font.getWeight().evaluate(null, String.class));

        // placement
        PointPlacement pp = (PointPlacement) ps.getLabelPlacement();
        assertEquals(0.5, pp.getAnchorPoint().getAnchorPointX().evaluate(null, Double.class), 0);
        assertEquals(0, pp.getAnchorPoint().getAnchorPointY().evaluate(null, Double.class), 0);
        assertEquals(0, (int) pp.getDisplacement().getDisplacementX().evaluate(null, Integer.class));
        assertEquals(5, (int) pp.getDisplacement().getDisplacementY().evaluate(null, Integer.class));
    }

    @Test
    public void testPointRotatedLabel() {
        RuleBuilder rb = new RuleBuilder();
        rb.point().graphic().size(6).mark().name("circle").fill().color(Color.RED);
        TextSymbolizerBuilder tb = rb.text().label("name");
        tb.fill().color(Color.BLACK);
        tb.newFont().familyName("Arial").size(12).styleName(Font.Style.NORMAL)
                .weightName(Font.Weight.BOLD);
        tb.pointPlacement().displacement().x(0).y(5);
        tb.pointPlacement().anchor().x(0.5);
        tb.pointPlacement().rotation(-45);
        Style style = rb.buildStyle();

        // round up the basic elements and check its simple
        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        basicPointWithLabelAssertions(collector);

        TextSymbolizer ps = (TextSymbolizer) collector.symbolizers.get(1);
        assertEquals(ff.property("name"), ps.getLabel());
        assertEquals(Color.BLACK, ps.getFill().getColor().evaluate(null, Color.class));

        // font
        Font font = ps.getFont();
        assertEquals("Arial", font.getFamily().get(0).evaluate(null, String.class));
        assertEquals(12, (int) font.getSize().evaluate(null, Integer.class));
        assertEquals(Font.Style.NORMAL, font.getStyle().evaluate(null, String.class));
        assertEquals(Font.Weight.BOLD, font.getWeight().evaluate(null, String.class));

        // placement
        PointPlacement pp = (PointPlacement) ps.getLabelPlacement();
        assertEquals(-45, pp.getRotation().evaluate(null, Double.class), 0.0);
        assertEquals(0.5, pp.getAnchorPoint().getAnchorPointX().evaluate(null, Double.class), 0);
        assertEquals(0, pp.getAnchorPoint().getAnchorPointY().evaluate(null, Double.class), 0);
        assertEquals(0, (int) pp.getDisplacement().getDisplacementX().evaluate(null, Integer.class));
        assertEquals(5, (int) pp.getDisplacement().getDisplacementY().evaluate(null, Integer.class));
    }

    private void basicPointWithLabelAssertions(StyleCollector collector) {
        assertEquals(1, collector.featureTypeStyles.size());
        assertEquals(1, collector.rules.size());
        assertEquals(2, collector.symbolizers.size());

        // check the size and rotation of the point symbolizer
        PointSymbolizer ps = (PointSymbolizer) collector.symbolizers.get(0);
        Graphic graphic = ps.getGraphic();
        assertEquals(6, (int) graphic.getSize().evaluate(null, Integer.class));

        // check the mark
        List<GraphicalSymbol> symbols = graphic.graphicalSymbols();
        assertEquals(1, symbols.size());
        Mark mark = (Mark) symbols.get(0);
        assertEquals("circle", mark.getWellKnownName().evaluate(null));
        Fill fill = mark.getFill();
        assertEquals(Color.RED, fill.getColor().evaluate(null, Color.class));
    }

    @Test
    public void testAttributeBasedPoint() {
        Mark mark = (Mark) new MarkBuilder().name("circle").fill().color(new Color(0, 51, 204))
                .buildRoot();
        FeatureTypeStyleBuilder fts = new FeatureTypeStyleBuilder();
        fts.rule().name("SmallPop").title("1 to 50000").filter("pop < 50000").point().graphic()
                .size(8).mark().reset(mark);
        fts.rule().name("MediumPop").title("50000 to 100000")
                .filter("pop between 50000 and 100000").point().graphic().size(12).mark()
                .reset(mark);
        fts.rule().name("LargePop").title("Greater than 100000").filter("pop >= 100000").point()
                .graphic().size(16).mark().reset(mark);
        Style style = fts.buildStyle();
        // print(style);

        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        assertEquals(1, collector.featureTypeStyles.size());
        assertEquals(3, collector.rules.size());
        assertEquals(3, collector.symbolizers.size());

        // check rules and styles
        checkAttributeBasedRule(collector.rules.get(0),
                ff.less(ff.property("pop"), ff.literal("50000")), 8);
        checkAttributeBasedRule(collector.rules.get(1),
                ff.between(ff.property("pop"), ff.literal("50000"), ff.literal("100000")), 12);
        checkAttributeBasedRule(collector.rules.get(2),
                ff.greaterOrEqual(ff.property("pop"), ff.literal("100000")), 16);
    }

    @Test
    public void testCagetorizeBasedPoint() {
        Function size = ff.function("categorize", ff.property("pop"), ff.literal(8),
                ff.literal(50000), ff.literal(12), ff.literal(100000), ff.literal(16));
        Style style = new GraphicBuilder().size(size).mark().name("circle").fill()
                .color(new Color(0, 51, 204)).buildStyle();
        // print(style);

        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        assertSimpleStyle(collector);

        // check the function is there were we expect it
        PointSymbolizer ps = (PointSymbolizer) collector.symbolizers.get(0);
        Graphic graphic = ps.getGraphic();
        assertTrue(graphic.getSize() instanceof CategorizeFunction);
    }

    private void checkAttributeBasedRule(Rule rule, Filter filter, int size) {
        assertEquals(filter, rule.getFilter());
        assertEquals(1, rule.getSymbolizers().length);
        PointSymbolizer ps = (PointSymbolizer) rule.getSymbolizers()[0];
        assertEquals(size, (int) ps.getGraphic().getSize().evaluate(null, Integer.class));
    }

    @Test
    public void testZoomBasedPoint() {
        Mark mark = (Mark) new MarkBuilder().name("circle").fill().color(Color.RED).buildRoot();
        FeatureTypeStyleBuilder fts = new FeatureTypeStyleBuilder();
        fts.rule().name("Large").max(160000000).point().graphic().size(12).mark().reset(mark);
        fts.rule().name("Medium").min(160000000).max(320000000).point().graphic().size(8).mark()
                .reset(mark);
        fts.rule().name("Small").min(320000000).point().graphic().size(4).mark().reset(mark);
        Style style = fts.buildStyle();
        // print(style);

        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        assertEquals(1, collector.featureTypeStyles.size());
        assertEquals(3, collector.rules.size());
        assertEquals(3, collector.symbolizers.size());

        // check rules and styles
        checkScaleBasedRule(collector.rules.get(0), "Large", 0, 160000000, 12);
        checkScaleBasedRule(collector.rules.get(1), "Medium", 160000000, 320000000, 8);
        checkScaleBasedRule(collector.rules.get(2), "Small", 320000000, Double.POSITIVE_INFINITY, 4);
    }

    private void checkScaleBasedRule(Rule rule, String name, double minDenominator,
            double maxDenominator, int size) {
        assertEquals(name, rule.getName());
        assertEquals(minDenominator, rule.getMinScaleDenominator(), 0.0);
        assertEquals(maxDenominator, rule.getMaxScaleDenominator(), 0.0);
        assertEquals(1, rule.getSymbolizers().length);
        PointSymbolizer ps = (PointSymbolizer) rule.getSymbolizers()[0];
        assertEquals(size, (int) ps.getGraphic().getSize().evaluate(null, Integer.class));
    }

    @Test
    public void testUomPoint() {
        Style style = new PointSymbolizerBuilder().uom(SI.METER).graphic().size(50).mark()
                .name("circle").fill().color(Color.RED).buildStyle();
        // print(style);

        StyleCollector collector = new StyleCollector();
        style.accept(collector);
        assertSimpleStyle(collector);

        PointSymbolizer ps = (PointSymbolizer) collector.symbolizers.get(0);
        assertEquals(SI.METER, ps.getUnitOfMeasure());
    }

}
TOP

Related Classes of org.geotools.styling.builder.CookbookPointTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.