2.4. 发布矢量层

本部分从使用MapServer中的矢量数据开始。矢量数据类似于CAD软件或illustrator中的矢量数据。除了地理空间位置的差异外,另一个重要的方面是地理信息系统中的矢量数据没有样式信息。CAD或illustrator主要侧重于绘图,所使用的矢量数据需要根据宽度、颜色和样式进行区分和美化。在地理信息系统中,这些工作都是在地图绘制阶段完成的。相同的数据可以在不同的专题地图和不同的应用场景中绘制。

2.4.1. 在 Mapfile 中定义矢量图层

地图服务器可以创建图像并将其保存到本地目录,或按需直接将其发送到Web浏览器(如本例所示)。注意上面的地图,它是由WebGIS服务器在服务器端后台生成,并传输到客户端。页面后的代码为:

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

只需输入以下URL即可,而不是在HTML页面上浏览:

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

(请记住替换主机名或IP地址;例如,使用本地主机名 localhost ,或直接使用IP地址,例如 "127.0.0.1" )

 1MAP
 2    IMAGETYPE "PNG"
 3    EXTENT -180 -90 180 90
 4    SIZE 600 300
 5    SHAPEPATH "/gdata"
 6    IMAGECOLOR 255 255 255
 7    LAYER
 8        NAME "world-country"
 9        DATA "wcountry.shp"
10        STATUS OFF
11        TYPE POLYGON
12        CLASS
13            NAME "World Countries"
14            STYLE
15                COLOR 232 232 232
16                OUTLINECOLOR 32 32 32
17            END
18        END
19    END
20END

请看下面的地图文件。行 0719 定义了地图的第一层。

该层以 LAYER 开头,以 END 结尾。基于的空间数据 wcountry.shp1 ,多边形层渲染全局行政区划数据。NAME 关键字指定层的名称。名称本身是可选的,但如果使用名称,则不能超过20个字符。层名称在HTML模板层中用作 CGI 引用。如果希望交互式层能够在HTML表单中打开和关闭,则必须指定名称。

STATUS 关键字确定层是否被渲染,以及其状态是否可以更改 STATUS 默认层始终被渲染,并且可以同时更改状态。

1218 行指定该级别的唯一类对象参数。类对象以关键字 class 开始,以关键字 END 结束(行 18 )。虽然这个应用程序将比以前的地图更广泛地使用类,但对于这个层,只需要指定一个默认类,它将包括shapefile中的每个要素。类的名称将显示在与地图关联的图例上。如果类没有名称,它仍将呈现,但不会显示在图例中。Style对象关键字 COLOR 指定要绘制的颜色, OUTLINECOLOR 指定绘制边框的颜色。由于该层是一个多边形,因此将使用指定的颜色进行填充。请注意,如果该层是线层,则 COLOR 值将指定线条的颜色。

2.4.2. URL参数说明

该URL可以分为三个部分:

The first part, http://webgis.cn/cgi-bin/mapserv?, calls MapServer’s CGI program. On a different system, it might be mapserv or mapserv.exe , or something else. If you directly call to open the above URL, you will get this message:

No query information to decode. QUERY_STRING is set, but empty.

要获得正确的信息,需要添加其他参数。

要获得正确的信息,需要添加其他参数。接下来的三部分是查询字符串。查询字符串包含CGI参数(变量及其值),每个参数用符号分隔 ( & )。

现在查看查询字符串,第一个参数 map 有一个值: /owg/mfa1.map

下一个参数 layer=states ,mapserv使用 states 层。在Mapfile中将图层对象命名为 states

下一个参数 layer=states ,mapserv使用 states 图层。我们将其命名为 Mapfile 中的Layer对象 states

最后一个参数 mode=map ,mapserv如何在模式下输出MapFile。在这种情况下,它告诉我们 mapserv 将图像直接转储到Web浏览器(客户端),而无需首先在服务器上创建临时图像。

TYPE 的值可以是:'chart', 'circle', 'line', 'point', 'polygon', 'raster', 'query', 'annotation'

2.4.3. 地图范围

在Mapfile中,需要设置正确的范围才能显示数据。例如,对于中国范围的数据,设置范围为: EXTENT 73 8 136 53 ,效果如下:

完整的Mapfile为:

 1MAP
 2    IMAGETYPE "PNG"
 3    EXTENT -12 25 43 50
 4    SIZE 550 250
 5    SHAPEPATH "/gdata"
 6    IMAGECOLOR 255 255 255
 7    LAYER
 8        NAME "topo"
 9        DATA "land_shallow_topo_8192.tif"
10        STATUS OFF
11        TYPE RASTER
12    END
13END

2.4.4. MapServer查看的不同模式

请注意上面的 mode=map ,这是MapServer支持的查看模式。地图服务器的 mode CGI变量可以采用非 map 。除 map 模式,还有 browse 模式。例如,如果使用 map=browse ,MapServer会将图像转储到服务器上的临时目录中。

使用浏览模式需要指定 template 参数。一般情况下,需要先定义模板文件。没有模板文件,浏览模式就不能正常工作,这将在后面解释。在MapServer 6.x中, template 参数允许使用OpenLayers关键字,该关键字可用于查看MapServer结果。

下面直接使用OpenLayers的默认配置来查看地图。请注意,需要调用MapServer网站的OpenLayers库,因此它将第一次变慢。

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfa1.map&layer=states&mode=browse&template=OpenLayers

有关OpenLayers模式,请参见:

https://mapserver.org/cgi/openlayers.html

可尝试在MapFile中修改关键字的值并查看结果,这些实验将帮助理解这些关键字。