2.4. SLD-图层样式描述

2.4.1. 概述

SLD(OpenGIS® Styled Layer Descriptor)当前版本是 1.1.0。 SLD 是一种描述地图图层样式的标准,一般用于WMS。 一个地图不仅 包括数据源组成,还需要对数据进行符号化和渲染, SLD 就是这个定义地图图层符号化和渲染信息的标准。

2.4.2. SLD Schema

和 GML 类似,SLD 也通过一些 XML Schema 来定义 SLD 文档的结构, 这些定义可以通过访问 http://schemas.opengis.net/sld/ 得到。 SLD 的 Schema 还依赖其它的OGC 标准的 Schema ,其中包括:GML [11] 、Filter Encoding [12] 、Symbology Encoding [13]

2.4.3. SLD 简单例子

下面是一个 SLD 的简单例子,这里对一个多边形图层进行了填充样式的定义:

<?xml version= "1.0" encoding= "UTF-8" ?>
<StyledLayerDescriptor version= "1.1.0"
xsi:schemaLocation= "http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns= "http://www.opengis.net/sld"
xmlns:ogc= "http://www.opengis.net/ogc"
xmlns:se= "http://www.opengis.net/se"
xmlns:xlink= "http://www.w3.org/1999/xlink"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" >
<NamedLayer>
<se:Name>OCEANSEA_1M:Foundation</se:Name>
<UserStyle>
<se:Name>GEOSYM</se:Name>
<IsDefault>1</IsDefault>
<se:FeatureTypeStyle>
<se:FeatureTypeName>Foundation</se:FeatureTypeName>
<se:Rule>
<se:Name>main</se:Name>
<se:PolygonSymbolizer
uom= "http://www.opengeospatial.org/sld/units/pixel" >
<se:Name>MySymbol</se:Name>
<se:Description>
<se:Title>Example Symbol</se:Title>
<se:Abstract>This is just a simple example.</se:Abstract>
</se:Description>
<se:Geometry>
<ogc:PropertyName>GEOMETRY</ogc:PropertyName>
</se:Geometry>
<se:Fill>
<se:SvgParameter name= "fill" >#96C3F5</se:SvgParameter>
</se:Fill>
</se:PolygonSymbolizer>
</se:Rule>
</se:FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>

其中关键的还是在于 Symbology Encoding(SE)标准定义的符号化和渲染的方式, 由于 SE 和 SLD 的依赖关系,因此,在这里也顺便通过几个简单的例子对 SE 进行一下介绍。

2.4.4. SE 示例

在 SE 标准中给出了几个符号化定义的例子,非常的浅显易懂, 这几个例子分别定义了点、线、面、文本等内容应该使用什么样的符号化方式显示出来, 而在其中出现的 Mark、Stroke、Fill 等元素也很容易理解, 下面就从这几个例子大致浏览一下 SE 标准的定义。

点数据符号化:

<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>

线数据符号化:

<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>

面数据符号化:

<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"
38
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>

文本标注:

<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>
</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>