咱们在ArcMap中能够直接经过symbol功能对图层进行定制化配图。可是,若是咱们将配好图的shp图层在GeoServer中发布时,会发现图层样式彻底丢失了。其实缘由很简单,用ArcMap配好的图层,其样式文件并非保存在shp中,而是保存在mxd或者msd中。服务器
那么如何才能让GeoServer发布的图层也能达到定制化配图的效果呢?架构
SLD是风格化图层描述器(Styled Layer Descriptor)的简称,是2005年OGC提出的一个标准,这个标准在必定条件下容许WMS服务器对地图可视化的表现形式进行扩展。在没有SLD以前,只能使用一些已经在服务器上规定好的样式来对地图进行可视化。而当使用了实现了SLD标准以后,它容许咱们从客户端来对地图进行定义本身的样式,分级显示等操做,极大的扩展了地图可视化的灵活性。字体
该SLD-规范是采用XML定义地图显示样式,经过自定义SLD来配置地图图层渲染的可视化风格,能够设置过滤器,自定义图例等。rule是SLD最重要的一个元素,由于她容许根据给定的某个参数(使用过滤器)对数据集进行分类,全部的与分类有关的重要参数都必须在rule元素中设置。编码
对于使用SLD来进行地图的自定义样式,则必须结合使用SE(Symbology Encoding)这个标准。SE是OGC的另外一个标准,这个也是基于XML模式定义的,这个标准容许咱们自定义不一样的符号样式来表达地图上不一样的要素。SLD文件使用这种语言,这样在地图渲染时地图服务能够解释由用户定义的样式。spa
SLD文档的元素架构以下:3d
一个SLD样式文档通常包含一个部分,而最重要的以下:orm
FeatureTypeStyle:这一部分是整个样式文档的根节点,并说明什么是它的样式将被应用的特征类型。FeatureTypeStyle包含一个或者多个Rule元素,Rule元素容许有条件的映射。xml
RULE(规则):规则是根据属性条件和地图比例尺来对要素进行分组渲染,通常RULE中只容许渲染一种类型的要素,即点,线,面等其中的一种,可是能够和注记同时使用。blog
Symbolizer(符号):Symbolizer指定数据应该如何可视化,在1.0的标准中包含五忠类型的Symbolizer,分别是PointSymbolizer(点符号)、LineSymbolizer(线符号)、PloygonSymbolizer(面符号)、TextSymbolizer(注记)、RasterSymbolizer(栅格)。图片
经过SLD能够设置的不只仅是简单的颜色和厚度。点能够设置成经常使用的形状,如圆形,方形,星形,甚至能够是自定义的图片图形或文字来指定;线能够渲染成虚线或者点虚线等,多边形能够填充自定义的平铺图像,样式能够基于数据的属性给定,以致于要素可以
被渲染成不一样的风格。
经常使用参数说明:
符号 |
含义 |
<Name> |
样式名称 |
<FeatureTypeStyle> |
要素样式 |
<Rule> |
规则 |
<ogc:Filter> |
过滤器 |
<ogc:PropertyIsBetween> |
用来定义在两个属性值之间的过滤器 |
<ogc:PropertyIsLessThan> |
用来定义在小于某个属性值的过滤器 |
<ogc:PropertyIsGreaterThan> |
用来定义在大于某个属性值的过滤器 |
<ogc:PropertyName> |
属性字段名 |
<ogc:Literal> |
属性值 |
<PointSymbolizer> |
点标记器 |
<LineSymbolizer> |
线标记器 |
<PolygonSymbolizer> |
面标记器 |
<CssParameter name="fill"> |
填充颜色 |
<CssParameter name="font-family"> |
字体 |
<CssParameter name="font-style"> |
字体样式 |
<CssParameter name="font-size"> |
字体大小 |
…PolygonSymbolizer |
|
……Fill |
填充 |
………CssParameter name="fill" |
颜色 |
………CssParameter name="fill-opacity" |
透明度 |
……Stroke |
边界 |
………CssParameter name="stroke" |
颜色 |
………CssParameter name="stroke-width" |
宽度 |
带有边界透明的多边形
SLD:
<FeatureTypeStyle> |
效果:
…PolygonSymbolizer |
|
……Fill |
|
………GraphicFill |
|
…………Graphic |
|
……………ExternalGraphic |
|
………………OnlineResource |
图片来源 |
………………Format |
图片格式 |
……………Size |
大小 |
带有使用图片填充的多边形
SLD:
<FeatureTypeStyle> <Fill> <GraphicFill> <Graphic> <ExternalGraphic> <OnlineResource xlink:type="simple" xlink:href="20101.gif" /> <Format>image/gif</Format> </ExternalGraphic> <Size>20</Size> </Graphic> </GraphicFill> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> |
效果:
…TextSymbolizer |
|
……Label |
|
………ogc:PropertyName |
注记的属性字段名称 |
……Font |
字体 |
………CssParameter name="font-family" |
字体类型 |
………CssParameter name="font-size" |
字体大小 |
………CssParameter name="font-style" |
字体样式 |
………CssParameter name="font-weight" |
字体加粗 |
……LabelPlacement |
注记的位置 |
………PointPlacement |
注记点位置 |
…………AnchorPoint |
|
……………AnchorPointX |
|
……………AnchorPointY |
|
…………Displacement |
|
……………Displacement X |
|
……………Displacement Y |
|
…………Rotation |
设置旋转角度 |
……Fill |
填充 |
………CssParameter name="fill" |
填充颜色 |
带有注记的填充色透明的多边形
SLD:
<TextSymbolizer>
|
效果:
…PolygonSymbolizer |
|
……Rule |
|
………Filter |
|
………PolygonSymbolizer |
|
………TextSymbolizer |
|
根据属性字段值范围用不一样颜色渲染。
SLD:
<FeatureTypeStyle> <Rule> <Name>SmallCOMM</Name> <Title>Less Than 510104024008</Title> <ogc:Filter> <ogc:PropertyIsLessThan> <ogc:PropertyName>COMID</ogc:PropertyName> <ogc:Literal>510104024008</ogc:Literal> </ogc:PropertyIsLessThan> </ogc:Filter> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#66FF66</CssParameter> </Fill> </PolygonSymbolizer> </Rule> <Rule> <Name>MediumCOMM</Name> <Title>510104024008 to 510104024011</Title> <ogc:Filter> <ogc:And> <ogc:PropertyIsGreaterThanOrEqualTo> <ogc:PropertyName>COMID</ogc:PropertyName> <ogc:Literal>510104024008</ogc:Literal> </ogc:PropertyIsGreaterThanOrEqualTo> <ogc:PropertyIsLessThan> <ogc:PropertyName>COMID</ogc:PropertyName> <ogc:Literal>510104024011</ogc:Literal> </ogc:PropertyIsLessThan> </ogc:And> </ogc:Filter> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#33CC33</CssParameter> </Fill> </PolygonSymbolizer> </Rule> <Rule> <Name>LargeCOMM</Name> <Title>Greater Than 510104024011</Title> <ogc:Filter> <ogc:PropertyIsGreaterThan> <ogc:PropertyName>COMID</ogc:PropertyName> <ogc:Literal>510104024011</ogc:Literal> </ogc:PropertyIsGreaterThan> </ogc:Filter> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#009900</CssParameter> </Fill> </PolygonSymbolizer> </Rule> </FeatureTypeStyle> |
效果:
在SLD中还根据3.3的注记写法,增长了注记的显示。
…PolygonSymbolizer |
|
……Rule |
|
………MinScaleDenominator |
|
………MaxScaleDenominator |
|
………PolygonSymbolizer |
|
………TextSymbolizer |
|
经过设置不一样比例尺时的显示颜色,展现不一样的效果。
SLD:
<FeatureTypeStyle> <Rule> <Name>Large</Name> <MaxScaleDenominator>5746</MaxScaleDenominator> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#CCCCCC</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">7</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> <Rule> <Name>Medium</Name> <MinScaleDenominator>5746</MinScaleDenominator> <MaxScaleDenominator>12000</MaxScaleDenominator> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#0000CC</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">4</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> <Rule> <Name>Small</Name> <MinScaleDenominator>12000</MinScaleDenominator> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#0000CC</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> </FeatureTypeStyle> |
效果图:
初始时,某个要素的注记没法显示:
放大后其又能够出现:
出现这种状况,每每是由于注记显示的地方在另一个要素下面。
解决方法比较简单,利用LabelPalcement元素调整注记显示的地方即可解决。例如:
<LabelPlacement> |
出现这样的状况,通常是SLD中未进行正确的格式编码赋值。
首先将编码改为GB2312。例如:
<?xml version="1.0" encoding="GB2312"?> |
若是发现仍是乱码,则颇有多是目前字体不支持中文。
例如当字体是Arial时,不支持中文:
<CssParameter name="font-family">Arial</CssParameter> |
将字体改为微软雅黑,则注记再也不重现乱码:
<CssParameter name="font-family">微软雅黑</CssParameter> |