OpenGIS Symbology Encoding Implementation Specification
OpenGIS Symbology Encoding Implementation Specification
Date: 2006-07-21
Permission is hereby granted by the Open Geospatial Consortium, ("Licensor"), free of charge and subject to the terms set forth below,
to any person obtaining a copy of this Intellectual Property and any associated documentation, to deal in the Intellectual Property
without restriction (except as set forth below), including without limitation the rights to implement, use, copy, modify, merge, publish,
distribute, and/or sublicense copies of the Intellectual Property, and to permit persons to whom the Intellectual Property is furnished to
do so, provided that all copyright notices on the intellectual property are retained intact and that each person to whom the Intellectual
Property is furnished agrees to the terms of this Agreement.
If you modify the Intellectual Property, all copies of the modified Intellectual Property must include, in addition to the above
copyright notice, a notice that the Intellectual Property includes modifications that have not been approved or adopted by LICENSOR.
THIS LICENSE IS A COPYRIGHT LICENSE ONLY, AND DOES NOT CONVEY ANY RIGHTS UNDER ANY PATENTS
THAT MAY BE IN FORCE ANYWHERE IN THE WORLD.
THE INTELLECTUAL PROPERTY IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE COPYRIGHT HOLDER OR HOLDERS INCLUDED
IN THIS NOTICE DO NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE INTELLECTUAL PROPERTY WILL
MEET YOUR REQUIREMENTS OR THAT THE OPERATION OF THE INTELLECTUAL PROPERTY WILL BE
UNINTERRUPTED OR ERROR FREE. ANY USE OF THE INTELLECTUAL PROPERTY SHALL BE MADE ENTIRELY AT
THE USER’S OWN RISK. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ANY CONTRIBUTOR OF
INTELLECTUAL PROPERTY RIGHTS TO THE INTELLECTUAL PROPERTY BE LIABLE FOR ANY CLAIM, OR ANY
DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
FROM ANY ALLEGED INFRINGEMENT OR ANY LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
CONTRACT, NEGLIGENCE OR UNDER ANY OTHER LEGAL THEORY, ARISING OUT OF OR IN CONNECTION WITH
THE IMPLEMENTATION, USE, COMMERCIALIZATION OR PERFORMANCE OF THIS INTELLECTUAL PROPERTY.
This license is effective until terminated. You may terminate it at any time by destroying the Intellectual Property together with all
copies in any form. The license will also terminate if you fail to comply with any term or condition of this Agreement. Except as
provided in the following sentence, no such termination of this license shall require the termination of any third party end-user
sublicense to the Intellectual Property which is in force as of the date of notice of such termination. In addition, should the Intellectual
Property, or the operation of the Intellectual Property, infringe, or in LICENSOR’s sole opinion be likely to infringe, any patent,
copyright, trademark or other right of a third party, you agree that LICENSOR, in its sole discretion, may terminate this license
without any compensation or liability to you, your licensees or any other party. You agree upon termination of any kind to destroy or
cause to be destroyed the Intellectual Property together with all copies in any form, whether held by you or by any third party.
Except as contained in this notice, the name of LICENSOR or of any other holder of a copyright in all or part of the Intellectual
Property shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Intellectual Property without
prior written authorization of LICENSOR or such copyright holder. LICENSOR is and shall at all times be the sole entity that may
authorize you or any third party to use certification marks, trademarks or other special designations to indicate compliance with any
LICENSOR standards or specifications.
This Agreement is governed by the laws of the Commonwealth of Massachusetts. The application to this Agreement of the United
Nations Convention on Contracts for the International Sale of Goods is hereby expressly excluded. In the event any provision of this
Agreement shall be deemed unenforceable, void or invalid, such provision shall be modified so as to make it valid and enforceable,
and as so modified the entire Agreement shall remain in full force and effect. No decision, action or inaction by LICENSOR shall be
construed to be a waiver of any rights or remedies available to it.
None of the Intellectual Property or underlying information or technology may be downloaded or otherwise exported or reexported in
violation of U.S. export laws and regulations. In addition, you are responsible for complying with any local laws in your jurisdiction
which may impact your right to import, export or use the Intellectual Property, and you represent that you have complied with any
regulations or registration procedures required by applicable law to make this license enforceable
Contents Page
1 Scope........................................................................................................................1
2 Conformance............................................................................................................1
3 Normative references ...............................................................................................1
4 Terms and definitions ..............................................................................................2
5 Conventions .............................................................................................................2
5.1 Abbreviated terms ...............................................................................................2
5.2 UML notation ......................................................................................................3
6 Symbology Encoding overview...............................................................................4
7 Symbology Encoding common elements.................................................................4
7.1 Introduction .........................................................................................................4
7.2 Common elements ...............................................................................................4
8 Feature type styles....................................................................................................5
9 Coverage styles ........................................................................................................6
10 Rules ........................................................................................................................7
10.1 Identification & legends ......................................................................................8
10.2 Scale selection .....................................................................................................8
10.3 Feature filtering .................................................................................................11
11 Symbolizers............................................................................................................14
11.1 Line Symbolizer ................................................................................................15
11.1.1 Format ...........................................................................................................15
11.1.2 Geometry.......................................................................................................15
11.1.3 Stroke ............................................................................................................16
11.1.4 PerpendicularOffset ......................................................................................19
11.1.5 Examples.......................................................................................................19
11.2 Polygon Symbolizer ..........................................................................................20
11.2.1 Format ...........................................................................................................20
11.2.2 Fill .................................................................................................................21
11.2.3 Example ........................................................................................................21
11.3 Point Symbolizer ...............................................................................................22
11.3.1 Format ...........................................................................................................22
11.3.2 Graphic..........................................................................................................23
11.3.3 Examples.......................................................................................................26
11.4 Text Symbolizer ................................................................................................29
11.4.1 Format ...........................................................................................................29
11.4.2 Label .............................................................................................................29
11.4.3 Font ...............................................................................................................29
11.4.4 Label placement ............................................................................................30
11.4.5 Halo...............................................................................................................31
ii
05-077r4
iii
05-077r4
i. Preface
This document is together with the Styled Layer Descriptor Profile for the Web Map
Service Implementation Specification the direct follow-up of Styled Layer Descriptor
Implementation Specification 1.0.0. The old specification document was split up into two
documents to allow the parts that are not specific to WMS to be reused by other service
specifications.
Suggested additions, changes, and comments on this draft report are welcome and
encouraged. Such suggestions may be submitted by email message or by making
suggested changes in an edited copy of this document.
This document uses the specification terms defined in Subclause 5.3 of [OGC 05-008],
which is based on the ISO/IEC Directives, Part 2. Rules for the structure and drafting of
International Standards. In particular, the word “shall” (not “must”) is the verb form used
to indicate a requirement to be strictly followed to conform to this specification.
The following organizations submitted this document to the Open Geospatial Consortium
Inc.
CubeWerx Inc.
lat/lon GmbH (Editor)
Pennsylvania State University.
Syncline
Ionic Software s.a.
iv
05-077r4
Name Organization
Larry Bouzane Compusult Ltd.
Dr. Craig Bruce CubeWerx Inc.
Ivan Cheung ESRI
Adrian Cuthbert m-spatial
Reinhard Erstling interactive instruments GmbH
Ron Lake Galdos Systems Inc.
Seb Lessware Laser-Scan Ltd.
Marwa Mabrouk ESRI
James Macgill Google Maps
Dimitri Monie Ionic Software s.a.
Dr. Markus Müller lat/lon GmbH
Dr. Andreas Poth lat/lon GmbH
Raj Singh Syncline
Dan Specht US Army ERDC
John Vincent Intergraph Corp.
Peter Vretanos CubeWerx Inc.
v. Revision history
v
05-077r4
Buehler
2002-08-15 02-013r2 Craig Incorporated RFC changes Incorporated RFC comments
Bruce
2004-02-26 02-070r1 Craig Incorporated SLD-1.0.20/ First draft for 1.1.0
Bruce Style-Management-System
changes
2004-04-13 02-070r2 Donéa Incorporated 03-004 change Second draft for 1.1.0
Luc proposal for coverage-data
selection and styling
2004-05-01 02-070r3 Clemens Third draft for 1.1.0
Incorporated change request
Portele,
03-095r1, general review for
Reinhard
consistency
Erstling
2004-12-17 02-070r4 Craig Partial Incorporation of SLD- Fourth draft for 1.1.0
Bruce RWG & interactive
instruments changes; see
Annex E.
2005-4-11 02-070r5 James Completed changes started in Fith draft for 1.1.0
Macgill r4
2005-04-29 02-070r6 Markus Sixth draft for 1.1.0
Müller, Incorporated change request
Andreas 05-028
Poth
2005-08-22 02-070r7 Markus Seventh draft for 1.1.0
Müller, Finished changes regarding
Andreas 05-028
Poth
2005-10-19 05-077 Markus Split SLD specification in SLD
Müller All profile for WMS and Symbology
Encoding (this document)
2006-04-21 05-077r1 Markus
Included changes decided by
Müller, First revision of draft SE 1.1.0 for
SLD RWG for 02-070r4,
Reinhard review by SLD RWG.
Added SE functions.
Erstling
2006-06-06 05-077r2 Markus Included changes induced by
Müller comments from Reinhard Final 1.1.0 version
Erstling and Andreas Poth
2006-07-20 05-077r3 Markus 10.2: standardized rendering
Müller, pixel size; 11.6: se:Function;
Reinhard editorial changes, All
Submitted version for 1.1.0
Erstling anonymous types of the
schema changed to global
type definitions.
2006-08-21 05-077r4 Markus
Editorial changes Version for vote on publication
Müller
vi
05-077r4
Foreword
This document together with OGC 05-078 (Styled Layer Descriptor Profile of the Web
Map Service Implementation Specification) replaces OGC 02-070 and consists of the
following part: Symbology Encoding Implementation Specification
This document includes 3 annexes; Annexes A and B are normative, and Annex C is
informative.
Attention is drawn to the possibility that some of the elements of this document may be
the subject of patent rights. The OGC shall not be held responsible for identifying any or
all such patent rights.
vii
05-077r4
Introduction
The current OGC Web Map Service (WMS) specification supports the ability for an
information provider to specify very basic styling options by advertising a preset
collection of visual portrayals for each available data set. However, while a WMS
currently can provide the user with a choice of style options, the WMS can only tell the
user the name of each style. It cannot tell the user what portrayal will look like on the
map. More importantly, the user has no way of defining their own styling rules. The
ability for a human or machine client to define these rules requires a styling language that
the client and server can both understand. Defining this language, called the Symbology
Encoding (SE) is the focus of this specification. This language can be used to portray the
output of Web Map Servers, Web Feature Servers and Web Coverage Servers.
viii
OpenGIS® Implementation Specification OGC 05-077r4
1 Scope
2 Conformance
Conformance with this specification shall be checked using all the relevant tests specified
in Annex A (normative).
3 Normative references
The following normative documents contain provisions that, through reference in this
text, constitute provisions of this document. For dated references, subsequent
amendments to, or revisions of, any of these publications do not apply. For undated
references, the latest edition of the normative document referred to applies.
IETF RFC 2045 (November 1996), Multipurpose Internet Mail Extensions (MIME) Part
One: Format of Internet Message Bodies, Freed, N. and Borenstein N., eds.,
<http://www.ietf.org/rfc/rfc2045.txt>
IETF RFC 2616 (June 1999), Hypertext Transfer Protocol – HTTP/1.1, Gettys, J.,
Mogul, J., Frystyk, H., Masinter, L., Leach, P., and Berners-Lee, T., eds.,
<http://www.ietf.org/rfc/rfc2616.txt>
IETF RFC 2396 (August 1998), Uniform Resource Identifiers (URI): Generic Syntax,
Berners-Lee, T., Fielding, N., and Masinter, L., eds.,
<http://www.ietf.org/rfc/rfc2396.txt>
OGC AS 12 (January 2002), The OpenGIS Abstract Specification Topic 12: OpenGIS
Service Architecture (Version 4.3), Percivall, G. (ed.),
<http://www.opengis.org/techno/abstract/02-112.pdf>
OGC Adopted Implementation Specification: Web Map Server version 1.3, August 2004,
OGC document OGC 04-024, <http://portal.opengis.org/files/?artifact_id=5316>.
1
05-077r4
OGC Adopted Implementation Specification: Web Feature Service version 1.1, May
2004, OGC document OGC 04-094,
<https://portal.opengeospatial.org/files/?artifact_id=8339>.
OGC Adopted Implementation Specification: Filter Encoding version 1.1, May 2004,
OGC document OGC 04-095 <https://portal.opengeospatial.org/files/?artifact_id=8340>.
In addition to this document, this specification includes several normative XML Schema
files. Following approval of this document, these schemas will be posted online at the
URL http://schemas.opengeospatial.net/SE/1.1.0. These XML Schema files are also
bundled with the present document. In the event of a discrepancy between the bundled
and online versions of the XML Schema files, the online files shall be considered
authoritative.
For the purposes of this specification, the definitions specified in Clause 4 of the OWS
Common Implementation Specification [OGC 05-008] shall apply. In addition, the
following terms and definitions apply.
4.1
map
Pictorial representation of geographic data
5 Conventions
Most of the abbreviated terms listed in Subclause 5.1 of the OWS Common
Implementation Specification [OGC 05-008] apply to this document, plus the following
abbreviated terms.
2
05-077r4
Some diagrams that appear in this specification are presented using the Unified Modeling
Language (UML) static structure diagram, as described in Subclause 5.2 of [OGC 05-
008].
3
05-077r4
This document defines an XML encoding that can be used for styling feature and
coverage data. These styles apply either to specific feature types or coverage types,
depending on the used data type.
As Symbology Encoding is a grammar for styling map data independent of any service
interface specification it can be used flexibly by a number of services that style
georeferenced information or store styling information that can be used by other services.
7.1 Introduction
Symbology Encoding defines elements used for rendering Features and Coverages. The
root element of a Symbology Encoding is therefore a FeatureTypeStyle or a Coverage
Style. There are a number of elements used throughout Symbology Encoding that will be
described first.
SE defines some basic elements used both by SE itself but also within SLD.
<xsd:simpleType name="VersionType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="1.1.0"/>
</xsd:restriction>
</xsd:simpleType>
4
05-077r4
The Name element is used with most “objects” defined by SE to allow them to be
referenced. Names must be unique in the context in which they are defined.
A frequent semantic for an OnlineResource that refers to an XML file is to process the
content as if it appeared directly in-line.
The FeatureTypeStyle defines the styling that is to be applied to a single feature type. It
is defined as follows:
<xsd:element name="FeatureTypeStyle" type="se:FeatureTypeStyleType">
</xsd:element>
<xsd:complexType name="FeatureTypeStyleType">
<xsd:sequence>
<xsd:element ref="se:Name" minOccurs="0"/>
<xsd:element ref="se:Description" minOccurs="0"/>
<xsd:element ref="se:FeatureTypeName" minOccurs="0"/>
<xsd:element ref="se:SemanticTypeIdentifier" minOccurs="0" maxOccurs="unbounded"/>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="se:Rule"/>
<xsd:element ref="se:OnlineResource"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="version" type="se:VersionType"/>
</xsd:complexType>
The version is an optional attribute on the FeatureTypeStyle element that identifies the
SE version number that the FeatureTypeStyle corresponds to.
A FeatureTypeStyle can have a Name and Description. The Name element does not
have an explicit use at present, though it conceivably might be used to reference a
featuretype style in some feature-style library. The Description is for human-readable
information.
The FeatureTypeName identifies the specific feature type that the feature-type style is
for. It is allowed to be optional but only if a feature type is in-context or if it is intended
for usage for a number of feature types using SemanticTypeIdentifier.
5
05-077r4
The FeatureTypeStyle contains one or more Rule elements that allow conditional
rendering. Rules are discussed in Clause 10. The Rule can either be in-line or referenced
by an OnlineResource.
9 Coverage styles
The CoverageStyle defines the styling that is to be applied to a subset of Coverage data.
It is defined as follows:
<xsd:element name="CoverageStyle" type="se:CoverageStyleType">
</xsd:element>
<xsd:complexType name="CoverageStyleType">
<xsd:sequence>
<xsd:element ref="se:Name" minOccurs="0"/>
<xsd:element ref="se:Description" minOccurs="0"/>
<xsd:element ref="se:CoverageName" minOccurs="0"/>
<xsd:element ref="se:SemanticTypeIdentifier" minOccurs="0" maxOccurs="unbounded"/>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="se:Rule"/>
<xsd:element ref="se:OnlineResource"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="version" type="se:VersionType"/>
</xsd:complexType>
Similar to FeatureTypeStyle, the CoverageStyle can have a Name, Title, and Abstract.
The Name element does not have an explicit use at present, though it conceivably may be
used to reference a coverage style in some coverage-style library. The Title and Abstract
are for human-readable information.
The CoverageName identifies the specific coverage that the coverage style is for. It is
allowed to be optional, but only if one coverage is in-context and that coverage must
match the syntax and semantics of all coverage-property references inside of the
CoverageStyle.
The following example displays the mapping of the coverage channel named ‘band1’ of a
range axis named ‘Band’ on the Gray channel. A “Normalize” contrast enhancement is
applied on the result of the Gray channel mapping.
6
05-077r4
<CoverageStyle>
<Rule>
<Name>ChannelSelection</Name>
<Description>
<Title>Gray channel mapping</Title>
</Description>
<RasterSymbolizer>
<ChannelSelection>
<GrayChannel>
<SourceChannelName>Band.band1</SourceChannelName>
</GrayChannel>
</ChannelSelection>
<ContrastEnhancement>
<Normalize/>
</ContrastEnhancement>
</RasterSymbolizer>
</Rule>
</CoverageStyle>
Selected coverage data is indentified in the channel mapping using the following rule :
SourceChannelName = {RangeAxis name}.{RangeAxis value}
10 Rules
Rules are used to group rendering instructions by feature-property conditions and map
scales. Rule definitions are placed immediately inside of featuretype- or coverage-style
definitions. The format of a Rule is shown in the following XML-Schema fragment:
<xsd:element name="Rule" type="se:RuleType">
</xsd:element>
<xsd:complexType name="RuleType">
<xsd:sequence>
<xsd:element ref="se:Name" minOccurs="0"/>
<xsd:element ref="se:Description" minOccurs="0"/>
<xsd:element ref="se:LegendGraphic" minOccurs="0"/>
<xsd:choice minOccurs="0">
<xsd:element ref="ogc:Filter"/>
<xsd:element ref="se:ElseFilter"/>
</xsd:choice>
<xsd:element ref="se:MinScaleDenominator" minOccurs="0"/>
<xsd:element ref="se:MaxScaleDenominator" minOccurs="0"/>
<xsd:element ref="se:Symbolizer" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
The elements of a Rule are described in the following clauses, except for the Symbolizer
elements, which are described in Clause 11.
The ordering to use for the Rules inside of a FeatureTypeStyle is following the “painters
model” with the first item in a list being the first item plotted and hence being on the
“bottom”.
7
05-077r4
The Description elements give the familiar short title for display lists and longer
description for the rule. Rules will typically be equated with different symbol
appearances in a map legend, so it is useful to have at least the Title in the Description
so it can be displayed in a legend. The Name element allows the rule to be referenced
externally, which is needed in some methods of SE usage.
range of map-rendering scales for which the rule should be applied. The schema is:
<xsd:element name="MinScaleDenominator" type="xsd:double"/>
<xsd:element name="MaxScaleDenominator" type="xsd:double"/>
The values used are actually the scale denominators relative to a “standardized rendering
pixel size” (below). For example, an element-content value of “10000000” means a scale
of 1:10-million. Scientific notation is also allowed here (and for all non-integer numbers
in SE), so a more convenient value of “10e6” could also be used for the element content
for this example.
8
05-077r4
<MinScaleDenominator>100e3</MinScaleDenominator>
The actual scale denominator is translated into the “standard” scale denominator as:
The standard scale denominator is approximately 868K. The “type” of the last
calculation is correct since the types of its components have the form:
If the actual pixel size was instead 3cm × 2cm (e.g., from being projected onto a large
screen) and the actual scale denominator was pre-computed to be 1M, the standard scale
would be computed as:
9
05-077r4
The standard scale denominator is approximately 11.4K. This result makes sense because
the standard pixels are much finer than the actual pixels, so they will have a “finer” scale.
Since it is common to integrate the output of multiple servers into a single displayed
result in the web-mapping environment, it is important that different map servers have
consistent behaviour with respect to processing scales, so that all of the independent
servers will select or deselect rules at the same scales.
So, the map extent would be approximately 222639m × 111319m linear distance for the
purpose of calculating the scale. If the image size for the map is 600×300 pixels, then the
standard scale denominator for the map would be:
An important issue relating to the use of standard scales is the question of what is truly
intended by the use of a scale in the context of web mapping. Is the real intention that the
translation between “actual” and “standard” scales always be completely accurate, or is
the true intention about reducing the amount of “clutter” in the pixels of the image that is
being rendered? The second case may be more important to some people. For example,
projecting a cluttered image onto a wall will not make it any less cluttered, although it
will change the “actual” scale of the map. This issue boils down to the idea that some
may want to use the concept of a “standard” scale to control the amount of “clutter” in an
image without ever connecting it to or calculating an “actual” scale for a map.
10
05-077r4
The Filter and ElseFilter elements of a Rule allow the selection of features in rules to be
controlled by attribute conditions. As discussed in the previous subclause, rule activation
may also be controlled by the MinScaleDenominator and the MaxScaleDenominator
elements as well as the map-rendering scale.
The Filter element has a relatively straightforward meaning. The syntax of the Filter
element is defined in the Filter Encoding specification and allows both attribute
(property) and spatial filtering. As a simple example, a feature type of “Roads_FT”
might have a numerical attribute named “num_lanes”. The following would be a valid
Filter condition:
<ogc:Filter>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>num_lanes<ogc:PropertyName>
<ogc:Literal>4</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
</ogc:Filter>
This would select only road features that have four or more lanes. For convenience, an
SQL-like notation will be used for illustrative expressions in this section.
Filters used in different Rules applicable to the same FeatureTypeStyle are allowed to
overlap in terms of the features selected by each rule. The map styler must execute all
rules that are applicable to a feature in the order that the rules appear. For example, if one
rule for a user style has the (SQL) condition “num_lanes >= 6” and a subsequent rule has
the condition “num_lanes >= 4”, then all roads with four or more lanes would cause both
rules to “fire”. If the style of the first rule is to draw thick blue lines and the second it to
draw thin black lines, then roads with six or more lanes would be drawn with thin black
lines over top of thick blue ones. Whether all features are applied to each rule in sequence
or whether all suitable rules are applied to each feature in sequence is implementation-
specific, although there may be subtle differences in the appearance of maps resulting
from each of the approaches.
If a rule has no Filter element, the interpretation is that the rule condition is always true,
i.e., all features are accepted and styled by the rule. This behaviour is especially
recommended for styles using a SemanticTypeIdentifier.
The ElseFilter allows rules to be specified that are activated for features that are not
selected by any other rule in a feature-type style. The syntax is:
<xsd:element name="ElseFilter" type="se:ElseFilterType"/>
<xsd:complexType name="ElseFilterType"/>
The ElseFilter element has a more complicated interpretation than the Filter element,
and is interpreted as follows. The nominal scale of the map to be portrayed is computed
(as described in the previous subclause) and all rules for scale ranges that do not include
the computed nominal scale are discarded from further processing. Then, the specific
condition for the ElseFilter is computed by “or-ing” together all of the other filter
11
05-077r4
conditions and take the global “not” of that condition. For example, if there are two rules
in a style that have the (SQL) conditions “a = 6” and “b > 20”, then the condition for the
ElseFilter would be:
not( (a = 6) or (b > 20) )
This approach also has a straightforward interpretation of “features not matching any of
the other rules”. Note that both approaches handle overlapping Filter conditions, and that
many execution systems, such as RDBMS query engines, will suitably optimize any
awkwardly long conditions with overlapping propositions that might result.
A simple optimization for the above procedure is that if any rules of a user style have no
Filter condition (i.e., are always “true”), then any ElseFilter rules can simply be
discarded, since their selection condition will always be false. It is declared that there
shall be no more than one active rule with an ElseFilter in any user style for any map
scale.
If a user style contains no active ElseFilter and there are features (of a layer) that do not
match the condition of any active style, then those features are simply not styled (i.e., are
discarded). The order of rules with Filters and ElseFilters in a user style is unimportant
for the determination of the ElseFilter condition.
Note that the above is a description of the semantics of the ElseFilter and not a
requirement that systems implement exactly the procedural method described; any
semantically equivalent method will suffice. The semantics described above allow for
scale-dependent and scale-independent (global) “else” conditions for user styles. Some
(incomplete) examples follow.
<FeatureTypeStyle>
<Rule>
<Filter>...[A = 1]...</Filter>
<PolygonSymbolizer> ...[red]... </PolygonSymbolizer>
</Rule>
<Rule>
<ElseFilter/>
<PolygonSymbolizer> ...[gray]... </PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
Above, all features in the layer will be rendered. Features with attribute 'A' equal to 1 will
be rendered in red and all other features will be rendered in gray.
12
05-077r4
<FeatureTypeStyle>
<Rule>
<Filter>...[A = 1]...</Filter>
<PolygonSymbolizer> ...[red]... </PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
Above, only features with A=1 will be rendered. All other features will not be rendered.
<FeatureTypeStyle>
<Rule>
<Filter>...[A = 1]...</Filter>
<MaxScaleDenominator>250e3</MaxScaleDenominator>
<PolygonSymbolizer> ...[red]... </PolygonSymbolizer>
</Rule>
<Rule>
<Filter>...[A = 1]...</Filter>
<MinScaleDenominator>250e3</MinScaleDenominator>
<MaxScaleDenominator>5e6</MaxScaleDenominator>
<PolygonSymbolizer> ...[yellow]... </PolygonSymbolizer>
</Rule>
<Rule>
<ElseFilter/>
<PolygonSymbolizer> ...[gray]... </PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
Above, all features in the layer will be rendered. For map-scale denominators up to 250K,
all features with A=1 will be rendered in red. For map scale denominators between 250K
and 5M, all features with A=1 will be rendered in yellow. All features with A != 1 at all
scales and all features with A=1 at scale denominators above or equal to 5M will be
rendered in gray.
<FeatureTypeStyle>
<Rule>
<Filter>...[A = 1]...</Filter>
<MaxScaleDenominator>1e6</MaxScaleDenominator>
<PolygonSymbolizer> ...[red]... </PolygonSymbolizer>
</Rule>
<Rule>
<Filter>...[A = 2]...</Filter>
<MaxScaleDenominator>1e6</MaxScaleDenominator>
<PolygonSymbolizer> ...[yellow]... </PolygonSymbolizer>
</Rule>
<Rule>
<ElseFilter/>
<MaxScaleDenominator>1e6</MaxScaleDenominator>
<PolygonSymbolizer> ...[blue]... </PolygonSymbolizer>
</Rule>
<Rule>
<Filter>...[A = 1]...</Filter>
<MinScaleDenominator>1e6</MinScaleDenominator>
<MaxScaleDenominator>10e6</MinScaleDenominator>
<PolygonSymbolizer> ...[purple]... </PolygonSymbolizer>
</Rule>
<Rule>
<ElseFilter/>
<MinScaleDenominator>1e6</MinScaleDenominator>
<MaxScaleDenominator>10e6</MinScaleDenominator>
13
05-077r4
Above, for a scale denominators less than 1M, all features with A=1 will be rendered as
red; all features with A=2 will be rendered as yellow, and all other features will be
rendered as blue. For scale denominators between 1M and 10M, all features with A=1
will be rendered as purple and all other features will be rendered as gray. For scale
denominators at or above 10M, features with A=1 will be rendered as gray and all other
features will not be rendered.
11 Symbolizers
Embedded inside of Rules, which group conditions for styling features, are Symbolizers.
A Symbolizer describes how a feature is to appear on a map. The Symbolizer describes
not just the shape that should appear but also such graphical properties as color and
opacity. A Symbolizer is obtained by specifying one of a small number of different types
of Symbolizers and then supplying parameters to override its default behaviour. Five
types of Symbolizers are defined:
• Line
• Polygon
• Point
• Text
• Raster
These Symbolizer types are described in turn below. SVG/CSS2 terminology and syntax
are used as appropriate.
14
05-077r4
Pixel is interpreted as a paper unit, referring to the size of the map, while metre, foot and
other similar units are “ground” units referring to the actual size of real-world objects. All
values set inside this Symbolizer shall use this unit for drawing the corresponding
elements. It is also possible to use pixel values inside a Symbolizer that uses a uom: px
has to be appended to the corresponding values in this case (e.g. 5px stands for 5 pixel).
11.1.1 Format
11.1.2 Geometry
The Geometry element of a LineSymbolizer defines the linear geometry to be used for
styling. The Geometry element is optional and if it is absent then the all geometry
properties of the feature type that is used in the containing FeatureType are used. Most
frequently, though, feature types will have only a single geometry property. The format
of the Geometry element is as follows:
<xsd:element name="Geometry" type="se:GeometryType"/>
<xsd:complexType name="GeometryType">
<xsd:sequence>
<xsd:element ref="ogc:PropertyName"/>
</xsd:sequence>
</xsd:complexType>
The only method available for defining a geometry is to reference a geometry property
using the ogc:PropertyName element (defined in the Filter Specification). The content
of the element gives the property name in XPath syntax. In principle, a fixed geometry
could be defined using GML or operators could be defined for computing the geometry
from references or literals. However, using a feature property directly is by far the most
commonly useful method.
15
05-077r4
Geometry types other than inherently linear types can also be used. If a point geometry is
used, it should be interpreted as a line of “epsilon” (arbitrarily small) length with a
horizontal orientation centered on the point, and should be rendered with two end caps.
If a polygon is used (or other “area” type), then its closed outline is used as the line string
(with no end caps). If a raster geometry is used, its coverage-area outline is used for the
line, rendered with no end caps.
In case the Symbolizer is applied to WFS data , the properties that are present in a
geometry can be interrogated using the DescribeFeatureType call of the WFS interface.
All Symbolizer types can include a Geometry element also.
11.1.3 Stroke
The graphical parameters and their values are derived from SVG/CSS2 standards with
identical names and semantics. The values for the parameters are given as the contents of
the elements. The Stroke element is optional inside of LineSymbolizer (and other
Symbolizers), and its absence means that no stroke is to be rendered.
There are three basic types of strokes: solid-color, GraphicFill (stipple), and repeated
linear GraphicStroke. A repeated linear graphic is plotted linearly and has its graphic
Symbolizer bent around the curves of the line string, and a graphic fill has the pixels of
the line rendered with a repeating area-fill pattern. If neither a GraphicFill nor
GraphicStroke element is given, then the line Symbolizer will render a solid color.
The simple SVG/CSS2 styling parameters are given with the SvgParameter element,
which is defined as follows:
16
05-077r4
The parameter values are allowed to be complex expressions for maximum flexibility.
The ‘mixed="true"’ definition means that regular text may be mixed in with various
sub-expressions, implying a text-substitution model for parameter values. Numeric and
character-string data types are not distinguished, which may cause some complications.
Here are some usage examples:
<SvgParameter name="stroke-width">3</SvgParameter>
<SvgParameter name="stroke-width">
<ogc:Literal>3</ogc:Literal>
</SvgParameter>
<SvgParameter name="stroke-width">
<ogc:Add>
<ogc:PropertyName>A</ogc:PropertyName>
<ogc:Literal>2</ogc:Literal>
</ogc:Add>
</SvgParameter>
For usage within Symbology Encoding, SE-specific functions evaluating to a string value
are defined, too. Functions can be used inside SvgParameter-elements. The structure and
usage of functions is defined in subclause 11.6.
The allowed SVG/CSS styling parameters for a stroke are: “stroke” (color), “stroke-
opacity”, “stroke-width”, “stroke-linejoin”, “stroke-linecap”, “stroke-dasharray”,
and “stroke-dashoffset”. The chosen parameter is given by the name attribute of the
SvgParameter element.
The “stroke” SvgParameter element gives the solid color that will be used for a stroke.
The color value is RGB-encoded using two hexadecimal digits per primary-color
component, in the order Red, Green, Blue, prefixed with a hash (#) sign. The
hexadecimal digits between A and F may be in either uppercase or lowercase. For
example, full red is encoded as “#ff0000” (with no quotation marks). If the “stroke”
SvgParameter element is absent, the default color is defined to be black (“#000000”) in
the context of the LineSymbolizer.
17
05-077r4
The “stroke-dashoffset” SvgParameter element specifies the distance as a float into the
“stroke-dasharray” pattern at which to start drawing.
The GraphicFill element both indicates that a stipple-fill repeated graphic will be used
and specifies the fill graphic. Its syntax is:
<xsd:element name="GraphicFill" type="se:GraphicFillType"/>
<xsd:complexType name="GraphicFillType">
<xsd:sequence>
<xsd:element ref="se:Graphic"/>
</xsd:sequence>
</xsd:complexType>
A “graphic” can be defined very informally as “a little picture”. The appearance of the
graphic is defined with the embedded Graphic element, which is discussed in
Subclause 11.3.2. Additional parameters for the GraphicFill may be provided in the
future to provide more control the exact style of filling.
The GraphicStroke element both indicates that a repeated-linear-graphic stroke type will
be used. Its syntax is:
18
05-077r4
The Graphic sub-element specifies the linear graphic. Proper stroking with a linear
graphic requires two “hot-spot” points within the space of the graphic to indicate where
the rendering line starts and stops. In the case of raster images with no special mark-up,
this line will be assumed to be middle pixel row of the image, starting from the first pixel
column and ending at the last pixel column.
InitialGap specifies how far away the first graphic will be drawn relative to the start of
the rendering line, while Gap gives the distance between two graphics. The XML schema
definition is as follows.
<xsd:element name="InitialGap" type="se:ParameterValueType"/>
<xsd:element name="Gap" type="se:ParameterValueType"/>
11.1.4 PerpendicularOffset
The distance is in uoms and is positive to the left-hand side of the line string. Negative
numbers mean right. The default offset is 0.
11.1.5 Examples
Consider that there is a layer defined with all the features of the type ‘River’ that is to be
displayed as a blue line two pixels wide. Here is the example Symbolizer:
<LineSymbolizer>
<Geometry>
<ogc:PropertyName>centerline</ogc:PropertyName>
</Geometry>
<Stroke>
<SvgParameter name="stroke">#0000ff</SvgParameter>
<SvgParameter name="stroke-width">2</SvgParameter>
</Stroke>
</LineSymbolizer>
19
05-077r4
The resulting map portrayal based upon the above rule is:
Here is a simple example using default stroking of the default geometry property:
<LineSymbolizer>
<Stroke/>
</LineSymbolizer>
11.2.1 Format
20
05-077r4
some way, and only the original line is stroked. If a raster geometry is used, then the
raster-coverage area is used as the polygon. A missing Geometry element selects the
“default” geometry for a feature type.
The Fill and Stroke elements are contained in the PolygonSymbolizer in the conceptual
order that they are used and plotted using the “painters model”, where the Fill will be
rendered first, and then the Stroke will be rendered on top of the fill.
The Stroke element is discussed in Subclause 11.1.3, and a missing Stroke element
means that the geometry will not be stroked. The Fill element is discussed below.
The Displacement gives the X and Y displacements from the original geometry. This
element may be used to avoid over-plotting of multiple PolygonSymbolizers for one
geometry or supplying "shadows" of polygon gemeotries. The displacements are in units
of pixels above and to the right of the point. The default displacement is X=0, Y=0.
11.2.2 Fill
The Fill element specifies how the area of the geometry will be filled. Here is the XML-
Schema definition:
<xsd:element name="Fill" type="se:FillType"/>
<xsd:complexType name="FillType">
<xsd:sequence>
<xsd:element ref="se:GraphicFill" minOccurs="0"/>
<xsd:element ref="se:SvgParameter" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
There are two types of fills, solid-color and repeated GraphicFill. The repeated-graphic
fill is selected only if the GraphicFill element is present. If the Fill element is omitted
from its parent element, then no fill will be rendered. The GraphicFill and
SvgParameter elements are discussed in conjunction with the Stroke element in
Subclause 11.1.3. Here, the SvgParameter names are “fill” instead of “stroke” and
“fill-opacity” instead of “stroke-opacity”. None of the other SvgParameters in Stroke
are available for filling and the default value for the fill color in this context is 50% gray
(value “#808080”).
11.2.3 Example
Consider the example of a ‘Lake’ feature type with a Polygon property called ‘geometry’
that we wish to symbolize as a ‘light-blue’ filled polygon with its boundary drawn as a
‘dark blue’ line. The lake can be both filled and its boundary drawn using the
PolygonSymbolizer as follows:
21
05-077r4
<PolygonSymbolizer>
<Geometry>
<ogc:PropertyName>the_area</ogc:PropertyName>
</Geometry>
<Fill>
<SvgParameter name="fill">#aaaaff</SvgParameter>
</Fill>
<Stroke>
<SvgParameter name="stroke">#0000aa</SvgParameter>
</Stroke>
</PolygonSymbolizer>
The resulting map portrayal based upon the above rule is:
11.3.1 Format
22
05-077r4
The Geometry element is discussed in Subclause 11.1.2. In this case, if a line, polygon,
or raster geometry is used with this Symbolizer, then the semantic is to use the centroid
of the geometry, or any similar representative point. The Graphic element is described
below.
It may occur multiple times so that a point Symbolizer may be composed of multiple
graphics.
11.3.2 Graphic
A Graphic is a “graphic symbol” with an inherent shape, color(s), and possibly size. A
“graphic” can be very informally defined as “a little picture” and can be of either a raster
or vector-graphic source type. The term “graphic” is used since the term “symbol” is
similar to “Symbolizer” which is used in a different context in SE. The high-level
definition of a Graphic element is:
<xsd:element name="Graphic" type="se:GraphicType"/>
<xsd:complexType name="GraphicType">
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="se:ExternalGraphic"/>
<xsd:element ref="se:Mark"/>
</xsd:choice>
<xsd:element ref="se:Opacity" minOccurs="0"/>
<xsd:element ref="se:Size" minOccurs="0"/>
<xsd:element ref="se:Rotation" minOccurs="0"/>
<xsd:element ref="se:AnchorPoint" minOccurs="0"/>
<xsd:element ref="se:Displacement" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
23
05-077r4
If the Graphic element is omitted from the parent element, then nothing will be plotted.
The Mark element is defined and discussed below.
Graphics can either be referenced from an external URL in a common format (such as
GIF or SVG) or may be derived from a Mark. Multiple external URLs and marks may
be referenced with the semantic that they all provide the equivalent graphic in different
formats. The “hot spot” to use for positioning the rendering at a point must either be
inherent in the external format or is defined to be the “central point” of the graphic,
where the exact definition “central point” is system-dependent.
The default if neither an ExternalGraphic nor a Mark is specified is to use the default
mark of a “square” with a 50%-gray fill and a black outline, with a size of 6 pixels,
unless an explicit Size is specified. This definition allows a reasonable display to be
selected very simply.
24
05-077r4
external graphic object will be extracted and used like the content fetched from an
ExternalContent tag.
The ColorReplacement element, which may occur multiple times, allows to replace a
color in the ExternalGraphic, the color specified in the OriginalColor sub-element, by
another color as a result of a recode function as defined in 11.6. LookUpValue is in this
case set to ExternalGraphic, both Data and Value elements are set to color values.
The Opacity element gives the opacity to use for rendering the graphic. It has the same
semantics as the “stroke-opacity” and “fill-opacity” SvgParameter elements. The
default value is “1.0”.
The Size element gives the absolute size of the graphic in uoms encoded as a floating-
point number. The default size for an object is context-dependent. Negative values are
not allowed.
The default size of an image format (such as GIF) is the inherent size of the image. The
default size of a format without an inherent size (such as SVG which are not specially
marked) is defined to be 16 pixels in height and the corresponding aspect in width. If a
size is specified, the height of the graphic will be scaled to that size and the
corresponding aspect will be used for the width. An expected common use case will be
for image graphics to be on the order of 200 pixels in linear size and to be scaled to lower
sizes. On systems that can resample these graphic images “smoothly,” the results will be
visually pleasing.
The Rotation element gives the rotation of a graphic in the clockwise direction about its
center point in decimal degrees, encoded as a floating-point number. Negative values
mean counter-clockwise rotation. The default value is 0.0 (no rotation). Note that there is
no connection between source geometry types and rotations; the point used for plotting
has no inherent direction. Also, the point within the graphic about which it is rotated is
format dependent. If a format does not include an inherent rotation point, then the point
of rotation should be the centroid.
The Displacement gives the X and Y displacements from the “hot-spot” point. This
element may be used to avoid over-plotting of multiple graphic symbols used as part of
the same point symbol. The displacements are in units of measure above and to the right
of the point. The default displacement is X=0, Y=0.
25
05-077r4
If Displacement is used in conjunction with Size and/or Rotation then the graphic
symbol shall be scaled and/or rotated before it is displaced.
The Mark element of a Graphic defines a “shape” which has coloring applied to it. The
element is defined as follows:
<xsd:element name="Mark" type="se:MarkType"/>
<xsd:complexType name="MarkType">
<xsd:sequence>
<xsd:choice minOccurs="0">
<xsd:element ref="se:WellKnownName"/>
<xsd:sequence>
<xsd:choice>
<xsd:element ref="se:OnlineResource"/>
<xsd:element ref="se:InlineContent"/>
</xsd:choice>
<xsd:element ref="se:Format"/>
<xsd:element ref="se:MarkIndex" minOccurs="0"/>
</xsd:sequence>
</xsd:choice>
<xsd:element ref="se:Fill" minOccurs="0"/>
<xsd:element ref="se:Stroke" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
The WellKnownName element gives the well-known name of the shape of the mark.
Allowed values include at least “square”, “circle”, “triangle”, “star”, “cross”, and “x”,
though map servers may draw a different symbol instead if they don't have a shape for all
of these. The default WellKnownName is “square”. Renderings of these marks may be
made solid or hollow depending on Fill and Stroke elements. These elements are
discussed in Subclauses 11.2.2 and 11.1.3, respectively.
The Mark element serves two purposes. It allows the selection of simple shapes, and, in
combination with the capability to select and mix multiple external-URL graphics and
marks, it allows a style to be specified that can produce a usable result in a best-effort
rendering environment, provided that a simple Mark is included at the bottom of the list
of sources for every Graphic.
11.3.3 Examples
Consider the example of symbolizing ‘Hospital’ features that have a point geometry
property called “locatedAt” as solid red stars centered on the hospital locations. The
PointSymbolizer can be represented using a mark as follows:
26
05-077r4
<PointSymbolizer>
<Geometry>
<ogc:PropertyName>locatedAt</ogc:PropertyName>
</Geometry>
<Graphic>
<Mark>
<WellKnownName>star</WellKnownName>
<Fill>
<SvgParameter name="fill">#ff0000</SvgParameter>
</Fill>
</Mark>
<Size>8.0</Size>
</Graphic>
</PointSymbolizer>
The resulting map portrayal based upon the preceding rule is:
The resulting map portrayal based upon the preceding rule is:
27
05-077r4
A point Symbolizer composed of two graphics of which one is displaced may be defined
as:
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple"
xlink:href="http://www.vendor.com/geosym/0512.svg"/>
<Format>image/svg+xml</Format>
</ExternalGraphic>
</Graphic>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple"
xlink:href="http://www.vendor.com/geosym/2011.svg"/>
<Format>image/svg+xml</Format>
</ExternalGraphic>
<Size>6.0</Size>
<Displacement>
<DisplacementX>11.0</DisplacementX>
<DisplacementY>8.0</DisplacementY>
</Displacement>
</Graphic>
</PointSymbolizer>
The resulting map portrayal based upon the preceding rule is:
28
05-077r4
11.4.1 Format
The TextSymbolizer is used for styling text labels and its format is defined as follows:
<xsd:element name="TextSymbolizer" type="se:TextSymbolizerType" substitutionGroup="se:Symbolizer"/>
<xsd:complexType name="TextSymbolizerType">
<xsd:complexContent>
<xsd:extension base="se:SymbolizerType">
<xsd:sequence>
<xsd:element ref="se:Geometry" minOccurs="0"/>
<xsd:element ref="se:Label" minOccurs="0"/>
<xsd:element ref="se:Font" minOccurs="0"/>
<xsd:element ref="se:LabelPlacement" minOccurs="0"/>
<xsd:element ref="se:Halo" minOccurs="0"/>
<xsd:element ref="se:Fill" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
These elements are discussed below, except for the Geometry and Fill elements, which
were discussed in Subclauses 11.1.2 and 11.2.2, respectively. The geometry type is
interpreted as being either a point or a line as needed by the LabelPlacement discussed
in Subclause 11.4.4. If the given geometry is not of point or line type as appropriate, it
shall be transformed into the appropriate type as discussed in Subclause 11.3.1 for point
or Subclause 12.1.2 for line.
11.4.2 Label
The ParameterValueType may refer to a complex value and the type of the
property/expression is unimportant as the system is expected to provide a text-string
version of the property/expression for rendering whatever its type. If a Label element is
not provided in a TextSymbolizer, then no text shall be rendered.
11.4.3 Font
The Font element identifies a font of a certain family, style, and size. Its format is
defined as:
<xsd:element name="Font" type="se:FontType"/>
<xsd:complexType name="FontType">
<xsd:sequence>
<xsd:element ref="se:SvgParameter" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
29
05-077r4
The “font-family” SvgParameter element gives the family name of a font to use.
Allowed values are system-dependent. Any number of font-family SvgParameter
elements may be given and they are assumed to be in preferred order.
The “font-style” SvgParameter element gives the style to use for a font. The allowed
values are “normal”, “italic”, and “oblique”.
The “font-weight” SvgParameter element gives the amount of weight or boldness to use
for a font. Allowed values are “normal” and “bold”.
The “font-size” SvgParameter element gives the size to use for the font in pixels. The
default is defined to be 10 pixels, though various systems may have restrictions on what
sizes are available.
When handling vendor-specific fonts, some reasonable interpretation of the CSS font
parameters should be used. For example, with a vendor-specific vector-based font, the
font family could be interpreted as the basename of the filename including the font; the
font style of “italic” could be interpreted as an oblique slant; and the weight of “bold”
could be interpreted as using thicker lines (such as two or three pixels thick).
The LabelPlacement element is used to position a label relative to a point, line string or
polygon and is defined as follows:
<xsd:element name="LabelPlacement" type="se:LabelPlacementType"/>
<xsd:complexType name="LabelPlacementType">
<xsd:choice>
<xsd:element ref="se:PointPlacement"/>
<xsd:element ref="se:LinePlacement"/>
</xsd:choice>
</xsd:complexType>
30
05-077r4
For a PointPlacement, the anchor point of the label and a linear displacement from the
point can be specified, to allow a graphic Symbolizer to be plotted directly at the point.
This might be useful to label a city, for example. For a LinePlacement, a perpendicular
offset can be specified, to allow the line itself to be plotted also. This might be useful for
labelling a road or a river, for example. The default behaviour of LinePlacement is to
draw of the label along the line. If IsRepeated is "true", the label will be repeatedly drawn
along the line with InitialGap and Gap (see clause 11.1.3) defining the spaces at the
beginning and between labels. GeneralizeLine allows the actual geometry, be it a
linestring or polygon to be generalized for label placement. This is e.g. useful for
labelling polygons inside their interior when there is need for the label to resemble the
shape of the polygon.
Labels can either be aligned to the line geometry if IsAligned is "true" (the default) or are
drawn horizontally.
The AnchorPoint element of a PointPlacement gives the location inside of a label to use
for anchoring the label to the main-geometry point. It is formally defined in subclause
11.3.2.The Displacement element of a PointPlacement gives the X and Y displacements
from the main-geometry point to render a text label (see 11.3.2).
This will often be used to avoid over-plotting a graphic symbol marking a city or some
such feature. The displacements are in units of pixels above and to the right of the point.
A system may reflect this displacement about the X and/or Y axes to de-conflict labels.
The default displacement is X=0, Y=0. Displacement is formally defined in
Section 11.3.2.
The Rotation of a PointPlacement gives the clockwise rotation of the label in degrees
from the normal direction for a font (left-to-right for Latin-derived human languages at
least). Rotation is formally defined in Subclause 11.3.2.
11.4.5 Halo
A Halo is a type of Fill that is applied to the backgrounds of font glyphs. The use of
halos greatly improves the readability of text labels. Halo is defined as:
<xsd:element name="Halo" type="se:HaloType"/>
<xsd:complexType name="HaloType">
<xsd:sequence>
<xsd:element ref="se:Radius" minOccurs="0"/>
<xsd:element ref="se:Fill" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
31
05-077r4
The Radius element gives the absolute size of a halo radius in pixels encoded as a
floating-point number. The radius is taken from the outside edge of a font glyph to extend
the area of coverage of the glyph (and the inside edge of “holes” in the glyphs). The halo
of a text label is considered to be a single shape. The default radius is one pixel.
Negative values are not allowed. The default halo fill is solid white (Color
“#FFFFFF”). The glyph’s fill is plotted on top of the halo. The default font fill is solid
black (Color “#000000”). If no Halo is selected in the containing TextSymbolizer, then
no halo will be rendered.
11.4.6 Example
11.5.1 Format
32
05-077r4
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
11.5.2 Parameters
The ChannelSelection element specifies the false-color channel selection for a multi-
spectral raster source (such as a multi-band satellite-imagery source). It is defined as:
<xsd:element name="ChannelSelection" type="se:ChannelSelectionType"/>
<xsd:complexType name="ChannelSelectionType">
<xsd:choice>
<xsd:sequence>
<xsd:element ref="se:RedChannel"/>
<xsd:element ref="se:GreenChannel"/>
<xsd:element ref="se:BlueChannel"/>
</xsd:sequence>
<xsd:element ref="se:GrayChannel"/>
</xsd:choice>
</xsd:complexType>
<xsd:complexType name="SelectedChannelType">
<xsd:sequence>
<xsd:element ref="se:SourceChannelName"/>
<xsd:element ref="se:ContrastEnhancement" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="SourceChannelName" type="xsd:string"/>
Either a channel may be selected to display in each of red, green, and blue, or a single
channel may be selected to display in grayscale. (The spelling “gray” is used since it
seems to be more common on the Web than “grey” by a ratio of about 3:1.) Contrast
enhancement may be applied to each channel in isolation. Channels are identified by a
system and data-dependent character identifier. Commonly, channels will be labelled as
“1”, “2”, etc. or as defined in clause 9.
The OverlapBehavior element tells a system how to behave when multiple raster images
in a layer overlap each other, for example with satellite-image scenes.
33
05-077r4
<xsd:element name="OverlapBehavior">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="LATEST_ON_TOP"/>
<xsd:enumeration value="EARLIEST_ON_TOP"/>
<xsd:enumeration value="AVERAGE"/>
<xsd:enumeration value="RANDOM"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
The ColorMap element defines the mapping of palette-type raster colors or fixed-
numeric pixel values to colors using an Interpolate or Categorize SE function as defined
in subsection 11.6. The LookUpValue is in this case set to Rasterdata.
<xsd:element name="ColorMap" type="se:ColorMapType"/>
<xsd:complexType name="ColorMapType">
<xsd:choice>
<xsd:element ref="se:Categorize"/>
<xsd:element ref="se:Interpolate"/>
</xsd:choice>
</xsd:complexType>
For example, a DEM raster giving elevations in meters above sea level can be translated
to a colored image with a ColorMap using a Categorize function.
34
05-077r4
In the case of a color image, the relative grayscale brightness of a pixel color is used.
“Normalize” means to stretch the contrast so that the dimmest color is stretched to black
and the brightest color is stretched to white, with all colors in between stretched out
linearly. “Histogram” means to stretch the contrast based on a histogram of how many
colors are at each brightness level on input, with the goal of producing equal number of
pixels in the image at each brightness level on output. This has the effect of revealing
many subtle ground features. A “GammaValue” tells how much to brighten (values
greater than 1.0) or dim (values less than 1.0) an image. The default GammaValue is 1.0
(no change). If none of Normalize, Histogram, or GammaValue are selected in a
ContrastEnhancement, then no enhancement is performed.
The ShadedRelief element selects the application of relief shading (or “hill shading”) to
an image for a three-dimensional visual effect. It is defined as:
<xsd:element name="ShadedRelief" type="se:ShadedReliefType"/>
<xsd:complexType name="ShadedReliefType">
<xsd:sequence>
<xsd:element ref="se:BrightnessOnly" minOccurs="0"/>
<xsd:element ref="se:ReliefFactor" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
Exact parameters of the shading are system-dependent (for now). If the BrightnessOnly
flag is “0” or “false” (false, default), the shading is applied to the layer being rendered as
the current RasterSymbolizer. If BrightnessOnly is “1” or “true” (true), the shading is
applied to the brightness of the colors in the rendering canvas generated so far by other
layers, with the effect of relief-shading these other layers. The default for
BrightnessOnly is “0” (false). The ReliefFactor gives the amount of exaggeration to use
for the height of the “hills.” A value of around 55 (times) gives reasonable results for
Earth-based DEMs. The default value is system-dependent.
The ImageOutline element specifies that individual source rasters in a multi-raster set
(such as a set of satellite-image scenes) should be outlined with either a LineSymbolizer
or PolygonSymbolizer. It is defined as:
<xsd:element name="ImageOutline" type="se:ImageOutlineType"/>
<xsd:complexType name="ImageOutlineType">
<xsd:choice>
<xsd:element ref="se:LineSymbolizer"/>
<xsd:element ref="se:PolygonSymbolizer"/>
</xsd:choice>
</xsd:complexType>
An Opacity of 0.0 can be selected for the main raster to avoid rendering the main-raster
pixels, or an opacity can be used for a PolygonSymbolizer Fill to allow the main-raster
data be visible through the fill.
35
05-077r4
11.5.3 Examples
The following example applies a coloring to elevation (DEM) data (quantities are in
meters):
<RasterSymbolizer>
<Opacity>1.0</Opacity>
<OverlapBehavior>AVERAGE</OverlapBehavior>
<ColorMap>
<Categorize>
<LookupValue>Rasterdata</LookupValue>
<Value>#00ff00</Value>
<Threshold>-417</Threshold>
<Value>#00fa00</Value>
<Threshold>-333</Threshold>
<Value>#14f500</Value>
<Threshold>-250</Threshold>
<Value>#28f502</Value>
<Threshold>-167</Threshold>
<Value>#3cf505</Value>
<Threshold>-83</Threshold>
<Value>#50f50a</Value>
<Threshold>-1</Threshold>
<Value>#64f014</Value>
<Threshold>0</Threshold>
<Value>#7deb32</Value>
<Threshold>30</Threshold>
<Value>#78c818</Value>
<Threshold>105</Threshold>
<Value>#38840c</Value>
<Threshold>300</Threshold>
<Value>#2c4b04</Value>
<Threshold>400</Threshold>
<Value>#ffff00</Value>
<Threshold>700</Threshold>
<Value>#dcdc00</Value>
<Threshold>1200</Threshold>
<Value>#b47800</Value>
<Threshold>1400</Threshold>
<Value>#c85000</Value>
<Threshold>1600</Threshold>
<Value>#be4100</Value>
<Threshold>2000</Threshold>
<Value>#963000</Value>
<Threshold>3000</Threshold>
<Value>#3c0200</Value>
<Threshold>5000</Threshold>
<Value>#ffffff</Value>
<Threshold>13000</Threshold>
<Value>#ffffff</Value>
</Categorize>
</ColorMap>
<ShadedRelief/>
</RasterSymbolizer>
36
05-077r4
There are two general groups of functions for usage in SE. The first group is used to
transform raw values into “symbolizable” quantities. This especially comprises the
processes of categorization, recoding, and interpolation. This group of functions is
especially useful in all places using SvgParameters, making them dynamically related to
data values. The second group defines means for formatting data items like numbers,
strings, and dates. These functions are especially helpful to set up the Label element of
TextSymbolizers.
37
05-077r4
One of the most needed is a function for formatting numbers to make them human
readable. You need such a function whenever a TextSymbolizer is employed to output a
numeric property value.
It is defined as follows:
<xsd:element name="FormatNumber" type="se:FormatNumberType" substitutionGroup="se:Function"/>
<xsd:complexType name="FormatNumberType">
<xsd:complexContent>
<xsd:extension base="se:FunctionType">
<xsd:sequence>
<xsd:element ref="se:NumericValue"/>
<xsd:element ref="se:Pattern"/>
<xsd:element ref="se:NegativePattern" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="decimalPoint" type="xsd:string" use="optional" default="."/>
<xsd:attribute name="groupingSeparator" type="xsd:string" use="optional" default=","/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
38
05-077r4
0 digit
. decimal point
, grouping separator
E exponent indicator
- minus sign
Due to required distinctions in the notation of numbers, two of the pattern characters can
be defined as attributes of the FormatNumber element:
• decimalPoint="."
• groupingSeperator=","
If there is no NegativePattern, "-" is prefixed to the Pattern. The first argument is
converted to a numeric value if necessary. The semantics shall be as described as for
XSLT and the Java DecimalFormat class.
11.6.2 Date formatting function
This function is used for several date types. The argument of the function can consist of
one of the following ISO 8601 XML schema types:
dateTime
time
date
gYearMonth
gMonthDay
gDay
gMonth
gYear
or
gml:TimeInstant
39
05-077r4
/ slash, literally
: colon. literally
- minus, literally
a am/pm marker
z z: time zone (if present e.g. Pacific Standard Time; PST; GMT-
08:00)
40
05-077r4
Returns the substring at position Position (counting from 1) with length Length.
The first argument StringValue is converted to a string value before applying the
substring operation. If Position is not specified it is assumed as 1. The default value for
Length is the remaining length starting at Position.
The function shall react friendly on invalid Position and Length contents. Positions and
Lengths less or equal 0 shall yield the empty string. If the actual string length is less the
defined substring the existing part of the substring shall be returned.
<xsd:element name="Concatenate" type="se:ConcatenateType" substitutionGroup="se:Function"/>
<xsd:complexType name="ConcatenateType">
<xsd:complexContent>
<xsd:extension base="se:FunctionType">
<xsd:sequence>
<xsd:element ref="se:StringValue" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
41
05-077r4
The function changes the case of the StringValue as indicated by the attribute direction.
Possible values of the latter are "toUpper" and "toLower", where the former is the default
value.
<xsd:element name="Trim" type="se:TrimType" substitutionGroup="se:Function"/>
<xsd:complexType name="TrimType">
<xsd:complexContent>
<xsd:extension base="se:FunctionType">
<xsd:sequence>
<xsd:element ref="se:StringValue"/>
</xsd:sequence>
<xsd:attribute name="stripOffPosition" type="se:stripOffPositionType"/>
<xsd:attribute name="stripOffChar" type="xsd:string"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:simpleType name="stripOffPositionType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="leading"/>
<xsd:enumeration value="trailing"/>
<xsd:enumeration value="both"/>
</xsd:restriction>
</xsd:simpleType>
The function strips off "leading", "trailing", or "both" chars from a string value.
Attributes control the mode of stripping and the character stripped. Defaults are "leading"
and blank.
42
05-077r4
This function returns the position of the first occurrence (counting from 1) of the
LookupString in StringValue. Zero is returned in case of search failure. The direction
of search is determined by the attribute searchdirection, which can take values
"frontToBack" and "backToFront", where the former is the default.
<xsd:element name="StringLength" type="se:StringLengthType" substitutionGroup="se:Function"/>
<xsd:complexType name="StringLengthType">
<xsd:complexContent>
<xsd:extension base="se:FunctionType">
<xsd:sequence>
<xsd:element ref="se:StringValue"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
The function returns the number of characters in a string. The argument is converted to a
string before computing its length.
This specification defines three pre-defined functions for transforming raw data:
43
05-077r4
<xsd:simpleType name="ThreshholdsBelongToType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="succeeding"/>
<xsd:enumeration value="preceding"/>
</xsd:restriction>
</xsd:simpleType>
The Thresholds have to be specified in ascending order and (like the LookupValue)
have to be of a uniform and orderable type. The value of the function is determined by
looking up into which interval between two thresholds the LookupValue falls. The first
interval ranges from -Infinity to the first given threshold and the last one accordingly
from the last threshold to +Infinity.
In case the Categorize (or Interpolate) function is used inside a RasterSymbolizer as a
ColorMap, the LookupValue is set to the fixed value “Rasterdata”.
The Values can be of any type, dependent on which symbolization context the function is
employed. Color values (like #00ffff) or numeric values are typical.
Whether the Threshold values themselves belong to the preceding or the succeeding
interval can be controlled by the attribute thresholdsBelongTo= with the possible values
"preceding" and "succeeding" the latter being the default.
In the following example using the Categorize function the stroke width of a line symbol
representing a road segment depends on the number of average vehiles passing per hour
(4999 or less: 1 pixel; 5000..14999: 2 pixel; 15000..39999: 3 pixel; 40000..74999: 4
pixel; 75000+: 5 pixel).
44
05-077r4
<SvgParameter name="stroke-width">
<Categorize fallbackValue="1">
<LookupValue>
<ogc:PropertyName>vehiclesPerHour</ogc:PropertyName>
</LookupValue>
<Value>1</Value>
<Threshold>5000</Threshold>
<Value>2</Value>
<Threshold>15000</Threshold>
<Value>3</Value>
<Threshold>40000</Threshold>
<Value>4</Value>
<Threshold>75000</Threshold>
<Value>5</Value>
</Categorize>
</SvgParameter>
<xsd:simpleType name="ModeType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="linear"/>
<xsd:enumeration value="cosine"/>
<xsd:enumeration value="cubic"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="MethodType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="numeric"/>
<xsd:enumeration value="color"/>
</xsd:restriction>
45
05-077r4
</xsd:simpleType>
Only numeric quantities are allowed for LookupValue and Data. Values are usually
numeric as well. The interpolation of color-values requires the attribute mode="color" at
the Interpolate element.
This function recodes values from a property or expression into corresponding values of
arbitrary type. The comparisons are performed checking for identical values.
46
05-077r4
Annex A
(normative)
A.1 General
c) Reference: Annex B
c) Reference: Clause 8
47
05-077r4
c) Reference: Clause 9
b) Test method: Generate graphic output using FeatureTypeStyle elements including all
sub-elements
c) Reference: Clause 8
b) Test method: Generate graphic output using CoverageStyle elements including all sub-
elements
c) Reference: Clause 9
48
05-077r4
Annex B
(normative)
XML schemas
In addition to this document, this specification includes several normative XML Schema
files. These are posted online at the URL http://schemas.opengeospatial.net/se where a
lower level directory is used for this Version 1.1.0. These XML Schema files are also
bundled in a zip file with the present document. In the event of a discrepancy between the
bundled and online versions of the XML Schema files, the online files shall be
considered authoritative.
The abilities now specified in this document use specified XML Schemas included in the
zip file with this document. These XML Schemas combine the XML Schema fragments
listed in various subclauses of this document, eliminating duplications. These XML
Schema are named:
common.xsd
Symbolizer.xsd
FeatureStyle.xsd
Although FeatureStyle.xsd contains elements pertaining to FeatureTypes and Coverages,
as Features are a superclass of both these elements, this file name was chosen.All these
XML Schemas contain documentation of the meaning of each element and attribute, and
this documentation shall be considered normative as specified in Subclause 11.6.3 of
[OGC 05-008].
49
05-077r4
Annex C
(informative)
C.1 Introduction
This annex provides more example XML documents than given in the body of this
document.
C.2 FeatureTypeStyle
<?xml version="1.0" encoding="ISO-8859-1"?>
<FeatureTypeStyle version="1.1.0" xsi:schemaLocation="http://www.opengis.net/se FeatureStyle.xsd"
xmlns="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:oceansea="http://www.myurl.net/oceansea">
<FeatureTypeName>oceansea:Foundation</FeatureTypeName>
<Rule>
<Name>main</Name>
<PolygonSymbolizer uom="http://www.opengeospatial.org/sld/units/pixel">
<Fill>
<SvgParameter name="fill">#96C3F5</SvgParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
C.3 CoverageStyle
<?xml version="1.0" encoding="UTF-8"?>
<CoverageStyle version="1.1.0" xsi:schemaLocation="http://www.opengis.net/se FeatureStyle.xsd"
xmlns="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Rule>
<Name>ChannelSelection</Name>
<Description>
<Title>Gray channel mapping</Title>
</Description>
<RasterSymbolizer>
<ChannelSelection>
<GrayChannel>
<SourceChannelName>Band.band1</SourceChannelName>
</GrayChannel>
</ChannelSelection>
<ContrastEnhancement>
<Normalize/>
</ContrastEnhancement>
</RasterSymbolizer>
</Rule>
</CoverageStyle>
50
05-077r4
C.4 LineSymbolizer
<?xml version="1.0" encoding="ISO-8859-1"?>
<LineSymbolizer version="1.1.0" xsi:schemaLocation="http://www.opengis.net/se Symbolizer.xsd"
xmlns="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
uom="http://www.opengeospatial.org/se/units/metre">
<Name>MyLineSymbolizer</Name>
<Description>
<Title>Example Symbol</Title>
<Abstract>This is just a simple example of a line symbolizer.</Abstract>
</Description>
<Stroke>
<SvgParameter name="stroke">#0000ff</SvgParameter>
<SvgParameter name="stroke-width">2</SvgParameter>
</Stroke>
</LineSymbolizer>
C.5 PolygonSymbolizer
<?xml version="1.0" encoding="ISO-8859-1"?>
<PolygonSymbolizer version="1.1.0" xsi:schemaLocation="http://www.opengis.net/se Symbolizer.xsd"
xmlns="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
uom="http://www.opengeospatial.org/se/units/pixel">
<Name>MyPolygonSymbolizer</Name>
<Description>
<Title>Example PolygonSymbolizer</Title>
<Abstract>This is just a simple example of a polygon symbolizer.</Abstract>
</Description>
<Fill>
<SvgParameter name="fill">#aaaaff</SvgParameter>
</Fill>
<Stroke>
<SvgParameter name="stroke">#0000aa</SvgParameter>
</Stroke>
</PolygonSymbolizer>
51
05-077r4
C.6 PointSymbolizer 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<PointSymbolizer version="1.1.0" xsi:schemaLocation="http://www.opengis.net/se Symbolizer.xsd"
xmlns="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
uom="http://www.opengeospatial.org/se/units/metre">
<Name>MyPointSymbolizer</Name>
<Description>
<Title>Example Pointsymbolizer</Title>
<Abstract>This is just a simple example of a point symbolizer.</Abstract>
</Description>
<Graphic>
<Mark>
<WellKnownName>star</WellKnownName>
<Fill>
<SvgParameter name="fill">#ff0000</SvgParameter>
</Fill>
</Mark>
<Size>8.0</Size>
</Graphic>
</PointSymbolizer>
C.7 PointSymbolizer 2
<?xml version="1.0" encoding="ISO-8859-1"?>
<PointSymbolizer version="1.1.0" xsi:schemaLocation="http://www.opengis.net/se Symbolizer.xsd"
xmlns="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
uom="http://www.opengeospatial.org/se/units/pixel">
<Name>MyPointSymbolizer</Name>
<Description>
<Title>Example Pointsymbolizer</Title>
<Abstract>This is just a simple example of a point symbolizer.</Abstract>
</Description>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="http://www.vendor.com/geosym/2267.svg"/>
<Format>image/svg+xml</Format>
</ExternalGraphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="http://www.vendor.com/geosym/2267.png"/>
<Format>image/png</Format>
</ExternalGraphic>
<Mark/>
<Size>15.0</Size>
</Graphic>
</PointSymbolizer>
52
05-077r4
C.8 TextSymbolizer
<?xml version="1.0" encoding="ISO-8859-1"?>
<TextSymbolizer version="1.1.0" xsi:schemaLocation="http://www.opengis.net/se Symbolizer.xsd"
xmlns="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
uom="http://www.opengeospatial.org/se/units/pixel">
<Name>MyTextSymbolizer</Name>
<Description>
<Title>Example TextSymbolizer</Title>
<Abstract>This is just an example of a text symbolizer using the FormatNumber function.</Abstract>
</Description>
<Geometry>
<ogc:PropertyName>locatedAt</ogc:PropertyName>
</Geometry>
<Label>
<ogc:PropertyName>hospitalName</ogc:PropertyName> (
<FormatNumber fallbackValue="">
<NumericValue>
<ogc:PropertyName>numberOfBeds</ogc:PropertyName>
</NumericValue>
<Pattern>#####</Pattern>
</FormatNumber>)
</Label>
<Font>
<SvgParameter name="font-family">Arial</SvgParameter>
<SvgParameter name="font-family">Sans-Serif</SvgParameter>
<SvgParameter name="font-style">italic</SvgParameter>
<SvgParameter name="font-size">10</SvgParameter>
</Font>
<Halo/>
<Fill>
<SvgParameter name="fill">#000000</SvgParameter>
</Fill>
</TextSymbolizer>
53
05-077r4
C.9 RasterSymbolizer 1
<?xml version="1.0" encoding="UTF-8"?>
<RasterSymbolizer version="1.1.0" xsi:schemaLocation="http://www.opengis.net/se Symbolizer.xsd"
xmlns="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Opacity>1.0</Opacity>
<OverlapBehavior>AVERAGE</OverlapBehavior>
<ColorMap>
<Categorize fallbackValue="#78c818">
<LookupValue>Rasterdata</LookupValue>
<Value>#00ff00</Value>
<Threshold>-417</Threshold>
<Value>#00fa00</Value>
<Threshold>-333</Threshold>
<Value>#14f500</Value>
<Threshold>-250</Threshold>
<Value>#28f502</Value>
<Threshold>-167</Threshold>
<Value>#3cf505</Value>
<Threshold>-83</Threshold>
<Value>#50f50a</Value>
<Threshold>-1</Threshold>
<Value>#64f014</Value>
<Threshold>0</Threshold>
<Value>#7deb32</Value>
<Threshold>30</Threshold>
<Value>#78c818</Value>
<Threshold>105</Threshold>
<Value>#38840c</Value>
<Threshold>300</Threshold>
<Value>#2c4b04</Value>
<Threshold>400</Threshold>
<Value>#ffff00</Value>
<Threshold>700</Threshold>
<Value>#dcdc00</Value>
<Threshold>1200</Threshold>
<Value>#b47800</Value>
<Threshold>1400</Threshold>
<Value>#c85000</Value>
<Threshold>1600</Threshold>
<Value>#be4100</Value>
<Threshold>2000</Threshold>
<Value>#963000</Value>
<Threshold>3000</Threshold>
<Value>#3c0200</Value>
<Threshold>5000</Threshold>
<Value>#ffffff</Value>
<Threshold>13000</Threshold>
<Value>#ffffff</Value>
</Categorize>
</ColorMap>
<ShadedRelief/>
</RasterSymbolizer>
54
05-077r4
C.10 RasterSymbolizer 2
<?xml version="1.0" encoding="UTF-8"?>
<RasterSymbolizer version="1.1.0" xsi:schemaLocation="http://www.opengis.net/se Symbolizer.xsd"
xmlns="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Opacity>1.0</Opacity>
<ChannelSelection>
<RedChannel>
<SourceChannelName>1</SourceChannelName>
<ContrastEnhancement>
<Histogram/>
</ContrastEnhancement>
</RedChannel>
<GreenChannel>
<SourceChannelName>2</SourceChannelName>
<ContrastEnhancement>
<GammaValue>2.5</GammaValue>
</ContrastEnhancement>
</GreenChannel>
<BlueChannel>
<SourceChannelName>3</SourceChannelName>
<ContrastEnhancement>
<Normalize/>
</ContrastEnhancement>
</BlueChannel>
</ChannelSelection>
<OverlapBehavior>LATEST_ON_TOP</OverlapBehavior>
<ColorMap>
<Interpolate fallbackValue="#dddddd">
<LookupValue>Rasterdata</LookupValue>
<InterpolationPoint>
<Data>0</Data>
<Value>#000000</Value>
</InterpolationPoint>
<InterpolationPoint>
<Data>255</Data>
<Value>#ffffff</Value>
</InterpolationPoint>
</Interpolate>
</ColorMap>
<ContrastEnhancement>
<GammaValue>1.0</GammaValue>
</ContrastEnhancement>
</RasterSymbolizer>
55