Geoserver SLD文件 根据属性动态渲染式样

项目场景:

项目中使用了Geoserver的发布的wms服务,这种服务无法在前端渲染,只能在服务器指定style,并且需要根据图层属性来进行显示不同颜色,这就需要编写sld文件

两种方式:

第一种是使用ogc:Filter,例子如下

<?xml version="1.0" encoding="UTF8"?>
<StyledLayerDescriptor version="1.0.0" 
    xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 
    xmlns="http://www.opengis.net/sld" 
    xmlns:ogc="http://www.opengis.net/ogc" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <NamedLayer>
    <Name>Attribute-based point</Name>
    <UserStyle>
      <Title>GeoServer SLD Cook Book: Attribute-based point</Title>
      <FeatureTypeStyle>
        <Rule>
          <Name>1</Name>
          <Title>1</Title>
          <ogc:Filter>
            <ogc:PropertyIsLike wildCard="*" singleChar="?" escape="\">
              <ogc:PropertyName>danger_level</ogc:PropertyName>
              <ogc:Literal>重大风险*</ogc:Literal>
            </ogc:PropertyIsLike>
          </ogc:Filter>
          <PointSymbolizer>
            <Graphic>
              <Mark>
                <WellKnownName>circle</WellKnownName>
                <Fill>
                  <CssParameter name="fill">#ff3f3f</CssParameter>
                </Fill>
              </Mark>
              <Size>6</Size>
            </Graphic>
          </PointSymbolizer>
        </Rule>
        <Rule>
          <Name>2</Name>
          <Title>2</Title>
          <ogc:Filter>
              <ogc:PropertyIsLike wildCard="*" singleChar="?" escape="\">
                <ogc:PropertyName>danger_level</ogc:PropertyName>
                <ogc:Literal>较大风险*</ogc:Literal>
              </ogc:PropertyIsLike>
          </ogc:Filter>
          <PointSymbolizer>
            <Graphic>
              <Mark>
                <WellKnownName>circle</WellKnownName>
                <Fill>
                  <CssParameter name="fill">#e7b300</CssParameter>
                </Fill>
              </Mark>
              <Size>6</Size>
            </Graphic>
          </PointSymbolizer>
        </Rule>
        <Rule>
          <Name>4</Name>
          <Title>4</Title>
          <ogc:Filter>
              <ogc:PropertyIsLike wildCard="*" singleChar="?" escape="\">
                <ogc:PropertyName>danger_level</ogc:PropertyName>
                <ogc:Literal>一般风险*</ogc:Literal>
              </ogc:PropertyIsLike>
          </ogc:Filter>
          <PointSymbolizer>
            <Graphic>
              <Mark>
                <WellKnownName>circle</WellKnownName>
                <Fill>
                  <CssParameter name="fill">#0dc48a</CssParameter>
                </Fill>
              </Mark>
              <Size>6</Size>
            </Graphic>
          </PointSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

第二种是使用 <ogc:Function name=“Recode”>,例子如下

<?xml version="1.0" encoding="UTF8"?>
<StyledLayerDescriptor version="1.0.0" 
                       xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 
                       xmlns="http://www.opengis.net/sld" 
                       xmlns:ogc="http://www.opengis.net/ogc" 
                       xmlns:xlink="http://www.w3.org/1999/xlink" 
                       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <NamedLayer>
    <Name>Attribute-based point</Name>
    <UserStyle>
      <Title>GeoServer SLD Cook Book: Attribute-based point</Title>
      <FeatureTypeStyle>
        <Rule>
          <Name>1</Name>
          <Title>1</Title>
          <PointSymbolizer>
            <Graphic>
              <Mark>
                <WellKnownName>circle</WellKnownName>
                <Fill>
                  <CssParameter name="fill">
                    <ogc:Function name="Recode">
                      <!-- Value to transform -->
                      <ogc:Function name="strTrim">
                        <ogc:PropertyName>danger_level</ogc:PropertyName>
                      </ogc:Function>

                      <!-- Map of input to output values -->
                      <ogc:Literal>重大风险</ogc:Literal>
                      <ogc:Literal>#ff3f3f</ogc:Literal>

                      <ogc:Literal>较大风险</ogc:Literal>
                      <ogc:Literal>#e7b300</ogc:Literal>

                      <ogc:Literal>一般风险</ogc:Literal>
                      <ogc:Literal>#0dc48a</ogc:Literal>
                    </ogc:Function>
                  </CssParameter>
                </Fill>
              </Mark>
              <Size>6</Size>
            </Graphic>
          </PointSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>


注意事项:

GeoServer 的Service Response Settings 中的字符集需要和你的sld文件指定的encoding一致,否则会渲染失败

版权声明:本文为u010455546原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。