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

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 版本的定义与最新版本不太一样。
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>
效果:
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