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://webgis.cn/cgi-bin/mapserv?map=/owg/mfb2.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://webgis.cn/sld_world_lyr.xml)

使用 GetMap 获取部分地图

URL 解析如下:

>>> [print(idx, x) for idx, x  in enumerate(url.split('&'))]
0 http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb2.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://webgis.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>country</se:Name>
14       <se:FeatureTypeStyle>
15         <se:Rule>
16           <se:Name>country-rule1</se:Name>
17           <se:PolygonSymbolizer>
18             <se:Geometry>
19               <ogc:PropertyName>center-line2</ogc:PropertyName>
20             </se:Geometry>
21             <se:Fill>
22               <se:SvgParameter name="fill">#e8e8e8</se:SvgParameter>
23             </se:Fill>
24             <se:Stroke>
25               <se:SvgParameter name="stroke">#0000ff</se:SvgParameter>
26               <se:SvgParameter name="stroke-width">3</se:SvgParameter>
27             </se:Stroke>
28           </se:PolygonSymbolizer>
29         </se:Rule>
30       </se:FeatureTypeStyle>
31     </UserStyle>
32   </NamedLayer>
33   <NamedLayer>
34     <se:Name>states_line</se:Name>
35     <UserStyle>
36       <se:Name>country</se:Name>
37       <se:FeatureTypeStyle>
38         <se:Rule>
39           <se:Name>country-rule1</se:Name>
40           <se:LineSymbolizer>
41             <se:Geometry>
42               <ogc:PropertyName>center-line</ogc:PropertyName>
43             </se:Geometry>
44             <se:Stroke>
45               <se:SvgParameter name="stroke">#ff0000</se:SvgParameter>
46             </se:Stroke>
47           </se:LineSymbolizer>
48         </se:Rule>
49       </se:FeatureTypeStyle>
50     </UserStyle>
51   </NamedLayer>
52 </StyledLayerDescriptor>

效果:

使用SLD1.0.0的效果

使用 GetMap 获取部分地图

URL 解析如下:

>>> [print(idx, x) for idx, x  in enumerate(url.split('&'))]
0 http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb2.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://webgis.cn/sld_world_lyr110.xml