3.3. MapServer交互:浏览和缩放控件¶
介绍了如何在MapServer中通过CGI实现对地图浏览和缩放的控制。
3.3.1. 如何浏览和缩放¶
与前面地图一样,传递Mapfile路径和其他参数( map=/ms4w/apps/tutorial/htdocs/example2-1.map&mode=browse
,)初始化应用程序MapServ( /cgi-bin/mapserv
)。这里有一个链接:
在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'
如果要使用多个层,请使用 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'
此示例似乎没有新的知识点。
这次我们使用 browse
模式而非 map
模式。 browse
模式告知MapServer在 /tmp/
目录上创建地图(图像)。图像的路径和名称由MapServer在名称下引用 img
。当MapServer解析该HTML模板时,会将 [img]
标记替换为图像的正确路径: img
。
使用这张地图可以做几件事。首先,点击图像的任何部分,地图将刷新并将点击的点居中,这就是平移。如果单击 Map Control
下拉框中,可选择一个 zoom in
或 zoom 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维基中的其他示例,以了解其他缩放/平移控制选项。
尝试将“地图模式”从 browse
至 map
。点击刷新后会发生什么?记住,当使用 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