Argh... looks like in fact the problem is somewhere else, throwing an
exception like this one:
java.lang.RuntimeException: Unable to find function Color
at org.geotools.filter.FunctionFinder.findFunction(FunctionFinder.java:177)
at org.geotools.filter.FunctionFinder.findFunction(FunctionFinder.java:74)
at
org.geotools.filter.FilterFactoryImpl.function(FilterFactoryImpl.java:467)
at
org.geotools.filter.visitor.DuplicatingFilterVisitor.visit(DuplicatingFilterVisitor.java:309)
at
org.geotools.filter.FunctionExpressionImpl.accept(FunctionExpressionImpl.java:147)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:420)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.visit(DuplicatingStyleVisitor.java:669)
at org.geotools.styling.FillImpl.accept(FillImpl.java:199)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:451)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.visit(DuplicatingStyleVisitor.java:878)
at org.geotools.styling.MarkImpl.accept(MarkImpl.java:204)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:523)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:851)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.visit(DuplicatingStyleVisitor.java:818)
at org.geotools.styling.GraphicImpl.accept(GraphicImpl.java:367)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:439)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.visit(DuplicatingStyleVisitor.java:724)
at
org.geotools.styling.visitor.UomRescaleStyleVisitor.visit(UomRescaleStyleVisitor.java:180)
at
org.geotools.styling.PointSymbolizerImpl.accept(PointSymbolizerImpl.java:91)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:537)
at
org.geotools.styling.visitor.DuplicatingStyleVisitor.visit(DuplicatingStyleVisitor.java:275)
at
org.geotools.renderer.lite.StreamingRenderer.rescaleFeatureTypeStyle(StreamingRenderer.java:1846)
at
org.geotools.renderer.lite.StreamingRenderer.applyUnitRescale(StreamingRenderer.java:1824)
at
org.geotools.renderer.lite.StreamingRenderer.processStylers(StreamingRenderer.java:1774)
at
org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:707)
at
org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:533)
On Wed, Jun 1, 2011 at 11:09 PM, Javier Moreno <[email protected]>wrote:
> Hi everybody!
>
> I'm trying to stylish a shape and I would like to draw the points with the
> color that is written in a feature attribute. The name of the attribute is
> "FILL" and its value is just a rgb triplet string ("#A0A0A0", for example).
>
> I've been looking at the documentation and as far as I can understand it
> should result in something like this (based on an example of the doc):
>
> class ColorFunction extends FunctionExpressionImpl {
> public static final FunctionName NAME = new
> FunctionNameImpl("Colorizador", 0);
> public ColorFunction() {
> super("Color", filterFactory.literal("Color"));
> super.fallback =
> CommonFactoryFinder.getFilterFactory2(null).literal(Color.WHITE);
> }
> @Override
> public int getArgCount() {
> return 0;
> }
>
> @Override
> public Object evaluate(SimpleFeature feature) {
> String fill = (String) feature.getAttribute("FILL");
> ...
> Color color = new Color(...);
> return color;
> }
> }
>
> class XXX {
> ...
> public Style getStyle() {
> style = styleFactory.createStyle();
> FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle(
> new Rule[]{ this.createRule("dummy", 10); }
> style.featureTypeStyles().add(fts);
> return style;
> }
>
> protected Rule createRule(String name, int size) {
> ColorFunction colorFn = new ColorFunction();
>
> Graphic gr = styleFactory.createDefaultGraphic();
> Mark mark = styleFactory.getCircleMark();
> mark.setStroke(styleFactory.createStroke(
>
> colorFn, filterFactory.literal(1), filterFactory.literal(0.5)));
> mark.setFill(styleFactory.createFill(
> colorFn, filterFactory.literal(1),
> filterFactory.literal(0.3), null));
> gr.graphicalSymbols().clear();
> gr.graphicalSymbols().add(mark);
> gr.setSize(filterFactory.literal(size));
> Rule rule = styleFactory.createRule();
> PointSymbolizer sym = styleFactory.createPointSymbolizer(gr, null);
> rule.setName(name);
> rule.symbolizers().add(sym);
> return rule;
> }
> }
>
> If I've understood it right once applied the StreamingRenderer should
> invoke the ColorFunction evaluate(...) method for each point instance but
> looks like it's never call and I'm running out of ideas. Could someone tell
> me what's happening? Maybe am I absolutely wrong about the way this should
> be implemented?
>
> Thanks in advance!
>
> jv
>
------------------------------------------------------------------------------
Simplify data backup and recovery for your virtual environment with vRanger.
Installation's a snap, and flexible recovery options mean your data is safe,
secure and there when you need it. Data protection magic?
Nope - It's vRanger. Get your free trial download today.
http://p.sf.net/sfu/quest-sfdev2dev
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users