2.6. Build a map with multiple layers#

MapServer builds maps by stacking layers together. On every render, it is placed at the top of the stack. Each layer displays features selected from a single dataset. Features to display can be selected using Unix regular expressions, string comparisons and logical expressions. You can think of layers as topics due to the similarity of data and the similarity of style parameters such as scale, color, and labels. The display of layers is under interactive control, allowing the user to select which layers to render. While it is not possible to generate layers dynamically, it is possible to populate empty layers with dynamic data and manipulate them via URL.

2.6.1. View examples#

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

To make the map richer, continue adding new data (river data) using a new LAYER object. The definitions of each layer are relatively independent and have nothing to do with each other.

Here is the map file(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

The roads layer map ( wroads ) is also defined in the Mapfile above and this layer is further added to the map below.

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

2.6.2. Order of layers#

Pay attention to the order of the layers. In this map, the river layer is above the road, which is inconsistent with the usual mapping principles. Usually, the road layer is placed above the river layer.

Swap the position when passing parameters, the effect is as follows, you can see that it is the same as the map above. The order of the layers defined in the Mapfile cannot be changed by passing parameters to the URL.

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

If you want to modify the order of layers, you can only modify it in the 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

You can see that although it is not obvious, the river layer is below the road layer.

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