3.10.1. PointSymbolizer
The point symbolizer draws a given image at a point position. When given a line or polygon as input the shape will be put at the middle of the line or center of the polygon.
If no image file is specified a small square is used as the default point image.
For putting symbols along a line or the edge of a polygon the MarkerSymbolizer is usually a better choice.
Attribute | Type | Default | Description |
---|---|---|---|
file path |
none |
||
string |
none |
name of a <FileSource> to find the input file in |
|
bool |
false |
allow to paint over previous symbolizers output |
|
float |
1.0 |
||
string |
cetroid |
Wehter to place on a polygons centroid, which can actually be outside, or its interior |
|
|
bool |
false |
|
SVG transform |
identity |
||
|
Compositing |
src-over |
file
attribute
file
refers to a SVG or PNG file to include as a symbol at the point position.
The file can be given as a constant string, or as an expression, so files to display can be dynamically chosen from layer data.
By default file
paths are either absolute or relative to the directory the main style file is in, but different directory paths can be set up using the <FileSource>
tag and referenced by its name
using the base
attribute.
<?xml version="1.0" encoding="utf-8"?>
<Map background-color="white">
<FileSource name="symbols">./symbols</FileSource>
<Style name="style">
<Rule>
<PointSymbolizer allow-overlap="true" base="symbols" file="[file]"/>
<TextSymbolizer face-name="DejaVu Sans Book" allow-overlap="true" dy="20">[file]</TextSymbolizer>
</Rule>
</Style>
<Layer name="layer">
<StyleName>style</StyleName>
<Datasource>
<Parameter name="type">csv</Parameter>
<Parameter name="inline">
wkt,file
"POINT(1 0)","dot.svg"
"POINT(2 0)","bug.svg"
</Parameter>
</Datasource>
</Layer>
</Map>
opacity
attribute
The opacity
attribute defines how opaque or transparant a point symbol should be rendered. The value range is from 0.0
for completely transparent to 1.0
for completely opaque.
<?xml version="1.0" encoding="utf-8"?>
<Map background-color="white">
<FileSource name="symbols">./symbols</FileSource>
<Style name="style">
<Rule>
<PointSymbolizer base="symbols" file="dot.svg" opacity="[opacity]"/>
<TextSymbolizer face-name="DejaVu Sans Book" allow-overlap="true" dy="20">[opacity]</TextSymbolizer>
</Rule>
</Style>
<Layer name="layer">
<StyleName>style</StyleName>
<Datasource>
<Parameter name="type">csv</Parameter>
<Parameter name="inline">
opacity,wkt
0.0,"POINT( 0 0)"
0.1,"POINT( 1 0)"
0.2,"POINT( 2 0)"
0.3,"POINT( 3 0)"
0.4,"POINT( 4 0)"
0.5,"POINT( 5 0)"
0.6,"POINT( 6 0)"
0.7,"POINT( 7 0)"
0.8,"POINT( 8 0)"
0.9,"POINT( 9 0)"
1.0,"POINT(10 0)"
</Parameter>
</Datasource>
</Layer>
</Map>
base
attribute
The base
attribute defines which <FileSource>
should be used as the base directory for a file
symbol.
Note
|
The base attribute only accepts constant strings, no expressions.
So it can only be chosen dynamically by using <Rule> /<Filter> constructs.
|
<?xml version="1.0" encoding="utf-8"?>
<Map background-color="white">
<FileSource name="default">./symbols</FileSource>
<FileSource name="red">./symbols/red</FileSource>
<FileSource name="green">./symbols/green</FileSource>
<FileSource name="blue">./symbols/blue</FileSource>
<Style name="style">
<Rule>
<Filter>[base] = "red"</Filter>
<PointSymbolizer allow-overlap="true" file="bug.svg" base="red"/>
</Rule>
<Rule>
<Filter>[base] = "blue"</Filter>
<PointSymbolizer allow-overlap="true" file="bug.svg" base="blue"/>
</Rule>
<Rule>
<Filter>[base] = "green"</Filter>
<PointSymbolizer allow-overlap="true" file="bug.svg" base="green"/>
</Rule>
<Rule>
<AlsoFilter />
<TextSymbolizer face-name="DejaVu Sans Book" allow-overlap="true" dy="20">[base]</TextSymbolizer>
</Rule>
<Rule>
<ElseFilter />
<PointSymbolizer allow-overlap="true" file="bug.svg" base="default"/>
<TextSymbolizer face-name="DejaVu Sans Book" allow-overlap="true" dy="20" fill="red">"FileSource for base '"+[base]+"' not found"</TextSymbolizer>
</Rule>
</Style>
<Layer name="layer">
<StyleName>style</StyleName>
<Datasource>
<Parameter name="type">csv</Parameter>
<Parameter name="inline">
wkt,base
"POINT(0 0)","red"
"POINT(1 0)","blue"
"POINT(2 0)","green"
"POINT(4 0)","foobar"
</Parameter>
</Datasource>
</Layer>
</Map>
allow-overlap
attribute
The allow-overlap
defines whether a point symbolizer may be drawn over previous output.
<?xml version="1.0" encoding="utf-8"?>
<Map background-color="white">
<FileSource name="symbols">./symbols</FileSource>
<Style name="style">
<Rule>
<PolygonSymbolizer/>
<TextSymbolizer face-name="DejaVu Sans Book">[caption]</TextSymbolizer>
<PointSymbolizer allow-overlap="[allow-overlap]" base="symbols" opacity="0.3" file="bug.svg"/>
<TextSymbolizer face-name="DejaVu Sans Book" allow-overlap="true" dy="20">[allow-overlap]</TextSymbolizer>
</Rule>
</Style>
<Layer name="layer">
<StyleName>style</StyleName>
<Datasource>
<Parameter name="type">csv</Parameter>
<Parameter name="inline">
wkt,allow-overlap,caption
"POINT(0 0)",true,overlap
"POINT(1 0)",false,overlap
"POINT(3 0.2)",true,
"POINT(3.1 0)",true,
"POINT(4 0.2)",true,
"POINT(4.1 0)",false,
</Parameter>
</Datasource>
</Layer>
</Map>
placement
attribute
The placement
attribute specifies where the point symbol should
be placed on a polygon object. By default it is placed on the centroid
of the polygons, but for a non-convex polygon this can actually place the symbol outside of the polygon itself. interior
makes sure that the symbol is placed within the polygon in all cases.
<?xml version="1.0" encoding="utf-8"?>
<Map background-color="white">
<FileSource name="symbols">./symbols</FileSource>
<Style name="style">
<Rule>
<PolygonSymbolizer/>
<PointSymbolizer allow-overlap="true" placement="[placement]" base="symbols" file="bug.svg"/>
<TextSymbolizer face-name="DejaVu Sans Book" allow-overlap="true" dy="50">[placement]</TextSymbolizer>
</Rule>
</Style>
<Layer name="layer">
<StyleName>style</StyleName>
<Datasource>
<Parameter name="type">csv</Parameter>
<Parameter name="inline">
wkt,placement
"POLYGON(( 1 1, 6 1, 6 5, 5 5, 5 2, 2 2, 2 5, 1 5, 1 1))",interior
"POLYGON((11 1,16 1,16 5,15 5,15 2,12 2,12 5,11 5,11 1))",centroid
</Parameter>
</Datasource>
</Layer>
</Map>
transform
attribute
TODO: document SVG transformations
<?xml version="1.0" encoding="utf-8"?>
<Map background-color="white">
<FileSource name="symbols">./symbols</FileSource>
<Style name="style">
<Rule>
<PointSymbolizer base="symbols" file="bug.svg" transform="scale([scale])"/>
<TextSymbolizer face-name="DejaVu Sans Book" allow-overlap="true" dy="40">[scale]+"x"</TextSymbolizer>
</Rule>
</Style>
<Layer name="layer">
<StyleName>style</StyleName>
<Datasource>
<Parameter name="type">csv</Parameter>
<Parameter name="inline">
scale,wkt
0.5,"POINT( 0 0)"
1,"POINT( 1 0)"
2,"POINT( 2 0)"
</Parameter>
</Datasource>
</Layer>
</Map>
<?xml version="1.0" encoding="utf-8"?>
<Map background-color="white">
<FileSource name="symbols">./symbols</FileSource>
<Style name="style">
<Rule>
<PointSymbolizer base="symbols" file="bug.svg" transform="rotate([rotate])"/>
<TextSymbolizer face-name="DejaVu Sans Book" allow-overlap="true" dy="20">[rotate]+"°"</TextSymbolizer>
</Rule>
</Style>
<Layer name="layer">
<StyleName>style</StyleName>
<Datasource>
<Parameter name="type">csv</Parameter>
<Parameter name="inline">
rotate,wkt
0,"POINT( 0 0)"
45,"POINT( 1 0)"
90,"POINT( 2 0)"
180,"POINT( 3 0)"
270,"POINT( 4 0)"
</Parameter>
</Datasource>
</Layer>
</Map>
comp-up
attribute
TODO: document SVG compositing
TODO