Java源码示例:org.geotools.styling.visitor.DuplicatingStyleVisitor
示例1
/**
* Clones the given (Point)Symbolizer.
*
* @param symbolizer symbolizer to clone
* @return cloned Symbolizer
*/
private Symbolizer cloneSymbolizer(Symbolizer symbolizer) {
DuplicatingStyleVisitor duplicator = new DuplicatingStyleVisitor();
symbolizer.accept(duplicator);
return (Symbolizer) duplicator.getCopy();
}
示例2
private void applyOpacity() {
final MapLayer layer = mapContext.getLayer(0);
if (layer != null) {
Style style = layer.getStyle();
DuplicatingStyleVisitor copyStyle = new ApplyingStyleVisitor();
style.accept(copyStyle);
layer.setStyle((Style) copyStyle.getCopy());
}
}
示例3
@Test
public void testFindSymbolizer() {
StyledLayerDescriptor sld = DefaultSymbols.createNewSLD();
NamedLayer namedLayer = DefaultSymbols.createNewNamedLayer();
sld.layers().add(DefaultSymbols.createNewNamedLayer());
sld.layers().add(namedLayer);
String expectedNamedLayer = "namedLayer";
namedLayer.setName(expectedNamedLayer);
Style style = DefaultSymbols.createNewStyle();
String expectedStyleLayer = "style";
style.setName(expectedStyleLayer);
namedLayer.addStyle(DefaultSymbols.createNewStyle());
namedLayer.addStyle(style);
FeatureTypeStyle fts = DefaultSymbols.createNewFeatureTypeStyle();
String expectedFeatureTypeStyleLayer = "feature type style";
fts.setName(expectedFeatureTypeStyleLayer);
style.featureTypeStyles().add(DefaultSymbols.createNewFeatureTypeStyle());
style.featureTypeStyles().add(fts);
Rule rule = DefaultSymbols.createNewRule();
fts.rules().add(DefaultSymbols.createNewRule());
fts.rules().add(rule);
String expectedRule = "rule";
rule.setName(expectedRule);
String expectedSymbolizer = "text symbolizer";
TextSymbolizer symbolizer = DefaultSymbols.createDefaultTextSymbolizer();
symbolizer.setName(expectedSymbolizer);
rule.symbolizers().add(DefaultSymbols.createDefaultPolygonSymbolizer());
rule.symbolizers().add(symbolizer);
StyleFactoryImpl styleFactory = (StyleFactoryImpl) CommonFactoryFinder.getStyleFactory();
FilterFactory ff = CommonFactoryFinder.getFilterFactory();
Font font =
styleFactory.createFont(
ff.literal("abc"),
ff.literal("normal"),
ff.literal("normal"),
ff.literal(10));
symbolizer.setFont(font);
DuplicatingStyleVisitor duplicate = new DuplicatingStyleVisitor();
duplicate.visit(sld);
StyledLayerDescriptor sldCopy = (StyledLayerDescriptor) duplicate.getCopy();
Symbolizer actualSymbolizer = SLDUtils.findSymbolizer(sld, symbolizer, sldCopy);
assertNotNull(actualSymbolizer);
assertEquals(
symbolizer.getLabel().toString(),
((TextSymbolizer) actualSymbolizer).getLabel().toString());
actualSymbolizer = SLDUtils.findSymbolizer(sld, null, sldCopy);
assertNull(actualSymbolizer);
actualSymbolizer = SLDUtils.findSymbolizer(sld, symbolizer, null);
assertNull(actualSymbolizer);
}
示例4
@Test
public void testFindRule() {
StyledLayerDescriptor sld = DefaultSymbols.createNewSLD();
NamedLayer namedLayer = DefaultSymbols.createNewNamedLayer();
sld.layers().add(DefaultSymbols.createNewNamedLayer());
sld.layers().add(namedLayer);
String expectedNamedLayer = "namedLayer";
namedLayer.setName(expectedNamedLayer);
Style style = DefaultSymbols.createNewStyle();
String expectedStyleLayer = "style";
style.setName(expectedStyleLayer);
namedLayer.addStyle(DefaultSymbols.createNewStyle());
namedLayer.addStyle(style);
FeatureTypeStyle fts = DefaultSymbols.createNewFeatureTypeStyle();
String expectedFeatureTypeStyleLayer = "feature type style";
fts.setName(expectedFeatureTypeStyleLayer);
style.featureTypeStyles().add(DefaultSymbols.createNewFeatureTypeStyle());
style.featureTypeStyles().add(fts);
Rule rule = DefaultSymbols.createNewRule();
fts.rules().add(DefaultSymbols.createNewRule());
fts.rules().add(rule);
String expectedRule = "rule";
rule.setName(expectedRule);
String expectedSymbolizer = "text symbolizer";
TextSymbolizer symbolizer = DefaultSymbols.createDefaultTextSymbolizer();
symbolizer.setName(expectedSymbolizer);
rule.symbolizers().add(DefaultSymbols.createDefaultPolygonSymbolizer());
rule.symbolizers().add(symbolizer);
StyleFactoryImpl styleFactory = (StyleFactoryImpl) CommonFactoryFinder.getStyleFactory();
FilterFactory ff = CommonFactoryFinder.getFilterFactory();
Font font =
styleFactory.createFont(
ff.literal("abc"),
ff.literal("normal"),
ff.literal("normal"),
ff.literal(10));
symbolizer.setFont(font);
DuplicatingStyleVisitor duplicate = new DuplicatingStyleVisitor();
duplicate.visit(sld);
StyledLayerDescriptor sldCopy = (StyledLayerDescriptor) duplicate.getCopy();
Rule actualRule = SLDUtils.findRule(sld, rule, sldCopy);
assertNotNull(actualRule);
assertEquals(rule.getName(), actualRule.getName());
actualRule = SLDUtils.findRule(sld, null, sldCopy);
assertNull(actualRule);
actualRule = SLDUtils.findRule(sld, rule, null);
assertNull(actualRule);
}
示例5
@Override
public Layer beforeLayer(final WMSMapContent mapContent, final Layer layer) {
// sanity check the style
if ((layer instanceof FeatureLayer)
&& (layer.getStyle() != null)
&& (layer.getStyle().featureTypeStyles() != null)
&& !layer.getStyle().featureTypeStyles().isEmpty()) {
final Style layerStyle = layer.getStyle();
final FeatureTypeStyle style = layerStyle.featureTypeStyles().get(0);
// check if their is a DistributedRender rendering
// transformation
if ((style instanceof ProcessFunction)
&& (style.getTransformation() != null)
&& (((ProcessFunction) style.getTransformation()).getName() != null)
&& ((ProcessFunction) style.getTransformation()).getName().equals(
DistributedRenderProcess.PROCESS_NAME)) {
// if their is a DistributedRender transformation, we need
// to provide more information that can only be found
final DuplicatingStyleVisitor cloner = new DuplicatingStyleVisitor();
layerStyle.accept(cloner);
layer.getQuery().getHints().put(
DistributedRenderProcess.OPTIONS,
new DistributedRenderOptions(wms, mapContent, layerStyle));
// now that the options with the distributed render style
// have been set the original style will be used with
// distributed rendering
// now, replace the style with a direct raster symbolizer,
// so the GridCoverage result of the distributed rendering
// process is directly rendered to the map in place of the
// original style
final Style directRasterStyle = (Style) cloner.getCopy();
directRasterStyle.featureTypeStyles().clear();
Processors.addProcessFactory(new InternalProcessFactory());
directRasterStyle.featureTypeStyles().add(
getDirectRasterStyle(
layer.getFeatureSource().getSchema().getGeometryDescriptor().getLocalName(),
DistributedRenderProcessUtils.getRenderingProcess()));
((FeatureLayer) layer).setStyle(directRasterStyle);
}
}
return layer;
}