MapServer交互操作:浏览及缩放控制

这里介绍在MapServer中如何通过CGI方式实现地图的浏览与缩放控制。

如何进行浏览及缩放控制

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

打开示例地图1

在 Mapfile 中, 需要添加: TEMPLATEPATTERN '.' , 不然可能会出现:

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

为了清晰起见,使用 Python 代码,将参数作成列表,如下:

>>> paras = [
... ['map', '/owg/mdca.map'],
... ['mode', 'browse'],
... ['root', '/oswebgis'],
... ['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=/oswebgis&program=/cgi-bin/mapserv&layer=topo&zoom=0&map_web=template+example2-1.html'

打开示例地图2

如果要使用多个图层,则要多次使用 layer 参数 。 但是可以使用同一个模板文件。

>>> paras = [
... ['map', '/owg/mdca.map'],
... ['mode', 'browse'],
... ['root', '/oswebgis'],
... ['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=/oswebgis&program=/cgi-bin/mapserv&layer=topo&layer=states_line&zoom=0&map_web=template+example2-1.html'

打开示例地图

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

可以使用此地图执行一些操作。 首先,单击图像的任何部分,地图将刷新并使单击的点居中。这是平移。 如果单击 Map Control 下拉框,则可以选择 zoom inzoom out 值。如果您将其设置为 Zoom In 2x,然后单击地图的任何部分,则地图将被刷新,放大,并且点击的点居中。如果缩小,则会发生相反的情况。当选择“放大”或“缩小”值并单击“刷新”按钮时,地图以上一个地图的中心进行放大或缩小。您可以随时使用刷新按钮刷新地图。

缩放/平移控件使用内部MapServer CGI变量。 此示例显示如何使用“缩放”变量。 zoom的值决定了放大或缩小的距离。 如果值为“0”,则MapServer会根据用户的鼠标单击重新定位图像。如果该值大于“0”,则CGI程序放大(地图的当前比例乘以缩放值)。 如果它是负数,则CGI程序缩小(将当前比例除以缩放值)。 可用于控制缩放和平移的其他变量是“zoomdir”和“zoomsize”。这两个变量几乎与“缩放”相同 - “zoomdir”控制缩放方向,“zoomsize”控制放大或缩小的距离。请查看OSGeo Gallery或MapServer wiki中的其他示例,了解其他缩放/平移控制选项。

尝试将“地图模式”从 browse 更改为 map。 点击刷新后会发生什么?请记住,当我们使用 mode=map时,MapServer会返回一个静态地图......它会忽略HTML模板,只是将地图图像直接流式传输到浏览器。

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

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

在WebGIS地图中平移和缩放地图:POST表单提交

下面展示的是使用表单进行提交,各种参数通过 input 来传递。效果与上面是一样的:

查看 Mapfile

这里看一下 Mapfile :

01 MAP
02     NAME "mapv1a"
03     TEMPLATEPATTERN "."
04     IMAGETYPE "PNG24"
05     EXTENT -180 -90 180 90
06     SIZE 600 300
07     SHAPEPATH "/gdata"
08     SYMBOLSET "../symbols/symbols35.sym"
09     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
37 END