From: LSA <ls...@ng...> - 2010-07-12 14:44:20
|
Hi all, I need to have my own custom labeling, which will place label near each feature using information about clusters of features (known to my application). In order to do it, I use my own function expression: /*public class MyExpression extends FunctionExpressionImpl { private Set lineIDs = new HashSet(); public MyExpression() { super("MyExpression"); } @Override public int getArgCount() { return 0; } @Override public Object evaluate(Object objFeature) { SimpleFeature feature = (SimpleFeature)objFeature; Object attr1 = feature.getAttribute("Attr1"); *//* return *//*"*//*Attr1=*//*"+attr1*//*; } }*/ Then I create my text symbolizer: /*MyExpression myExp = new MyExpression(); TextSymbolizer textSym = sf.createTextSymbolizer( sf.createFill(ff.literal(Color.BLACK)), new Font[]{sf.getDefaultFont()}, null, myExp , placement, null);*/ The problem that I run into is about feature passed to evaluate contains only geometry, no attributes at all (except FeatureId). So, /*feature.getAttribute("Attr1") */will always return null. However, in order to display my clustering information I need certain attributes of each feature. Is this possible to do? As a horrible workaround, I pass Map<FeautureId, SimpleFeature> to /*MyExpression*/, and use these attributes. Downsides of this solution are obvious. Also I have another one question: Is it possible to override behaviour of the default labeling in order to show only one label per cluster of features? To what properties should I pay my attention? Are there some examples of creating custom labeling? Any help would be appreciated.... Thanks in advance, Sergey |