Filter encoding functions
This page documents the filter encoding functions supported by deegree 3.
These functions are mainly intended to be used in styling WMS layers, but can be used everywhere in deegree 3 where filter functions are processed (e.g. in WFS GetFeature requests). Find further styling / WMS details on style configuration or mapService configuration on dedicated pages.
1. SE functions
We support all of the functions defined in the OGC Specification on Symbology Encoding SE 1.1.0, section 11.6. Here's an overview, with some extra information on specific issues/limitations with these functions.
1.1. FormatNumber
This function is fully supported.
<FormatNumber xmlns:ogc="http://www.opengis.net/ogc" xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" fallbackValue="">
<NumericValue>
<ogc:PropertyName>app:SHAPE_LEN</ogc:PropertyName>
</NumericValue>
<Pattern>############.00</Pattern>
</FormatNumber>
1.2. FormatDate
This function is fully supported, although not fully tested with all available schema types mentioned in the spec.
<FormatDate xmlns:ogc="http://www.opengis.net/ogc" xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" fallbackValue="">
<DateValue>
<ogc:PropertyName>app:TIMESTAMP</ogc:PropertyName>
</DateValue>
<Pattern>DD</Pattern>
</FormatDate>
1.3. ChangeCase
This function is fully supported.
<ChangeCase xmlns:ogc="http://www.opengis.net/ogc" xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" fallbackValue="" direction="toUpper">
<StringValue>
<ogc:PropertyName>app:text</ogc:PropertyName>
</StringValue>
</ChangeCase>
1.4. Concatenate
This function is fully supported.
<Concatenate xmlns:ogc="http://www.opengis.net/ogc" xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" fallbackValue="">
<StringValue>
<ogc:PropertyName>app:text1</ogc:PropertyName>
</StringValue>
<StringValue>
<ogc:PropertyName>app:text2</ogc:PropertyName>
</StringValue>
<StringValue>
<ogc:PropertyName>app:text3</ogc:PropertyName>
</StringValue>
</Concatenate>
1.5. Trim
This function is fully supported.
<Trim xmlns:ogc="http://www.opengis.net/ogc" xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" fallbackValue="" stripOffPosition="both">
<StringValue>
<ogc:PropertyName>app:text</ogc:PropertyName>
</StringValue>
</Trim>
1.6. StringLength
This function is fully supported.
<StringLength xmlns:ogc="http://www.opengis.net/ogc" xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" fallbackValue="">
<StringValue>
<ogc:PropertyName>app:text</ogc:PropertyName>
</StringValue>
</StringLength>
1.7. Substring
This function is fully supported. Here's an example also using the StringPosition function at the same time:
<Substring xmlns:ogc="http://www.opengis.net/ogc" xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" fallbackValue="">
<StringValue>
<ogc:PropertyName>app:text</ogc:PropertyName>
</StringValue>
<Position>1</Position>
<Length>
<ogc:Sub>
<StringPosition fallbackValue="" searchDirection="frontToBack">
<LookupString>-</LookupString>
<StringValue>
<ogc:PropertyName>app:text</ogc:PropertyName>
</StringValue>
</StringPosition>
<ogc:Literal>1</ogc:Literal>
</ogc:Sub>
</Length>
</Substring>
1.8. StringPosition
This function is fully supported.
<StringPosition xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" fallbackValue="" searchDirection="frontToBack">
<LookupString>-</LookupString>
<StringValue>
<ogc:PropertyName xmlns:ogc="http://www.opengis.net/ogc">app:text</ogc:PropertyName>
</StringValue>
</StringPosition>
1.9. Categorize, Interpolate, Recode
These functions can operate both on alphanumeric properties of features and on raster data. For color values we extended the syntax a bit to allow for an alpha channel: #99ff0000 is a red value with an alpha value of 0x99. This allows the user to create eg. an interpolation from completely transparent to a completely opaque color value. To work on raster data you'll have to replace the PropertyName values with Rasterdata.
For Interpolate only linear interpolation is currently supported.
<Categorize xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc" fallbackValue="#fefdC3">
<LookupValue>
<ogc:PropertyName>app:POP2000</ogc:PropertyName>
</LookupValue>
<Value>#FFE9D8</Value>
<Threshold>1000</Threshold>
<Value>#FBCFAC</Value>
<Threshold>10000</Threshold>
<Value>#FAAC6F</Value>
<Threshold>25000</Threshold>
<Value>#FD913D</Value>
<Threshold>100000</Threshold>
<Value>#FF7000</Value>
</Categorize>
<Interpolate xmlns:ogc="http://www.opengis.net/ogc" xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" fallbackValue="#005C29" method="color">
<LookupValue>
<ogc:PropertyName>app:CODE</ogc:PropertyName>
</LookupValue>
<InterpolationPoint>
<Data>-1</Data>
<Value>#005C29</Value>
</InterpolationPoint>
<InterpolationPoint>
<Data>100</Data>
<Value>#067A3A</Value>
</InterpolationPoint>
<InterpolationPoint>
<Data>300</Data>
<Value>#03A64C</Value>
</InterpolationPoint>
<InterpolationPoint>
<Data>500</Data>
<Value>#00CF5D</Value>
</InterpolationPoint>
<InterpolationPoint>
<Data>1000</Data>
<Value>#ffffff</Value>
</InterpolationPoint>
</Interpolate>
<Recode xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/se" fallbackValue="">
<LookupValue>app:code</LookupValue>
<MapItem>
<Data>1000</Data>
<Value>water</Value>
</MapItem>
<MapItem>
<Data>2000</Data>
<Value>nuclear</Value>
</MapItem>
<MapItem>
<Data>3000</Data>
<Value>solar</Value>
</MapItem>
<MapItem>
<Data>4000</Data>
<Value>wind</Value>
</MapItem>
</Recode>
2. Custom geometry functions
These functions are mostly intended to be used within SLD/SE, but can also be used in WFS query filters or anywhere else where standard filter encoding is used.
2.1. Area
This function calculates the area of a polygon. If multiple geometry nodes are selected, multiple area values are calculated.
<Function xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/ogc" name="Area">
<PropertyName>app:geometry</PropertyName>
</Function>
2.2. Length
This function calculates the length of a linestring/perimeter of a polygon. If multiple geometry nodes are selected, multiple length values are calculated.
<Function xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/ogc" name="Length">
<PropertyName>app:geometry</PropertyName>
</Function>
2.3. Centroid
This function calculates the centroid of a polygon. If multiple geometry nodes are selected, multiple centroids are calculated.
<Function xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/ogc" name="Centroid">
<PropertyName>app:geometry</PropertyName>
</Function>
2.4. InteriorPoint
This function calculates an interior point within a polygon. If multiple geometry nodes are selected, multiple centroids are calculated. Useful to place text on a point within a polygon (centroids may not actually be a point on the polygon).
<Function xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/ogc" name="InteriorPoint">
<PropertyName>app:geometry</PropertyName>
</Function>
2.5. IsPoint, IsCurve, IsSurface
Takes one parameter, which must evaluate to exactly one geometry node.
This function returns true, if the geometry is a point/multipoint, curve/multicurve or surface/multisurface, respectively.
<Function xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/ogc" name="IsCurve">
<PropertyName>app:geometry</PropertyName>
</Function>
2.6. GeometryFromWKT
Useful to create a constant geometry valued expression.
<Function xmlns="http://www.opengis.net/ogc" name="GeometryFromWKT">
<Literal>EPSG:4326</Literal>
<Literal>POINT(0.6 0.7)</Literal>
</Function>
2.7. MoveGeometry
Useful to displace geometries by a certain value in x and/or y direction.
To shift 20 geometry units in y direction:
<Function xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/ogc" name="MoveGeometry">
<PropertyName>app:geometry</PropertyName>
<Literal>0</Literal>
<Literal>20</Literal>
</Function>
3. Other custom functions
3.1. iDiv
Integer division discarding the remainder.
<Function xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/ogc" name="idiv">
<PropertyName>app:count</PropertyName>
<Literal>20</Literal>
</Function>
3.2. iMod
Integer division resulting in the remainder only.
<Function xmlns:app="http://www.deegree.org/app" xmlns="http://www.opengis.net/ogc" name="imod">
<PropertyName>app:count</PropertyName>
<Literal>20</Literal>
</Function>
3.3. ExtraProp
Access extra (hidden) properties attached to feature objects. The availability of such properties depends on the loading/storage mechanism used.
<Function xmlns="http://www.opengis.net/ogc" name="ExtraProp">
<Literal>planArt</Literal>
</Function>
4. General XPath functions
Many useful things can be done by simply using standard XPath 1.0 functions in PropertyName elements.
4.1. Element name
Access the (local) name of an element (e.g. the name of a referenced feature / subfeature).
<PropertyName xmlns:app="http://www.deegree.org/app">app:subfeature/*/local-name()</PropertyName>