Using transformation functions

The transformation functions supported described in SLD and described in the equivalent SLD chapter are also available in CSS, the following shows examples of how they can be used.

Recode

The Recode filter function transforms a set of discrete values for an attribute into another set of values, by applying a (input, output) mapping onto the values of the variable/expression that is provided as the first input of the function.

Consider a chloropleth map of the US states dataset using the fill color to indicate the topographic regions for the states. The dataset has an attribute SUB_REGION containing the region code for each state. The Recode function is used to map each region code into a different color.

Note

It is to be noted that the following example specifies colors as hex string as opposed to native CSS color names, this is because the function syntax is expressed in CQL, which does not have support for native CSS color names.

* {
  fill: [recode(strTrim(SUB_REGION),
         'N Eng', '#6495ED',
         'Mid Atl', '#B0C4DE',
         'S Atl', '#00FFFF',
         'E N Cen', '#9ACD32',
         'E S Cen', '#00FA9A',
         'W N Cen', '#FFF8DC',
         'W S Cen', '#F5DEB3',
         'Mtn', '#F4A460',
         'Pacific', '#87CEEB')];
  stroke: lightgrey;
  label: [STATE_ABBR];
  font-family: 'Arial';
  font-fill: black;
  label-anchor: 0.5 0.5;
}
../../../_images/recode_usa_region1.png

Categorize

The Categorize filter function transforms a continuous-valued attribute into a set of discrete values by assiging ranges of values and turning them into a color, size, width, opacity, etc.

In the following example a coropleth map is build associating a color to the state population density in the ranges [ <= 20], [20 - 100], and [ > 100].

* {
  fill: [categorize(
         PERSONS / LAND_KM,
         '#87CEEB',
         20,
         '#FFFACD',
         100,
         '#F08080')];
  stroke : lightgrey;
  label: [STATE_ABBR];
  font-family: 'Arial';
  font-fill: black;
  label-anchor: 0.5 0.5;
}
../../../_images/categorize_usa_popdensity1.png

Interpolate

The Interpolate filter function transforms a continuous-valued attribute into another continuous range of values by applying piecewise interpolation.

The result will work for numeric values such as size, width, opacity when operating in numeric interpolation method (the default), and for colors when working in color mode.

The type of curve fitting the specified points can be either linear (the default), cubic or cosine, these values are known as the interpolation mode.

Both the interpolation method and mode are optional, and if provided, they are added at the end of the input list.

In the following example the state population is mapped to a continuous color scale in a rather compact way using the interpolate function:

* {
  fill: [Interpolate(
         PERSONS,
         0, '#FEFEEE',
         9000000, '#00FF00',
         23000000, '#FF0000',
         'color',
         'linear')];
  stroke : lightgrey;
  label: [STATE_ABBR];
  font-family: 'Arial';
  font-fill: black;
  label-anchor: 0.5 0.5;
}
../../../_images/interpolate_usa_pop1.png