LineSymbolizer ls = styleFactory.createLineSymbolizer(); ls.setStroke( styleFactory.createStroke( filterFactory.literal(color), filterFactory.literal(2))); PolygonSymbolizer ps = styleFactory.createPolygonSymbolizer(); ps.setFill(styleFactory.createFill(filterFactory.literal(color))); Rule r = styleFactory.createRule(); r.symbolizers().add(sym); FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle(); fts.rules().add(r); Style s = styleFactory.createStyle(); s.featureTypeStyles().add(fts); UserLayer l = styleFactory.createUserLayer();
if (rule.getFilter() != null) { Filter filter = rule.getFilter(); filterCopy = copy(filter); Symbolizer[] symsCopy = rule.getSymbolizers(); for (int i = 0; i < symsCopy.length; i++) { symsCopy[i] = copy(symsCopy[i]); Graphic[] legendCopy = rule.getLegendGraphic(); for (int i = 0; i < legendCopy.length; i++) { legendCopy[i] = copy(legendCopy[i]); Description descCopy = rule.getDescription(); descCopy = copy(descCopy); copy = sf.createRule(); copy.setSymbolizers(symsCopy); copy.setDescription(descCopy); copy.setLegendGraphic(legendCopy); copy.setName(rule.getName()); copy.setFilter(filterCopy); copy.setElseFilter(rule.isElseFilter()); copy.setMaxScaleDenominator(rule.getMaxScaleDenominator()); copy.setMinScaleDenominator(rule.getMinScaleDenominator());
List<Rule> elseRuleList = new ArrayList<Rule>(); for (Rule r : fts.rules()) if (isWithInScale(r)) { if (r.isElseFilter()) { elseRuleList.add(r); } else { if (!Filter.INCLUDE.equals(r.getFilter()) && hasEnvVariables(r.getFilter())) { DuplicatingStyleVisitor cloner = new DuplicatingStyleVisitor() { r.accept(cloner); Rule copy = (Rule) cloner.getCopy(); if (!Filter.EXCLUDE.equals(copy.getFilter())) { ruleList.add(copy);
/** * Checks if a rule can be triggered at the current scale level * * @param r The rule * @return true if the scale is compatible with the rule settings */ private boolean isWithInScale(Rule r) { return ((r.getMinScaleDenominator() - TOLERANCE) <= scaleDenominator) && ((r.getMaxScaleDenominator() + TOLERANCE) > scaleDenominator); }
public RuleBuilder reset(Rule rule) { if (rule == null) { return unset(); } name = rule.getName(); title = rule.getTitle(); ruleAbstract = rule.getAbstract(); minScaleDenominator = rule.getMinScaleDenominator(); maxScaleDenominator = rule.getMaxScaleDenominator(); filter = rule.getFilter(); elseFilter = rule.isElseFilter(); symbolizers.clear(); symbolizers.addAll(rule.symbolizers()); // TODO: unpack into builders in order to "copy" symbolizerBuilder = null; unset = false; legend.reset(rule.getLegend()); return this; }
/** * create a simple styling rule, see the SLD Spec for more details of scaleDenominators * * @param symbolizers - an array of symbolizers to use * @param minScaleDenominator - the minimim scale to draw the feature at * @param maxScaleDenominator - the maximum scale to draw the feature at * @return the new rule */ public Rule createRule( Symbolizer[] symbolizers, double minScaleDenominator, double maxScaleDenominator) { Rule r = sf.createRule(); r.setSymbolizers(symbolizers); if (!Double.isNaN(maxScaleDenominator)) { r.setMaxScaleDenominator(maxScaleDenominator); } else { r.setMaxScaleDenominator(Double.POSITIVE_INFINITY); } if (!Double.isNaN(minScaleDenominator)) { r.setMinScaleDenominator(minScaleDenominator); } else { r.setMinScaleDenominator(0.0); } return r; }
@Test public void testColourMap() throws Exception { String yaml = "raster: \n" + " color-map:\n" + " type: values\n" + " entries:\n" + " - " + tuple("#ff0000", "1.0", "0", "start") + "\n" + " - " + tuple("#00ff00", "1.0", "500", "middle") + "\n" + " - " + tuple("#0000ff", "1.0", "1000", "end") + "\n" + ""; StyledLayerDescriptor sld = Ysld.parse(yaml); FeatureTypeStyle fs = SLD.defaultStyle(sld).featureTypeStyles().get(0); RasterSymbolizer symb = (RasterSymbolizer) fs.rules().get(0).symbolizers().get(0); // need to use the geotools.styling interface as it provides the accessors for the entries. ColorMap map = (ColorMap) symb.getColorMap(); Color colour1 = (Color) map.getColorMapEntry(0).getColor().evaluate(null); Color colour2 = (Color) map.getColorMapEntry(1).getColor().evaluate(null); Color colour3 = (Color) map.getColorMapEntry(2).getColor().evaluate(null); assertThat(colour1, is(Color.RED)); assertThat(colour2, is(Color.GREEN)); assertThat(colour3, is(Color.BLUE)); }
@Test public void testFilter() throws Exception { FilterFactory2 filterFactory = CommonFactoryFinder.getFilterFactory2(); StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory(); StyledLayerDescriptor sld = styleFactory.createStyledLayerDescriptor(); UserLayer layer = styleFactory.createUserLayer(); sld.layers().add(layer); Style style = styleFactory.createStyle(); layer.userStyles().add(style); Rule rule = styleFactory.createRule(); rule.setFilter(filterFactory.less(filterFactory.property("foo"), filterFactory.literal(2))); style.featureTypeStyles().add(styleFactory.createFeatureTypeStyle()); style.featureTypeStyles().get(0).rules().add(rule); PointSymbolizer p = styleFactory.createPointSymbolizer(); rule.symbolizers().add((Symbolizer) p); StringWriter out = new StringWriter(); Ysld.encode(sld, out); YamlMap obj = new YamlMap(YamlUtil.getSafeYaml().load(out.toString())); YamlMap result = obj.seq("feature-styles").map(0).seq("rules").map(0); assertThat(result, yHasEntry("filter", equalTo("${foo < 2}"))); }
@Test public void testRenderingTransformationSimplifyWithWMSParams() throws IOException { StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory(); FilterFactory filterFactory = CommonFactoryFinder.getFilterFactory(); StyledLayerDescriptor sld = styleFactory.createStyledLayerDescriptor(); UserLayer layer = styleFactory.createUserLayer(); sld.layers().add(layer); Style style = styleFactory.createStyle(); layer.userStyles().add(style); FeatureTypeStyle featureStyle = styleFactory.createFeatureTypeStyle(); style.featureTypeStyles().add(featureStyle); featureStyle.setTransformation(rt); Rule rule = styleFactory.createRule(); rule.setName("Za'Ha'Dum"); featureStyle.rules().add(rule);
@Test public void testFilteredRulesPickFirstMark() throws Exception { Style result; { Filter f1 = filterFactory.less(filterFactory.property("foo"), filterFactory.literal(4)); Filter f2 = filterFactory.greaterOrEqual( filterFactory.property("foo"), filterFactory.literal(4)); PointSymbolizer symb1 = mark("arrow", Color.BLACK, Color.RED, 1f, 16); PointSymbolizer symb2 = mark("arrow", Color.BLACK, Color.BLUE, 1f, 16); Style input = styleFromRules(rule(f1, symb1), rule(f2, symb2)); Map<String, String> properties = new HashMap<String, String>(); properties.put("0.0.0", ""); result = IconPropertyInjector.injectProperties(input, properties); } { FeatureTypeStyle fts = assumeSingleElement(result.featureTypeStyles()); Rule rule = assertSingleElement(fts.rules()); PointSymbolizer symb = assertSingleElement(rule.symbolizers(), PointSymbolizer.class); Mark mark = assertSingleElement(symb.getGraphic().graphicalSymbols(), Mark.class); assertThat(mark.getFill().getColor().evaluate(null, Color.class), is(Color.RED)); } }
throws IllegalFilterException { PropertyIsLessThan cf1 = ff.less(value, ff.literal(breaks[0])); rules[0] = sf.createRule(); rules[0].setFilter(cf1); rules[0].setSymbolizers(new Symbolizer[] {symb1}); LOGGER.fine("added low class " + breaks[0] + " " + colors[0]); rules[i] = sf.createRule(); rules[i].setSymbolizers(new Symbolizer[] {symb}); rules[i].setFilter(cf); rules[colors.length - 1] = sf.createRule(); rules[colors.length - 1].setFilter(cf2); rules[colors.length - 1].setName(geomName); c = this.createColor(colors[colors.length - 1]); rules[colors.length - 1].setSymbolizers(new Symbolizer[] {symb2}); LOGGER.fine( "added upper class " rules[colors.length].setSymbolizers(new Symbolizer[] {elsePoly}); rules[colors.length].setElseFilter(true);
@Test public void testLabelDisplacement() throws IOException { StyleFactory sf = CommonFactoryFinder.getStyleFactory(); FilterFactory ff = CommonFactoryFinder.getFilterFactory(); StyledLayerDescriptor sld = sf.createStyledLayerDescriptor(); UserLayer layer = sf.createUserLayer(); sld.layers().add(layer); Style style = sf.createStyle(); layer.userStyles().add(style); FeatureTypeStyle featureStyle = sf.createFeatureTypeStyle(); style.featureTypeStyles().add(featureStyle); Rule rule = sf.createRule(); featureStyle.rules().add(rule); null, null); rule.symbolizers().add(text);
@Test public void testLabelShield() throws IOException { StyleFactory sf = CommonFactoryFinder.getStyleFactory(); FilterFactory ff = CommonFactoryFinder.getFilterFactory(); StyledLayerDescriptor sld = sf.createStyledLayerDescriptor(); UserLayer layer = sf.createUserLayer(); sld.layers().add(layer); Style style = sf.createStyle(); layer.userStyles().add(style); FeatureTypeStyle featureStyle = sf.createFeatureTypeStyle(); style.featureTypeStyles().add(featureStyle); Rule rule = sf.createRule(); featureStyle.rules().add(rule); Stroke stroke = sf.stroke(ff.literal("#555555"), null, null, null, null, null, null); rule.symbolizers().add(sf.lineSymbolizer("line", null, null, null, stroke, null)); Mark mark = sf.mark(ff.literal("circle"), sf.fill(null, ff.literal("#995555"), null), null); List<GraphicalSymbol> symbols = new ArrayList<GraphicalSymbol>(); null); text.setGraphic(sf.graphic(symbols, null, null, null, null, null)); rule.symbolizers().add(text);
PointSymbolizer ps = (PointSymbolizer) style.featureTypeStyles().get(0).rules().get(0).symbolizers().get(0); FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null); ps.setGeometry(ff.function("convert", ff.property("wkt"), ff.literal(Point.class)));
@Test public void testLabelLinePlacement() throws IOException { StyleFactory sf = CommonFactoryFinder.getStyleFactory(); FilterFactory ff = CommonFactoryFinder.getFilterFactory(); StyledLayerDescriptor sld = sf.createStyledLayerDescriptor(); UserLayer layer = sf.createUserLayer(); sld.layers().add(layer); Style style = sf.createStyle(); layer.userStyles().add(style); FeatureTypeStyle featureStyle = sf.createFeatureTypeStyle(); style.featureTypeStyles().add(featureStyle); Rule rule = sf.createRule(); featureStyle.rules().add(rule); LabelPlacement place = sf.createLinePlacement(ff.literal(10)); null, null); rule.symbolizers().add(text);
@Test public void testFunction() throws Exception { StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory(); FilterFactory filterFactory = CommonFactoryFinder.getFilterFactory(); StyledLayerDescriptor sld = styleFactory.createStyledLayerDescriptor(); UserLayer layer = styleFactory.createUserLayer(); sld.layers().add(layer); Style style = styleFactory.createStyle(); layer.userStyles().add(style); Rule rule = styleFactory.createRule(); style.featureTypeStyles().add(styleFactory.createFeatureTypeStyle()); style.featureTypeStyles().get(0).rules().add(rule); Function func = filterFactory.function( "strEndsWith", filterFactory.property("foo"), filterFactory.literal("bar")); rule.setFilter(filterFactory.equal(func, filterFactory.literal(true), false)); StringWriter out = new StringWriter(); Ysld.encode(sld, out); YamlMap obj = new YamlMap(YamlUtil.getSafeYaml().load(out.toString())); String filter = obj.seq("feature-styles").map(0).seq("rules").map(0).str("filter"); assertEquals("${strEndsWith(foo,'bar') = true}", filter); }
private static Style createDefaultStyle() { Color foreground = Color.darkGray; int thick = 3; // create stroke org.geotools.styling.Stroke stroke = sf.stroke(ff.literal(foreground), null, ff.literal(thick), null, null, null, null); // create line symbolizer LineSymbolizer lineSym = sf.createLineSymbolizer(stroke, null); // create rule Rule r = sf.createRule(); r.symbolizers().add(lineSym); // add it to style Style style = sf.createStyle(); FeatureTypeStyle fts = sf.createFeatureTypeStyle(); fts.rules().add(r); style.featureTypeStyles().add(fts); return style; } }
public void testFeatureTypeStyle() throws Exception { FeatureTypeStyle fts = sf.createFeatureTypeStyle(); fts.setFeatureTypeName("feature-type"); fts.getOptions().put("key", "value"); Rule rule1; rule1 = sf.createRule(); rule1.setName("rule1"); rule1.setFilter(ff.id(Collections.singleton(ff.featureId("FID")))); Rule rule2 = sf.createRule(); rule2.setIsElseFilter(true); rule2.setName("rule2"); fts.addRule(rule1); fts.addRule(rule2); fts.accept(visitor); FeatureTypeStyle clone = (FeatureTypeStyle) visitor.getCopy(); // assertClone(fts, clone); assertEqualsContract(fts, clone); rule1 = sf.createRule(); rule1.setName("rule1"); rule1.setFilter(ff.id(Collections.singleton(ff.featureId("FID")))); FeatureTypeStyle notEq = sf.createFeatureTypeStyle(); notEq.setName("fts-not-equal"); notEq.addRule(rule1); assertEqualsContract(clone, notEq, fts); fts.setTransformation(ff.literal("transformation")); fts.setOnlineResource(new OnLineResourceImpl()); fts.accept(visitor); clone = (FeatureTypeStyle) visitor.getCopy(); assertEqualsContract(fts, clone); }
@Test public void testReprojectedPolygon() throws Exception { // a spatial filter in a different SRS CoordinateReferenceSystem utm31n = CRS.decode("EPSG:32631"); CoordinateReferenceSystem wgs84 = CRS.decode("EPSG:4326"); ReferencedEnvelope envWgs84 = new ReferencedEnvelope(1, 3, 5, 7, wgs84); ReferencedEnvelope envUTM31N = envWgs84.transform(utm31n, true); StyleBuilder sb = new StyleBuilder(); Symbolizer ps = sb.createPointSymbolizer(); Style style = sb.createStyle(ps); Rule rule = style.featureTypeStyles().get(0).rules().get(0); Polygon polygon = JTS.toGeometry(envUTM31N); polygon.setUserData(utm31n); rule.setFilter(ff.intersects(ff.property("geom"), ff.literal(polygon))); content.addLayer(new FeatureLayer(pointFS, style)); RendererBaseTest.showRender("Reprojected polygon", renderer, TIME, bounds); assertEquals(1, renderedIds.size()); assertEquals("point.4", renderedIds.iterator().next()); }
private static Style createPointStyle() { StyleFactory sf = CommonFactoryFinder.getStyleFactory(); URL iconUrl = ScreenMapShapefileTest.class.getResource("icon.png"); ExternalGraphic icon = sf.createExternalGraphic(iconUrl, "image/png"); Graphic graphic = sf.createGraphic(new ExternalGraphic[] {icon}, null, null, null, null, null); PointSymbolizer symbolizer = sf.createPointSymbolizer(graphic, "the_geom"); Rule rule = sf.createRule(); rule.symbolizers().add(symbolizer); FeatureTypeStyle fts = sf.createFeatureTypeStyle(); fts.rules().add(rule); Style style = sf.createStyle(); style.featureTypeStyles().add(fts); return style; }