利用geotools生成点线面和注记的sld样式(二)
接上一部分,我们可以用Filter来区分多个Rule,SLD除了可以设置要素厚度和颜色外,还可以用圆形、方形、自定义的图片图形或文字等设置Point,LineString可以渲染成各种线条等,Polygon可以填充自定义的平铺图像,将要素渲染成不同的风格。
- 注记显示
TextSymolizer注记符号可以和PolygonSymbolizer、LineSymbolizer、PointSymbolizer在同一Rule下,下面是一个注记SLD:
<?xml version="1.0" encoding="UTF-8"?>
<sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld"
xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc"
version="1.0.0">
<sld:UserLayer>
<sld:LayerFeatureConstraints>
<sld:FeatureTypeConstraint/>
</sld:LayerFeatureConstraints>
<sld:UserStyle>
<sld:Name>vf</sld:Name>
<sld:FeatureTypeStyle>
<sld:Name>name</sld:Name>
<sld:Rule>
<sld:Name>rule 1</sld:Name>
<sld:LineSymbolizer>
<sld:Geometry>
<ogc:PropertyName>the_geom</ogc:PropertyName>
</sld:Geometry>
<sld:Stroke>
<sld:CssParameter name="stroke">#00FF00</sld:CssParameter>
<sld:CssParameter name="stroke-width">2.0</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
<sld:TextSymbolizer>
<sld:Geometry>
<ogc:Function name="centroid">
<ogc:PropertyName>the_geom</ogc:PropertyName>
</ogc:Function>
</sld:Geometry>
<sld:Label>中国</sld:Label>
<sld:Font>
<sld:CssParameter name="font-family">宋体</sld:CssParameter>
<sld:CssParameter name="font-size">22</sld:CssParameter>
<sld:CssParameter name="font-style">Regular</sld:CssParameter>
<sld:CssParameter name="font-weight">normal</sld:CssParameter>
</sld:Font>
<sld:LabelPlacement>
<sld:PointPlacement>
<sld:AnchorPoint>
<sld:AnchorPointX>0.0</sld:AnchorPointX>
<sld:AnchorPointY>0.0</sld:AnchorPointY>
</sld:AnchorPoint>
<sld:Displacement>
<sld:DisplacementX>0.0</sld:DisplacementX>
<sld:DisplacementY>0.0</sld:DisplacementY>
</sld:Displacement>
<sld:Rotation>-45</sld:Rotation>
</sld:PointPlacement>
</sld:LabelPlacement>
<sld:Halo>
<sld:Radius>5</sld:Radius>
<sld:Fill>
<sld:CssParameter name="fill">#F0F408</sld:CssParameter>
</sld:Fill>
</sld:Halo>
<sld:Fill>
<sld:CssParameter name="fill">#0551F5</sld:CssParameter>
</sld:Fill>
</sld:TextSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:UserLayer>
</sld:StyledLayerDescriptor>
sf是StyleFactory实例,ff是FilterFactory2 实例,我们以LineString为例创建样式。
首先创建TextSymbolizer:
TextSymbolizer textSymbolizer = sf.createTextSymbolizer();
设置字体样式:
Fill textFill = sf.createFill(ff.literal(Color.decode("#0551F5")),ff.literal(0.5)); //颜色 不透明度
Font font = sf.createFont(ff.literal("宋体"),ff.literal("Regular"),ff.literal("normal"),ff.literal(22));
字体边缘:
Halo halo = sf.createHalo(sf.createFill(ff.literal(Color.decode("#F0F408"))),ff.literal(5));
注记文字可以设置字段属性和固定文本:
Expression exp = ff.literal("中国"); //显示固定文本
// Expression exp = ff.property("Name"); //Name字段
设置注记锚点、偏移和旋转:
AnchorPoint anchorPoint = sf.createAnchorPoint(ff.literal(0.0),ff.literal(0.0));
Displacement displacement = sf.createDisplacement(ff.literal(0.0),ff.literal(0.0));
Expression rotation = ff.literal(-45); //旋转-45度
LabelPlacement placement = sf.createPointPlacement(anchorPoint,displacement,rotation); //这里没用sf.createLinePlacement(...)
将信息加入textSymbolizer:
textSymbolizer.setFont(font);
textSymbolizer.setFill(textFill);
textSymbolizer.setLabel(exp);
textSymbolizer.setHalo(halo);
textSymbolizer.setLabelPlacement(placement);
最后将textSymbolizer添加到Rule:
rule.symbolizers().add(textSymbolizer); //规则rule
- WMS预览:
另外,还可以有分级显示等其他与注记美观的设置。所有上述代码,很轻松就可以实现各种形式的SLD样式,只要定义一种前台传来JSON格式,后台就可以实现样式的生成,web端图层样式设置就方便很多。
转载自:https://blog.csdn.net/aliasone/article/details/79879751