package org.geotools.demo.style;
import java.awt.Color;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.factory.GeoTools;
import org.geotools.styling.ExternalGraphic;
import org.geotools.styling.FeatureTypeConstraint;
import org.geotools.styling.FeatureTypeStyle;
import org.geotools.styling.Fill;
import org.geotools.styling.PointSymbolizer;
import org.geotools.styling.PolygonSymbolizer;
import org.geotools.styling.Rule;
import org.geotools.styling.Stroke;
import org.geotools.styling.Style;
import org.geotools.styling.StyleBuilder;
import org.geotools.styling.StyleFactory;
import org.geotools.styling.StyledLayerDescriptor;
import org.geotools.styling.UserLayer;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory;
import org.opengis.style.Graphic;
/**
* The following style snippets are used to keep the wiki honest.
* <p>
* To view the context for these examples: http://docs.codehaus.org/display/GEOTDOC/04+Styling
*
*
* @source $URL$
*/
public class StyleSnippets {
public void styleLayerDescriptor() {
StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory(null);
StyledLayerDescriptor sld = styleFactory.createStyledLayerDescriptor();
sld.setName("example");
sld.setAbstract("Example Style Layer Descriptor");
{
UserLayer layer = styleFactory.createUserLayer();
layer.setName("layer");
{
FeatureTypeConstraint constraint = styleFactory.createFeatureTypeConstraint(
"Feature", Filter.INCLUDE, null);
layer.layerFeatureConstraints().add(constraint);
}
{
Style style = styleFactory.createStyle();
style.getDescription().setTitle("Style");
style.getDescription().setAbstract( "Definition of Style" );
// define feature type styles used to actually
// define how features are rendered
//
layer.userStyles().add(style);
}
sld.layers().add(layer);
}
}
/**
* This snippet illustrates creating a feature type style that uses
* an external graphic
*/
public void externalGraphicStyle(){
StyleBuilder styleBuilder = new StyleBuilder();
Style style = styleBuilder.createStyle();
{
{ PointSymbolizer pointSymbolizer = styleBuilder.createPointSymbolizer();
{ Graphic graphic = styleBuilder.createGraphic();
ExternalGraphic external = styleBuilder.createExternalGraphic( "file:///C:/images/house.gif", "image/gif");
graphic.graphicalSymbols().add( external );
graphic.graphicalSymbols().add( styleBuilder.createMark("circle"));
pointSymbolizer.setGraphic(graphic);
}
Rule rule = styleBuilder.createRule(pointSymbolizer);
FeatureTypeStyle featureTypeStyle = styleBuilder.createFeatureTypeStyle("Feature", rule );
style.featureTypeStyles().add( featureTypeStyle );
}
}
}
/**
* This snippet illustrates creating a feature type style with different
* color fills based on the feature's data.
*/
public void fillFromFeatureAttribute() {
StyleBuilder styleBuilder = new StyleBuilder();
Style style = styleBuilder.createStyle();
/*
* Assume that we are working with a feature type that has
* an attribute PERCENT with integer values between 0 and 100
*/
final String typeName = "pretend"; // feature type name
final String attrName = "PERCENT"; // data attribute name
// breaks for PERCENT value ranges
final int[] breaks = {10, 25, 50, 75, 100};
// corresponding fill colors
final Color[] colors = {
Color.BLUE,
Color.GREEN,
Color.YELLOW,
Color.ORANGE,
Color.RED
};
FilterFactory ff = CommonFactoryFinder.getFilterFactory(GeoTools.getDefaultHints());
Rule[] rules = new Rule[breaks.length];
for (int i = 0; i < breaks.length; i++) {
// create a fill for this value range
Fill fill = styleBuilder.createFill(colors[i], 0.5d); // partially transparent
// create the polygon outline stroke
Stroke stroke = styleBuilder.createStroke(colors[i], 1.0d); // line width 1.0
// create the symbolizer
PolygonSymbolizer symbolizer = styleBuilder.createPolygonSymbolizer(stroke, fill);
// create a rule and set the condition (value range) for which features
// it will apply to
Rule rule = styleBuilder.createRule(symbolizer);
Filter filter = ff.lessOrEqual(ff.property(attrName), ff.literal(breaks[i]));
rule.setFilter(filter);
// if this is not the first rule it is an 'else' rule
rule.setIsElseFilter(i > 0);
rules[i] = rule;
}
// package our rules as a feature type style
FeatureTypeStyle fts = styleBuilder.createFeatureTypeStyle(typeName, rules);
// package that in our Style and we're ready to render !
style.featureTypeStyles().add(fts);
}
}