使用两个图层的静态地图

查看示例

在这个例子中,该图像生成到这个URL连接的源 <img> 标签:

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfa2.map&layer=world-country&layer=country-line&mode=map

多数传统 MapServer 例子都会这样展示。

这个例子与前面的稍有不同,多边形的颜色进行了修改。

Mapfile说明

首先看一下这个例子使用的MapFile (mfa2.map),这个 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     LAYER
08         NAME "world-country"
09         DATA "wcountry.shp"
10         STATUS OFF
11         TYPE POLYGON
12         CLASS
13             NAME "States"
14             STYLE
15                 COLOR 232 232 232
16             END
17         END
18     END
19     LAYER
20         NAME "country-line"
21         DATA "wcountry.shp"
22         STATUS OFF
23         TYPE LINE
24         CLASS
25             NAME "State Boundary"
26             STYLE
27                 COLOR 132 132 32
28             END
29         END
30     END
31 END

重要的是要记住,MapServer的渲染层是按照他们在mapfile中指定的顺序。Mapfile 中的最后一层是地图渲染结果的顶层,在前面的所有层的上面来构建地图。这意味着,Mapfile 中早一些显示的细节(即,在地图图像中的较低层)可能会被遮住。当渲染多边形层时这是最重要的,因为多边形可以用一个指定的颜色填充。如果地图服务器渲染点层(即,例如,城市的位置),然后渲染状态代表一个多边形层,城市将不可见,除非指定多边形层的颜色是透明的。这个问题很容易补救,将多边形层定义在前面。也可以通过一系列的线(即一个型线层)渲染多边形。由于一条线是一维的,没有要填充的区域,所以下面层的细节仍然是可见的。无填充颜色时,指定颜色为: -1,-1,-1,也可以达到透明度的效果。

MapFile 的结构看起来如下:

MAP
    LAYER
        CLASS
            STYLE
    LAYER
        CLASS
            STYLE

与前面的 Mapfile 相比,变动如下:

12        CLASS12        CLASS
n13            NAME "World Countries"n13            NAME "States"
14            STYLE14            STYLE
15                COLOR 232 232 23215                COLOR 232 232 232
tt16            END
17        END
18    END
19    LAYER
20        NAME "country-line"
21        DATA "wcountry.shp"
22        STATUS OFF
23        TYPE LINE
24        CLASS
25            NAME "State Boundary"
26            STYLE
16                OUTLINECOLOR 32 32 3227                COLOR 132 132 32
17            END28            END

在这里,将原有的层分为两层。在第一层仍然是一个多边形层,但样式中不再有 OUTLINECOLOR 属性。第二个图层的 TYPELINE ,颜色的值与在第一个例子中的 OUTLINECOLOR 的颜色不同。这样会生成与第一个示例略有差别的图像。

进一步的解释

这里解释一下为什么要这样处理。如果我们继续添加态层的顶部上的层,轮廓最有可能被掩盖了这些层。为了能够看到国界线,添加其他层,我们必须分离国界线层从状态多边形层,并把它放在其他的其他层的顶部。如何定义/添加图层是有顺序的,后面会继续说明。这里只需要按照“后来者居上”(后面定义的图层会显示在上方)记住即可。