Markers sized by an attribute value

The following produces square markers at each point, but these are sized such that the area of each marker is proportional to the REPORTS attribute. When zoomed in (when there are less points in view) the size of the markers is doubled to make the smaller points more noticeable.

* {
  mark: symbol(square);

[@scale > 1000000] :mark {
  size: [sqrt(REPORTS)];

/* So that single-report points can be more easily seen */
[@scale < 1000000] :mark {
  size: [sqrt(REPORTS)*2];

This example uses the sqrt function. There are many functions available for use in CSS and SLD. For more details read - Filter Function Reference

Specifying a geometry attribute

In some cases, typically when using a database table with multiple geometry columns, it’s necessary to specify which geometry to use. For example, let’s suppose you have a table containing routes start and end both containing point geometries. The following CSS will style the start with a triangle mark, and the end with a square.

* {
    geometry: [start],          [end];
    mark:     symbol(triangle), symbol(square);

Generating a geometry (Geometry Transformations)

Taking the previous example a bit further, we can also perform computations on-the-fly to generate the geometries that will be drawn. Any operation that is available for GeoServer Geometry transformations in SLD is also available in CSS styles. To use them, we simply provide a more complex expression in the geometry property. For example, we could mark the start and end points of all the paths in a line layer (you can test this example out with any line layer, such as the sf:streams layer that is included in GeoServer’s default data directory.)

* {
    geometry: [startPoint(the_geom)], [endPoint(the_geom)];
    mark:     symbol(triangle),       symbol(square);

Rendering different geometry types (lines/points) with a single style

As one more riff on the geometry examples, we’ll show how to render both the original line and the start/endpoints in a single style. This is accomplished by using stroke-geometry and mark-geometry to specify that different geometry expressions should be used for symbols compared with strokes.

* {
    stroke-geometry: [the_geom];
    stroke:          blue;
    mark-geometry: [startPoint(the_geom)], [endPoint(the_geom)];
    mark:          symbol(triangle),       symbol(square);
Previous: KML