使用多个图层构建地图

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

查看示例

为了使地图内容更加丰富,继续添加新的数据(河流数据),添加的数据使用一个新的 LAYER 对象。各个图层的定义是相对独立的,相互之间没有什么关系。

下面是地图文件(mfml2.map):

01 MAP
02     IMAGETYPE "PNG"
03     EXTENT -180 -90 180 90
04     SIZE 600 300
05     SHAPEPATH "/gdata"
06     IMAGECOLOR 255 255 255
07     FONTSET "../fonts/fonts.list"
08     LAYER
09         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
57 END

上面的 Mapfile 中还定义了道路层图( wroads )下面的地图中进一步添加了这个图层。

图层的顺序

图层的顺序要注意一下。在这个地图中,河流图层是在道路上面的,这与通常制图的原则是不符的,通常情况下会把道路图层放在河流图层的上面。

在传递参数的时候交换一下位置,效果如下,可以看到与上面的地图是一样的。通过传递 URL 的参数无法改变 Mapfile 中定义的图层的顺序 。

想要修改图层的顺序, 只能在 Mapfile 中修改:

01 MAP
02     IMAGETYPE "PNG"
03     EXTENT -180 -90 180 90
04     SIZE 600 300
05     SHAPEPATH "/gdata"
06     IMAGECOLOR 255 255 255
07     FONTSET "../fonts/fonts.list"
08     LAYER
09         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
57 END

可以看到,尽管不是很明显,河流图层到了道路图层的下面了。