3.3. MapServer interaction: browse and zoom control#
This section introduces how to realize the control of map browsing and zooming through CGI in MapServer.
3.3.1. How to browse and zoom#
As in the previous map, we pass our mapfile path and other parameters (
map=/ms4w/apps/tutorial/htdocs/example2-1.map&mode=browse
)
Initialize our application MapServ ( /cgi-bin/mapserv
). Here is a
link:
In Mapfile, you need to add: TEMPLATEPATTERN '.'
,otherwise, it may
appear:
loadWeb(): General error message. URL-based TEMPLATE configuration failed pattern validation.
For clarity, use the Python code to list the parameters as follows:
>>> 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'
If you want to use multiple layers, use the layer
parameter multiple
times. But the same template file can be used.
>>> 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'
This example seems to have no new knowledge points.
This time we use browse
mode instead of map
mode. The browse
mode tells MapServer to create a map (image) on the /tmp/
directory.
The path and name of the image are referenced by MapServer under the
name img
. When MapServer parses the HTML template, it replaces the
[img]
tag with the correct path to the image: img
.
There are a few things you can do with this map. First, click on any
part of the image and the map will refresh and center the clicked point.
This is panning. If you click the Map Control
drop-down box, you can
choose a zoom in
or zoom out
value. If you set it to
Zoom In 2x
and then click on any part of the map, the map will be
refreshed, zoomed in, and the clicked point will be centered. If you
zoom out, the opposite happens. When you select a “Zoom In” or “Zoom
Out” value and click the “Refresh” button, the map zooms in or out from
the center of the previous map. You can refresh the map at any time
using the refresh button.
The zoom/pan controls use internal MapServer CGI variables. This example shows how to use the “scale” variable. The value of zoom determines how far to zoom in or out. If the value is ‘0’, MapServer will reposition the image based on the user’s mouse click. If the value is greater than “0”, the CGI program zooms in (the current scale of the map multiplied by the zoom value). If it is negative, the CGI program zooms out (divides the current scale by the zoom value). Other variables that can be used to control zoom and pan are “zoomdir” and “zoomsize”. These two variables are almost the same as “zoom” - “zoomdir” controls the zoom direction, and “zoomsize” controls how far to zoom in or out. Check out the OSGeo Gallery or other examples in the MapServer wiki for other zoom/pan control options.
Try changing the “map mode” from browse
to map
. What happens
after hitting refresh? Remember, when we use mode=map
, MapServer
returns a static map…it ignores the HTML template and just streams the
map image directly to the browser.
Although more data layers have been added, it is still similar to Mapfile in part 1.
Now, look at the HTML template file. You’ll notice that it’s essentially an HTML form that calls a MapServer CGI program. Because it’s a form, you can implement your interface with radio buttons and checkboxes and dropdown boxes. Don’t be limited by this example - creativity is fine. ;) For more information, check out the HTML Template Reference page.
3.3.2. Pan and zoom map in WebGIS map: POST form submission#
The following shows the use of a form for submission, with various
parameters through the input
To pass on. The effect is the same as
above:
3.3.3. View Mapfile#
Take a look at Mapfile here:
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