SLD中的变量替换

SLD中的变量替换是一个地理服务器扩展(从2.0.2版开始),它允许将WMS请求中的值传递到SLD样式中。这允许动态设置颜色、字体、大小和筛选阈值等值。

变量在WMS中指定 GetMap 通过使用 env 请求参数后面跟着一个列表 name:value 用分号分隔的对::

...&env=name1:value1;name2=value2&...

在SLD中,使用 env 功能。函数检索当前请求中指定的替换变量值:

<ogc:Function name="env">
   <ogc:Literal>size</ogc:Literal>
</ogc:Function>

可以提供默认值。如果请求中未指定变量,则将使用它:

<ogc:Function name="env">
   <ogc:Literal>size</ogc:Literal>
   <ogc:Literal>6</ogc:Literal>
</ogc:Function>

这个 env 函数可以在任何允许使用ogc表达式的SLD中使用。例如,它可以用于 CSSParameter 元素、大小和偏移元素以及规则筛选表达式。在某些不允许完整表达式的地方也可以接受,例如 Mark/WellKnownName 元素。

预定义变量

geoserver具有预定义的变量,这些变量提供有关请求输出的特定属性的信息。当SLD参数需要依赖于输出维度时,这些功能非常有用。预定义变量包括:

Name

Type

Description

wms_bbox

ReferencedEnvelope

请求输出的地理参考范围

wms_crs

CoordinateReferenceSystem

输出坐标参考系的定义

wms_srs

String

输出坐标参考系代码

wms_width

Integer

输出图像的宽度(像素)

wms_height

Integer

输出图像的高度(像素)

wms_scale_denominator

Integer

输出地图比例的分母

kmlOutputMode

要么 vector 或者是空的

此变量设置为 vector 当kml生成器将矢量特征作为位置标记而不是地面覆盖时

例子

以下SLD符号已在三个位置参数化,每种情况下都提供默认值:

<PointSymbolizer>
  <Graphic>
    <Mark>
      <WellKnownName><ogc:Function name="env">
            <ogc:Literal>name</ogc:Literal>
            <ogc:Literal>square</ogc:Literal>
         </ogc:Function>
      </WellKnownName>
      <Fill>
        <CssParameter name="fill">
          #<ogc:Function name="env">
            <ogc:Literal>color</ogc:Literal>
            <ogc:Literal>FF0000</ogc:Literal>
         </ogc:Function>
        </CssParameter>
      </Fill>
    </Mark>
    <Size>
       <ogc:Function name="env">
          <ogc:Literal>size</ogc:Literal>
          <ogc:Literal>6</ogc:Literal>
       </ogc:Function>
    </Size>
  </Graphic>
</PointSymbolizer>

Download the full SLD style

当WMS请求中没有提供变量时,SLD使用默认值并呈现示例 sf:bugsites 数据集如图所示:

../../../_images/default.png

默认呈现

如果更改请求以指定以下变量值:

&env=color:00FF00;name:triangle;size:12

结果是:

../../../_images/triangles.png

使用提供的变量呈现