SLD整体介绍
简介
SLD是一种标记语言,全称Styled Layer Descriptor,也就是图层样式描述(不好意思,翻译水平有限,看懂就行了),它是一种基于XML的标记语言,GeoServer中的样式支持SLD。
配置参考
geoserver官网上有关于SLD配置的全套参考说明,见:https://docs.geoserver.org/stable/en/user/styling/index.html。
强烈建议参考该官方文档,因为它非常详细,还有示例,其中列举了所有边界情况并且对我们的好多疑问都有回答。以上的简介就是这个文档中的简介,通俗易懂。
地址往前回退一步就是所有geoserver的文档说明:https://docs.geoserver.org/stable/en/user/index.html
自动化配置工具及其局限性
主要使用udig和qgis:
udig下载地址:http://udig.refractions.net/download/
QGIS:https://qgis.org/en/site/forusers/download.html
udig有绿色版,QGIS要安装,后者比较大。
这两个配置工具是很方便,可以傻瓜式操作并直接导出sld,局限性是有些sld支持的配置项在工具里面设置不方便,有些也不支持,比如过滤器,如果不了解sld过滤器语法的话,在配置工具里面也很难设置,因为工具里面也是一个文本框让你手动输入这些过滤器,没有支持的简易操作。所以还是看看sld官方文档手动编写xml来的直接快速。但是我们可以用它生成的sld作为参考。
为点图层设置图标
<sld:Rule>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:ExternalGraphic>
<sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="********.png"></sld:OnlineResource>
<sld:Format>image/png</sld:Format>
</sld:ExternalGraphic>
<sld:Size>20</sld:Size>
</sld:Graphic>
</sld:PointSymbolizer>
</sld:Rule>
这里用的是OnlineResource,这样可以将图片作为网络资源引用进来。如果用udig,该工具可以生成一个图片的链接,当然文档是存在本地,你也可以将图片放在网络的什么地方,这里提供一个url即可,
根据图层其中一个属性过滤设置多个比例尺范围
用filter实现过滤,我们根据一个图层的一个属性设置过滤条件,这样生成多个rules,每个rules有个过滤条件,有最大最小可见比例尺,并将图标也定义在对应的rules中。
<sld:Rule>
<ogc:Filter>
<ogc:Or>
<ogc:And>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>altitude</ogc:PropertyName>
<ogc:Literal>8000</ogc:Literal>
</ogc:PropertyIsGreaterThan>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>altitude</ogc:PropertyName>
<ogc:Literal>16000</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>altitude</ogc:PropertyName>
<ogc:Literal>8000</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Or>
</ogc:Filter>
<sld:MinScaleDenominator>16000</sld:MinScaleDenominator>
<sld:MaxScaleDenominator>32000</sld:MaxScaleDenominator>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:ExternalGraphic>
<sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="*****.png"></sld:OnlineResource>
<sld:Format>image/png</sld:Format>
</sld:ExternalGraphic>
<sld:Size>20</sld:Size>
</sld:Graphic>
</sld:PointSymbolizer>
</sld:Rule>
<sld:Rule>
<ogc:Filter>
<ogc:Or>
<ogc:And>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>altitude</ogc:PropertyName>
<ogc:Literal>16000</ogc:Literal>
</ogc:PropertyIsGreaterThan>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>altitude</ogc:PropertyName>
<ogc:Literal>32000</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>altitude</ogc:PropertyName>
<ogc:Literal>16000</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Or>
</ogc:Filter>
<sld:MinScaleDenominator>32000</sld:MinScaleDenominator>
<sld:MaxScaleDenominator>64000</sld:MaxScaleDenominator>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:ExternalGraphic>
<sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="*****.png"></sld:OnlineResource>
<sld:Format>image/png</sld:Format>
</sld:ExternalGraphic>
<sld:Size>20</sld:Size>
</sld:Graphic>
</sld:PointSymbolizer>
</sld:Rule>
<sld:Rule>
<ogc:Filter>
<ogc:Or>
<ogc:And>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>altitude</ogc:PropertyName>
<ogc:Literal>32000</ogc:Literal>
</ogc:PropertyIsGreaterThan>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>altitude</ogc:PropertyName>
<ogc:Literal>64000</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>altitude</ogc:PropertyName>
<ogc:Literal>32000</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Or>
</ogc:Filter>
<sld:MinScaleDenominator>64000</sld:MinScaleDenominator>
<sld:MaxScaleDenominator>125000</sld:MaxScaleDenominator>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:ExternalGraphic>
<sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="*****.png"></sld:OnlineResource>
<sld:Format>image/png</sld:Format>
</sld:ExternalGraphic>
<sld:Size>20</sld:Size>
</sld:Graphic>
</sld:PointSymbolizer>
</sld:Rule>
如上代码所示,我们根据属性altitude定义了三个不同的比例尺显示范围:
- 8000<=altitude<160000时,显示比例尺范围在1:32000至1:16000之间。
- 16000<=altitude<320000时,显示比例尺范围在1:64000至1:32000之间。
- 32000<=altitude<640000时,显示比例尺范围在1:125000至1:64000之间。
注意PropertyIsGreaterThan和PropertyIsLessThan是纯大于小于,不包含等于,所以等于要另外设置PropertyIsEqualTo