MapServer交互操作:CGI变量及用户接口

到目前为止,只能在创建地图查看地图。 创建Web制图应用程序,通常的意义是创建能够由用户(应用程序的) 改变的地图。 也就是说,一个用户能够改变地图的内容(或者信息)。 要互动的完成这件事情,我们使用MapServer HTML模板。

MapServer HTML模板

使用 MapServer HTML 模板,需要在每个 HTML模板文件中添加 MapServers模板声明。 不然,在使用 GetFeatureInfo (带有 info_format集合)作为 text/html 请求时,会得到下面的错误信息:

Content-type: text/xml isValidTemplate(): Web application error.
Missing magic string, template-file doesn't look like a MapServer template.
需要在每个模板的最开始添加:
<!-- MapServer Template -->
Example the exemplar template query footer.html is:
<!-- MapServer Template -->

一个MapServer HTML模板实际上是一个有几个特定MapServer的HTML文件-- 这些表标签是括在"[]"中的MapServer CGI 变量 。 当MapServer CGI程序处理应用时,它首先解析query_string和地图文件,并产生必要的输出 。 这些输出需要写 在 HTML 模板 文件中,必须在 Mapfile 中定义, 通过使用网络模板关键字(或者在一个单独的HTML初始化文件中)。 CGI 程序将取代所有在 HTML 模板中的变量,用适当的值,在将它发送到 Web 浏览器之前。 如果直接在网页浏览器上查看HTML 模板的内容, 将不会有任何地图提供,反而会有空的图像和其它不明意义的字符。

MapServer的网络映射提供了一些变量--the "img"变量, 前面已经有过例子,那里的几个常用的CGI 变量设计作为地图界面初始化的一个部分, 但是实际上所有 MapFile 参数都能够被定义为变量。

CGI变量的明确的参考在: http://www.mapserver.org/cgi/index.html

MapServer 使用的 CGI 变量也可以由开发者进行定义,MapServer将会把它传递到应用程序中。 例如,我们可以创建一个变量叫做"root"来代表我们的 代表本教程的根目录--"root" 的值将会被"/tutorial“。 当MapServer CGI的值处理我们的HTML 模板,它将会代替每一个"[root]" 标记以及"/tutorial"的实例。你将会看到这个在每一个如下例子中的动作中。

建立Web表单交互界面

现在,让我们为我们的应用建立一个交互式的界面。

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

<input type="hidden" name="root" value="/oswebgis">
<input type="hidden" name="program" value="/cgi-bin/mapserv">

以下两个变量是用户定义的变量。 如果找到在方括号“ [] ” 中的正确的标签,MapServer 会将其值传递给HTML模板。

<input type="hidden" name="map" value="/oswebgis/xmfc2.map">
<input type="hidden" name="layer" value="states">
<input type="hidden" name="zoom" value="0">

maplayer 变量是MapServer内部变量。它们是MapServer制图应用程序所必需的。

<select name="map_web" class="form-control">
    <option value="template example2-1.html"> 1: 浏览及缩放控制</option>
    <option value="template example2-2.html"> 2: 图层控制</option>
    <option value="template example2-3.html"> 3: 比例尺</option>
    <option value="template example2-4.html"> 4: 参考地图</option>
    <option value="template example2-5.html"> 5: 图例</option>
</select>

map_web_template 变量将替换 Mapfile 中 WEB 对象中的 TEMPLATE 参数 。