3.3. MapServer交互:浏览和缩放控件

介绍了如何在MapServer中通过CGI实现对地图浏览和缩放的控制。

3.3.1. 如何浏览和缩放

与前面地图一样,传递Mapfile路径和其他参数( map=/ms4w/apps/tutorial/htdocs/example2-1.map&mode=browse ,)初始化应用程序MapServ( /cgi-bin/mapserv )。这里有一个链接:

Open sample map 1

在Mapfile中,需要添加: TEMPLATEPATTERN '.' ,否则,可能会出现以下情况:

loadWeb(): General error message. URL-based TEMPLATE configuration failed pattern validation.

为清楚起见,请使用Python代码列出参数,如下所示:

>>> paras = [
... ['map', '/owg/mdca.map'],
... ['mode', 'browse'],
... ['root', '/owg'],
... ['program', '/cgi-bin/mapserv'],
... ['layer', 'modis'],
... ['zoom', '0'],
... ['map_web', 'template+example2-1.html']
... ]
>>> url_para = '&'.join(x for x in ['='.join(x ) for x in paras])
>>> url_para
'map=/owg/mdca.map&mode=browse&root=/owg&program=/cgi-bin/mapserv&layer=topo&zoom=0&map_web=template+example2-1.html'

Open sample Map 2

如果要使用多个层,请使用 layer 参数多次调用,但是可以使用相同的模板文件。

>>> paras = [
... ['map', '/owg/mdca.map'],
... ['mode', 'browse'],
... ['root', '/owg'],
... ['program', '/cgi-bin/mapserv'],
... ['layer', 'modis'],
... ['layer', 'states_line'],
... ['zoom', '0'],
... ['map_web', 'template+example2-1.html']
... ]
>>> url_para = '&'.join(x for x in ['='.join(x ) for x in paras])
>>> url_para
'map=/owg/mdca.map&mode=browse&root=/owg&program=/cgi-bin/mapserv&layer=topo&layer=states_line&zoom=0&map_web=template+example2-1.html'

此示例似乎没有新的知识点。

Open the sample map

这次我们使用 browse 模式而非 map 模式。 browse 模式告知MapServer在 /tmp/ 目录上创建地图(图像)。图像的路径和名称由MapServer在名称下引用 img 。当MapServer解析该HTML模板时,会将 [img] 标记替换为图像的正确路径: img

使用这张地图可以做几件事。首先,点击图像的任何部分,地图将刷新并将点击的点居中,这就是平移。如果单击 Map Control 下拉框中,可选择一个 zoom inzoom out 值。如果将其设置为 Zoom In 2x 并点击地图的任何部分,地图就会被刷新、放大,被点击的点会居中。如果缩小,则会发生相反的情况。当选择“Zoom In”或“Zoom Out”值并单击“Refresh”按钮时,地图将从上一张地图的中心放大或缩小,可随时使用刷新按钮刷新地图。

缩放/平移控件使用内部MapServer CGI变量。此示例展示了如何使用“Scale”变量。ZOOM的值确定放大或缩小的距离。如果该值为‘0’,MapServer将根据用户的鼠标单击重新定位图像。如果该值大于“0”,CGI程序将放大(地图的当前比例乘以缩放值)。如果为负值,CGI程序将缩小(将当前比例除以缩放值)。其他可用于控制缩放和平移的变量有“zoomdir”和“zoomsize”。这两个变量几乎与“zoom”相同,“zoomdir”控制缩放方向,“zoomsize”控制放大或缩小多远。查看OSGeo图库或MapServer维基中的其他示例,以了解其他缩放/平移控制选项。

尝试将“地图模式”从 browsemap 。点击刷新后会发生什么?记住,当使用 mode=map ,MapServer返回静态地图…它忽略了HTML模板,只将地图图像直接流到浏览器。

虽然添加了更多的数据层,但它仍然类似于第1部分中的Mapfile。

现在,回顾HTML模板文件,将会注意到,它本质上是一个调用MapServer CGI程序的HTML表单。因为它是一个表单,所以可以使用单选按钮、复选框和下拉框实现界面。不要被这个例子所限制-创造力是好的。有关更多信息,请查看HTML模板参考页面。

3.3.2. WebGIS地图中的平移和缩放地图:提交表单后

下面显示了用于提交的表单的用法,并通过 input 传承下去。效果同上:

3.3.3. 查看Mapfile

请查看此处的 Mapfile :

 1MAP
 2    NAME "mapv1a"
 3    TEMPLATEPATTERN "."
 4    IMAGETYPE "PNG24"
 5    EXTENT -180 -90 180 90
 6    SIZE 600 300
 7    SHAPEPATH "/gdata"
 8    SYMBOLSET "../symbols/symbols35.sym"
 9    FONTSET "../fonts/fonts.list"
10    IMAGECOLOR 255 255 255
11    WEB
12        TEMPLATE "example1-a.html"
13        IMAGEPATH "/owg/ms_tmp/"
14        IMAGEURL "/ms_tmp/"
15    END
16    LAYER
17        NAME "topo"
18        DATA "land_shallow_topo_8192.tif"
19        STATUS OFF
20        TYPE RASTER
21        PROCESSING "BANDS=1,2,3"
22    END
23    LAYER
24        NAME "states_line"
25        DATA "wcountry.shp"
26        STATUS OFF
27        TYPE LINE
28        CLASS
29            NAME "State Boundary"
30            STYLE
31                SYMBOL "line5"
32                COLOR 255 255 0
33                SIZE 1
34            END
35        END
36    END
37END