WMS图层使用SLD

通过使用 SLD , 可以动态修改地图的样式。

本页面描述了在使用 Mapserver 的 WMS Getmap 请求中利用样式化层描述符(SLD)支持的过程。SLD支持服务器端(能够读取 SLD 并将其与 getmap 请求一起应用)和客户端( 包括将SLD请求发送到服务器并从地图服务器的 Mapfile 动态生成SLD文件)。在4.2版中向MapServer添加了SLD支持。

SLD 的定义与效果

SDL 使用 XML 格式进行定义,先看一下实例:

01 <?xml version="1.0" encoding="UTF-8"?>
02 <StyledLayerDescriptor version="1.0.0"
03   xmlns="http://www.opengis.net/sld"
04   xmlns:ogc="http://www.opengis.net/ogc"
05   xmlns:xlink="http://www.w3.org/1999/xlink"
06   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
07   xsi:schemaLocation="http://www.opengis.net/sld
08   http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
09   <NamedLayer>
10     <Name>states</Name>
11     <UserStyle>
12       <Title>xxx</Title>
13       <FeatureTypeStyle>
14         <Rule>
15           <LineSymbolizer>
16             <Geometry>
17               <ogc:PropertyName>center-line</ogc:PropertyName>
18             </Geometry>
19             <Stroke>
20               <CssParameter name="stroke">#0000ff</CssParameter>
21             </Stroke>
22           </LineSymbolizer>
23         </Rule>
24       </FeatureTypeStyle>
25     </UserStyle>
26   </NamedLayer>
27 </StyledLayerDescriptor>

效果:

![使用SLD的GetMap操作](http://mapfig.cn/cgi-bin/mapserv?map=/owg/xmfb2.map&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMAP&LAYERS=states&BBOX=73,3,136,54&CRS=CRS:84&INFO_FORMAT=text/html&format=image/png&width=200&height=150&styles=&SLD=http://mapfig.cn/sld_world_lyr.xml)

使用 GetMap 获取部分地图

URL 解析如下:

>>> [print(idx, x) for idx, x  in enumerate(url.split('&'))]
0 http://mapfig.cn/cgi-bin/mapserv?map=/owg/xmfb2.map
1 SERVICE=WMS
2 VERSION=1.3.0
3 REQUEST=GetMAP
4 LAYERS=states
5 BBOX=73,3,136,54
6 CRS=CRS:84
7 INFO_FORMAT=text/html
8 format=image/png
9 width=200
10 height=150
11 styles=
12 SLD=http://mapfig.cn/sld_world_lyr.xml

SLD 1.1.0 的定义与效果

SLD 1.1.0 版本的定义与最新版本不太一样。

01 <?xml version="1.0" encoding="UTF-8"?>
02 <StyledLayerDescriptor version="1.1.0"
03   xmlns="http://www.opengis.net/sld"
04   xmlns:se="http://www.opengis.net/se"
05   xmlns:ogc="http://www.opengis.net/ogc"
06   xmlns:xlink="http://www.w3.org/1999/xlink"
07   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
08   xsi:schemaLocation="http://www.opengis.net/sld
09   http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd">
10 <NamedLayer>
11   <se:Name>states</se:Name>
12     <UserStyle>
13       <se:Name>xxx</se:Name>
14       <se:FeatureTypeStyle>
15         <se:Rule>
16           <se:LineSymbolizer>
17             <se:Geometry>
18               <ogc:PropertyName>center-line</ogc:PropertyName>
19             </se:Geometry>
20             <se:Stroke>
21               <se:SvgParameter name="stroke">#0000ff</se:SvgParameter>
22             </se:Stroke>
23           </se:LineSymbolizer>
24         </se:Rule>
25       </se:FeatureTypeStyle>
26     </UserStyle>
27   </NamedLayer>
28 </StyledLayerDescriptor>

效果:

使用SLD1.0.0的效果

使用 GetMap 获取部分地图

URL 解析如下:

>>> [print(idx, x) for idx, x  in enumerate(url.split('&'))]
0 http://mapfig.cn/cgi-bin/mapserv?map=/owg/xmfb2.map
1 SERVICE=WMS
2 VERSION=1.3.0
3 REQUEST=GetMAP
4 LAYERS=states
5 BBOX=73,3,136,54
6 CRS=CRS:84
7 INFO_FORMAT=text/html
8 format=image/png
9 width=200
10 height=150
11 styles=
12 SLD=http://mapfig.cn/sld_world_lyr110.xml