2.6. 构建包含多个图层的地图

MapServer通过将层堆叠在一起来构建地图。在每次渲染时,它都被放置在堆栈的顶部。每个层都显示从单个数据集中选择的要素。可以使用Unix正则表达式、字符串比较和逻辑表达式选择要显示的功能。由于数据的相似性和样式参数(如比例、颜色和标签)的相似性,可将层视为主题。层的显示是在交互控制下进行的,允许用户选择要渲染的层。虽然不可能动态生成层,但可以使用动态数据填充空层并通过URL操作。

2.6.1. 查看示例

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfml2.map&layer=states_poly&layer=states_line&layer=wriver&mode=map

要使地图更加丰富,使用新的继续添加新数据河流数据 LAYER 对象。每一层的定义都是相对独立的,互不相关。

以下是Mapfile(mfml2.map):

 1MAP
 2    IMAGETYPE "PNG"
 3    EXTENT -180 -90 180 90
 4    SIZE 600 300
 5    SHAPEPATH "/gdata"
 6    IMAGECOLOR 255 255 255
 7    FONTSET "../fonts/fonts.list"
 8    LAYER
 9        NAME "states_poly"
10        DATA "wcountry.shp"
11        STATUS OFF
12        TYPE POLYGON
13        LABELITEM "NAME"
14        CLASS
15            NAME "States"
16            STYLE
17                COLOR 232 232 232
18            END
19        END
20    END
21    LAYER
22        NAME "states_line"
23        DATA "wcountry.shp"
24        STATUS OFF
25        TYPE LINE
26        CLASS
27            NAME "State Boundary"
28            STYLE
29                COLOR 132 132 32
30            END
31        END
32    END
33    LAYER
34        NAME "wroads"
35        DATA "wroads.shp"
36        STATUS OFF
37        TYPE LINE
38        CLASS
39            NAME "World Road"
40            STYLE
41                COLOR 100 200 100
42            END
43        END
44    END
45    LAYER
46        NAME "wriver"
47        DATA "wriver.shp"
48        STATUS OFF
49        TYPE LINE
50        CLASS
51            NAME "World River"
52            STYLE
53                COLOR 0 0 255
54            END
55        END
56    END
57END

Roads图层地图( wroads )也在上面的 Mapfile 中定义,并且该层被进一步添加到下面的地图中。

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfml2.map&layer=states_poly&layer=states_line&layer=wriver&layer=wroads&mode=map

2.6.2. 图层的顺序

注意各图层的顺序。在这张地图中,河流层在道路之上,这与通常的制图原则不一致。通常,道路层放置在河层之上。

传递参数时调换位置,效果如下,可以看到与上图相同。不能通过将参数传递给URL来更改Mapfile中定义图层的顺序。

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfml2.map&layer=states_poly&layer=states_line&layer=wroads&layer=wriver&mode=map

如果要修改图层的顺序,则只能在Mapfile中进行修改:

 1MAP
 2    IMAGETYPE "PNG"
 3    EXTENT -180 -90 180 90
 4    SIZE 600 300
 5    SHAPEPATH "/gdata"
 6    IMAGECOLOR 255 255 255
 7    FONTSET "../fonts/fonts.list"
 8    LAYER
 9        NAME "states_poly"
10        DATA "wcountry.shp"
11        STATUS OFF
12        TYPE POLYGON
13        LABELITEM "NAME"
14        CLASS
15            NAME "States"
16            STYLE
17                COLOR 232 232 232
18            END
19        END
20    END
21    LAYER
22        NAME "states_line"
23        DATA "wcountry.shp"
24        STATUS OFF
25        TYPE LINE
26        CLASS
27            NAME "State Boundary"
28            STYLE
29                COLOR 132 132 32
30            END
31        END
32    END
33    LAYER
34        NAME "wriver"
35        DATA "wriver.shp"
36        STATUS OFF
37        TYPE LINE
38        CLASS
39            NAME "World River"
40            STYLE
41                COLOR 0 0 255
42            END
43        END
44    END
45    LAYER
46        NAME "wroads"
47        DATA "wroads.shp"
48        STATUS OFF
49        TYPE LINE
50        CLASS
51            NAME "World Road"
52            STYLE
53                COLOR 100 200 100
54            END
55        END
56    END
57END

可以看到,虽然不明显,但河流层在道路层下面。

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfml.map&layer=states_poly&layer=states_line&layer=wroads&layer=wriver&mode=map