[SLD (Styled Layer Descriptor)](http://www.opengeospatial.org/standards/sld) -
основанный на базе XML стандарт OGC,
предназначенный для описания символики пространственных данных.
Любой SLD-файл представляет собой документ, имеющий следующую структуру:
Header
FeatureTypeStyle
Rule
Symbolizer
**Header** - заголовок, содержащий метаинформацию и пространства имён XML,
эта часть в большинстве случаев одинакова для всех SLD-документов.
**FeatureTypeStyle** - секция, содержащая набор правил (Rules). Группировка
правил в FeatureTypeStyle выполняется с тем расчётом, что рендеринг данных
осуществляется в порядке их следования, проще говоря слой сначала рендерится
в соответствии с первым FeatureTypeStyle, затем в соответствии со вторым и
так далее. На выходе полученные результаты накладываются друг на друга.
**Rule** - правило применения стиля. Оно может быть задано как глобально, так
и иметь логику некоторого фильтра. Например, используя правила, можно
настроить символику в соответствии с атрибутивными полями слоя или текущим
масштабным уровнем.
**Symbolizer** - секция в которой непосредственно задаётся сама символика.
Symbolizer может принимать одно из пяти значений, назначение которых можно
понять из их названия:
* **PointSymbolizer**
* **LineSymbolizer**
* **PolygonSymbolizer**
* **RasterSymbolizer**
* **TextSymbolizer**
В одном документе SLD может быть несколько секций **FeatureTypeStyles**,
несколько секций **Rule** на каждую секцию **FeatureTypeStyles** и несколько
**Symbolizer** на каждую секцию **Rule**. Пример SLD-документа:
building
xxx
#000080
#FFFFFF
2
highway
xxx
#333333
5
round
highway
xxx
#6699FF
3
round
MapServer поддерживает символику SLD, но с некоторыми оговорками. На настоящий
момент времени (MapServer 6.2.0) не поддерживаются
несколько секций **FeatureTypeStyle** для одного слоя, а также несколько
секций **Rule** внутри **FeatureTypeStyle**. В этом случае для
того, чтобы описать составной символ (например, дорога с обводкой),
нужно создать столько разделов **NamedLayer** с одинаковым именем слоя,
сколько уровней символики предполагает символ. В нашем примере SLD-файл
содержит 2 секции **NamedLayer** для слоя `highway` - согласно первой
слой отрисовывается линией серого цвета толщиной 5 пикселов, а
согласно второй - голубой линией толщиной 3 пиксела.
Подготовленный документ SLD сохраняется в файл, доступный для сервера WMS по
протоколу HTTP. В строке запроса указывается полная ссылка в параметре `SLD`:
http://wms-server/wms?SERVICE=WMS&LAYERS=mylayer&SLD=http://other-server/layer_with_filter.sld
Заметьте, что имя слоя в параметре `LAYERS` и в документе SLD должно совпадать
(в примере и там и там `mylayer`).
Выполните следующий запрос (без указания параметра `SLD`):
http://10.22.0.9/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&BBOX=3368972.100758,8391486.707248,3373825.546823,8394140.813052&CRS=EPSG:3857&WIDTH=640&HEIGHT=400&LAYERS=building,highway&STYLES=,&FORMAT=image/png&TRANSPARENT=TRUE
![][02-wms-sld-01]
И с указанием `SLD`:
http://10.22.0.9/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&BBOX=3368972.100758,8391486.707248,3373825.546823,8394140.813052&CRS=EPSG:3857&WIDTH=640&HEIGHT=400&LAYERS=building,highway&STYLES=,&FORMAT=image/png&TRANSPARENT=TRUE&SLD=http://nextgis.github.io/webgis_course/example.sld
![][02-wms-sld-02]
[02-wms-sld-01]: ../img/02-wms-sld-01.png
[02-wms-sld-02]: ../img/02-wms-sld-02.png