GeoServer使用动态规则样式
GeoServer并不能兼容QGis的所有样式;例如,从QGis导出的 sld 文件样式并不会包含类似如下这种基于规则的样式:
CASE
WHEN @map_scale > 500000 THEN 8
WHEN @map_scale BETWEEN 250000 AND 500000 THEN 16
WHEN @map_scale BETWEEN 100000 AND 250000 THEN 32
WHEN @map_scale BETWEEN 50000 AND 100000 THEN 64
WHEN @map_scale BETWEEN 25000 AND 50000 THEN 128
WHEN @map_scale BETWEEN 10000 AND 25000 THEN 256
WHEN @map_scale BETWEEN 5000 AND 10000 THEN 512
WHEN @map_scale BETWEEN 1000 AND 5000 THEN 1024
WHEN @map_scale BETWEEN 1 AND 1000 THEN 2048
ELSE 2018
END
因此要在GeoServer中手动修改 sld 样式文件,以实现不同规则下的样式定义,具体如下:
<UserStyle>
<!-- 规则集容器 -->
<se:FeatureTypeStyle>
<!-- 1.0> 图层元素样式规则 ------------------------------------------------------------------ -->
<se:Rule>
<se:Name>Single symbol</se:Name>
<!-- 多边形样式 -->
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#08306b</se:SvgParameter>
<se:SvgParameter name="fill-opacity">0</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#232323</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
<!-- 2.0> 动态规则 ------------------------------------------------------------------------- -->
<se:Rule>
<!-- 定义此规则生效的比例尺范围(可以只定义最小或最大比例尺) -->
<se:MinScaleDenominator>100000</se:MinScaleDenominator>
<se:MaxScaleDenominator>200000</se:MaxScaleDenominator>
<!-- 文本样式 -->
<se:TextSymbolizer>
<!-- 样式生效的字段属性 -->
<se:Label>
<ogc:PropertyName>code</ogc:PropertyName>
</se:Label>
<!-- 定义字体 -->
<se:Font>
<se:SvgParameter name="font-family">Open Sans</se:SvgParameter>
<se:SvgParameter name="font-size">20</se:SvgParameter>
</se:Font>
<!-- 定位控制 -->
<se:LabelPlacement>
<se:PointPlacement>
<!-- 锚点:0.5表示文本的默认位置在元素中心 -->
<se:AnchorPoint>
<se:AnchorPointX>0.5</se:AnchorPointX>
<se:AnchorPointY>0.5</se:AnchorPointY>
</se:AnchorPoint>
<!-- 位置偏移量 -->
<se:Displacement>
<se:DisplacementX>0</se:DisplacementX>
<se:DisplacementY>-120</se:DisplacementY>
</se:Displacement>
</se:PointPlacement>
</se:LabelPlacement>
<!-- 填充颜色 -->
<se:Fill>
<se:SvgParameter name="fill">#323232</se:SvgParameter>
</se:Fill>
<!-- 避让优先级:越大越优先显示 -->
<se:Priority>1000</se:Priority>
</se:TextSymbolizer>
</se:Rule>
<!-- 3.0> 其它动态规则 ------------------------------------------------------------------------- -->
<!-- 定义更多比例尺下的样式 -->
<se:Rule>
// ....
</se:Rule>
</se:FeatureTypeStyle>
</UserStyle>