5.6. 使用样式层绘制地图

更高级的WMS使用“样式层”来描述地图,可将样式层视为由符号元素组成的透明层。地图由这些样式层按特定顺序组成,通常称为Z值顺序。用户可以通过添加或删除样式层来定义复杂或简单的地图。样式层实际上是层和样式的组合。从概念上讲,图层定义了要素流,样式定义了这些要素的符号化方式。在WMS流程中,地图的绘制样式是根据图层和样式请求参数指定的。

5.6.1. 支持命名样式

MapServer5.2中引入了命名样式支持。支持基于MS RFC 39:WMS/SLD命名样式的支持。

MapServer 5.2引入了使用两个新的非强制关键字,CLASSGROUP(在层级别)和GROUP在类级别将组分配给在Layer对象上定义的一系列类的可能性:

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

在渲染时,如果定义了CLASSGROUP,则只使用具有相同组名的类。基于此概念,WMS/SLD支持使用类组作为命名样式。每组类都被视为等同于一个命名样式:

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

5.6.2. 示例

下面是一个例子:

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如下:

 1MAP
 2    NAME "named-style_"
 3    IMAGETYPE "png24"
 4    EXTENT -180 -90 180 90
 5    SIZE 600 300
 6    SHAPEPATH "/gdata"
 7    SYMBOLSET "../symbols/symbols35.sym"
 8    FONTSET "../fonts/fonts.list"
 9    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
75END

使用 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

有三个样式层:

  • 州:1组

  • 州:2组

  • 州:3组

它们是按一定的顺序堆放的。可以使用不同的样式多次绘制一个层,以达到所需的效果。下面的示例使用 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定义样式层的唯一方式。