Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [udig-devel] SLD: How to combine different feature attributes for a TextSymbolizer

Looks like there is a String concatenate function you could call as well in order to get what you want ... because of the annoying way the SLD specification is written we need to have each function be unique in name and number of parameters.

So we have the "strConcat" function ... you will need to nest it to get what you want ....

Cheers.
Jody


Hi list,
I want to show a set of feature attributes (all Strings) as one label in the map next to the point/graphic. Like "1; London; 12" (number of item, name and a status). Since the user can toggle check boxes to switch on/off single values I can not store all information in one feature attribute. Instead of this I have n (currently 5) feature attributes for this. This is the way I thought it's the correct one: ---- code ----
// after each attribute except the last one a seperator like ";"
// textAttributes is a List of attributes the user wants to be shown
// Attributes is a enum with all attributes
Expression[] expressions = new Expression[textAttributes.size()*2-1];
      int i = 0;
      for (Attributes a : Attributes.values()){
       if (textAttributes.contains(a)){
// attribute expression for the attribute
Expression attributeExpression = FilterFactoryFinder.createFilterFactory().createAttributeExpression(a.name());
// literal expression for the seperator
LiteralExpression seperator = FilterFactoryFinder.createFilterFactory().createLiteralExpression(";");
        expressions[i++]=attributeExpression;
        if (i<expressions.length){
         expressions[i++]=seperator;
        }
       }
      }
// Filter to concatenate strings
FilterFunction_strConcat concatFunction = new FilterFunction_strConcat();
      concatFunction.setArgs(expressions);
// create TextSymbolizer (fill and font are handled above... not interesting here) myStyleBuilder.createTextSymbolizer(fill, new Font[] {gtFont},null, concatFunction, placement, null));
---- code ----
My first problem was to find a possibility to concatenate strings. Since http://udig.refractions.net/docs/api-geotools/org/geotools/filter/function/FilterFunction_strConcat.html has a very poor javadoc explanation I just guessed that this function is the correct one. What happend? Independet of the number of attributes I want to show (2,3,4,5) only the first attribute combined with the first seperator (";") is drawn. So I got "London;" instead of "London;1;3". If I flip the order of attributes I get "1;" instead of "1;London;3". As I said only the first two expressions (one attribute, one literal) are included. Since these two are included I guess that the FilterFunction_strConcat is the correct way. Can someone help me with this? I debuged it and the expressions array is build correct, has no null elements and all seems ok. Thank you,
tony roth
------------------------------------------------------------------------

_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel



Back to the top