用样式层绘制地图

较为高级的 WMS 用“样式层”来描述一幅地图。可以认为一个样式层是由符号化的要素组成的一个透明层。一幅地图是由这些样式层按一定的顺序组成的,通常称这些样式层是Z值排序。用户可以通过增加或删除样式层来定义复杂或简单的地图。一个样式层实际上是一个图层和一个样式的组合,从概念上看,图层定义了一个要素流,而样式定义了这些要素如何符号化。在一个 WMS 过程中,一幅地图的绘制样式是根据 LAYERS 和 STYLES 请求参数指定的。

命名样式的支持

Named styles support are introduced in MapServer 5.2. The support is base on MS RFC 39: Support of WMS/SLD Named Styles.

MapServer 5.2 introduces the possibility to assign a group to a series of classes defined on a layer object using two new non-mandatory keywords CLASSGROUP (at the layer level) and GROUP at the class level:

LAYER
    ...
    CLASSGROUP "group1"
    ...
    CLASS
        NAME "name1"
        GROUP "group1"
        ...
    END
    CLASS
        NAME "name2"
        GROUP "group2"
        ...
    END
    CLASS
        NAME "name3"
        GROUP "group1"
        ...
    END
    ...

At rendering time, if the CLASSGROUP is defined, only classes that have the same group name would be used. Based on this concept, WMS/SLD support uses the class groups as named styles. Each group of classes is considered equivalent to a named style:

The GetCapbilities request will output all the styles that are available
The GetMap request can use the STYLES parameter to specify a named style
The GetLegendGraphic can use the STYLES parameter to specify a named style

实例

这里给出一个实例:

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb5.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=group1

Mapfile 如下:

01 MAP
02     NAME "named-style_"
03     IMAGETYPE "png24"
04     EXTENT -180 -90 180 90
05     SIZE 600 300
06     SHAPEPATH "/gdata"
07     SYMBOLSET "../symbols/symbols35.sym"
08     FONTSET "../fonts/fonts.list"
09     OUTPUTFORMAT
10         NAME "png"
11         DRIVER "AGG/PNG"
12         MIMETYPE "image/png"
13         IMAGEMODE RGB
14         EXTENSION "png"
15         FORMATOPTION "GAMMA=0.75"
16     END
17     WEB
18         IMAGEPATH "/owg/ms_tmp/"
19         IMAGEURL "/ms_tmp/"
20         METADATA
21             "wms_title" "WMS Demo Server"
22             "wms_version" "1.3.0"
23             "wms_onlineresource" "http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb5.map&"
24             "wms_srs" "EPSG:4326"
25             "wms_enable_request" "*"
26             "ows_enable_request" "*"
27             "wms_feature_info_mime_type" "text/html"
28             "wms_format" "image/png"
29         END
30     END
31     PROJECTION
32         "init=epsg:4326"
33     END
34     LAYER
35         NAME "wcountry"
36         DATA "wcountry.shp"
37         STATUS OFF
38         TYPE POLYGON
39         METADATA
40             "wms_title" "world contry"
41             "wms_version" "1.3.0"
42             "wms_srs" "EPSG:4326 EPSG:3857"
43             "wms_enable_request" "*"
44             "ows_enable_request" "*"
45             "wms_format" "image/png"
46         END
47         PROJECTION
48             "init=epsg:4326"
49         END
50         CLASSGROUP "grploy"
51         CLASS
52             NAME "Poly Style 1"
53             GROUP "psty1"
54             STYLE
55                 COLOR 232 232 232
56                 OUTLINECOLOR 32 32 32
57             END
58         END
59         CLASS
60             NAME "Poly Style 2"
61             GROUP "psty2"
62             STYLE
63                 COLOR 204 204 153
64                 OUTLINECOLOR 0 255 255
65             END
66         END
67         CLASS
68             NAME "Line Style"
69             GROUP "lsty"
70             STYLE
71                 OUTLINECOLOR 255 0 0
72             END
73         END
74     END
75 END

使用 GetCapabilities , 会返回:

<Style>
  <Name>group1</Name>
  <Title>group1</Title>
  <LegendURL width="72" height="20">
     <Format>image/png</Format>
     <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" ...
  </LegendURL>
</Style>

考虑下面的一个 WMS 请求示例片断:

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb5.map&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMAP&LAYERS=states,states&BBOX=73,3,136,54&CRS=CRS:84&INFO_FORMAT=text/html&format=image/png&width=200&height=150&styles=group3,group2

这里有3个样式层:

  • states: group1
  • states: group2
  • states: group3

它们是按一定的顺序叠加的。一个图层可以用不同的样式绘制多次,以达到用户需要的效果。下例是对道路图层用 casingcenterline 两种样式分别绘制:

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb5.map&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMAP&LAYERS=states,states&BBOX=73,3,136,54&CRS=CRS:84&INFO_FORMAT=text/html&format=image/png&width=200&height=150&styles=group1,group2

一个 WMS 本身可能不知道样式层如何进行有意义的组合,这一切都由客户端决定。WMS 用名称去标识样式和层,其他文档引用这种命名的层和样式,这是目前 WMS 定义样式层的唯一方法。