Styles LegendsΒΆ
In WMTS and WMS services capabilities documents, styles can be associated with a <LegendURL> element that allows clients to retrieve an image representing the style legend. In the following example we can see the <LegendURL> element for rain style (WMS 1.1.0):
<Style>
<Name>rain</Name>
<LegendURL width="128" height="123">
<Format>image/png</Format>
<OnlineResource xlink:type="simple" xlink:href="http://localhost:8080/geoserver/ows?service=WMS&request=GetLegendGraphic&format=image/png&width=128&height=123&layer=topp:states&style=rain"/>
</LegendURL>
</Style>
When using GeoWebCache integration with GeoServer, styles legends are automatically configured for GeoServer layers. Layers configured using a WMS capabilities document will also have their styles legends automatically configured.
When configuring a layer using the REST interface or through geowebcache.xml configuration file the user needs to configure the styles legends, otherwise no <LegendURL> elements will be included in WMS and WMTS services capabilities documents.
Both REST interface and geowebcache.xml configuration file use the same XML structure. A legend configuration is associated with a certain style in the context of a certain layer, follows a configuration example:
<wmsLayer>
<name>topp:states</name>
<parameterFilters>
<stringParameterFilter>
<key>STYLES</key>
<defaultValue>population</defaultValue>
<values>
<string>population</string>
<string>polygon</string>
<string>pophatch</string>
</values>
</stringParameterFilter>
</parameterFilters>
<wmsUrl>
<string>http://localhost:8080/geoserver/topp/wms</string>
</wmsUrl>
<legends defaultWidth="20" defaultHeight="20" defaultFormat="image/png">
<legend style="population"/>
<legend style="pophatch">
<format>image/jpeg</format>
<url>http://localhost:8020/geowebcache/wms</url>
</legend>
<legend style="polygon">
<width>50</width>
<height>100</height>
<format>image/gif</format>
<completeUrl>http://localhost/polygon.gif</completeUrl>
<minScale>5000</minScale>
<maxScale>10000</maxScale>
</legend>
</legends>
</wmsLayer>
The following properties can be used to configure a legend info:
Property |
Description |
|---|---|
style |
the style to which this legend belongs |
width |
the width of the legend image |
height |
the height of the legend image |
format |
the image format of the legend image |
url |
the URL that can be used to retrieve the legend image |
minScale |
minimum scale denominator (inclusive) for which this legend image is valid (WMTS only) |
maxScale |
maximum scale denominator (exclusive) for which this legend image is valid (WMTS only) |
This properties can be provided in several ways using <legends> and <legend> elements. Default values for properties width, height and format can be configured using respectively attributes defaultWidth, defaultHeight and defaultFormat of <legends> element. The default values can be overridden using elements width, height and format inside <legend> elements.
The style property value needs to be provided using style attribute of <legend> elements. The url property is a little more complex, if nothing is say the WMS layer base URL will be used to build a WMS GetLegendGraphic request. Element <url> can be used to provide another base URL, and this one will be used instead of the layer base URL. Element <completeUrl> can be used to provide an URL that should be used as is to retrieve the legend image.
Properties minScale and maxScale can be provided using the <legend> element, this properties will only be used by WMTS service.
Looking at the example above, the legend configured for population style will produce the following legend URL for WMTS:
<LegendURL width="20" height="20" format="image/png"
xlink:href="http://localhost:8080/geoserver/topp/wms?service=WMS&request=GetLegendGraphic&format=image/png&width=20&height=20&layer=topp%3Astates&style=population"/>
Note that the layer base URL was used as the base URL for the legend URL. In the example above a different base URL is provided for the legend associated with style pophatch using the <url> element. The produced legend URL will look like this for WMTS:
<LegendURL width="20" height="20" format="image/png"
xlink:href="http://localhost:8020/geowebcache/wms?service=WMS&request=GetLegendGraphic&format=image/jpeg&width=20&height=20&layer=topp%3Astates&style=pophatch"/>
In some situations it may be useful to provide an already complete URL to the legend image (custom vendors parameters, a static image or different protocol). In the example above the legend URL for style polygon will use an already complete URL and will look like this for WMTS:
<LegendURL width="50" height="100" minScaleDenominator="5000" maxScaleDenominator="10000"
format="image/gif" xlink:href="http://localhost/polygon.gif"/>
In WMS the legend URL element for polygon style will look like this:
<LegendURL width="50" height="100">
<Format>image/gif</Format>
<OnlineResource xlink:type="simple" xlink:href="http://localhost/polygon.gif"/>
</LegendURL>
WMS and WMTS legend URL elements have a different structure and different mandatory elements. In WMTS only properties format and url are mandatory. In WMS properties width, height, format and url are mandatory.