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>
举报

© 著作权归作者所有


0