模板法

作者

弗兰克·考曼

联系

Intervation.de的Frank.Koormann

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

最后更新

2021-03-30

介绍

使用模板:

  • 定义MapServer CGI应用程序接口的外观

  • 显示查询结果。

  • 要创建自定义输出(请参见 模板驱动输出 )

它们将结果的表示(查询或映射)引导给用户。模板几乎总是HTML文件,尽管它们也可以是URL(例如http://www.somewhere.com/[属性]/info.html)。URL模板只能用于简单查询或itemquery结果,因此下面定义的许多替换对它们不可用。简单的平移/缩放界面使用单个模板文件,而复杂的查询通常需要许多模板。模板通常使用JavaScript来增强基本界面。

笔记

  • 模板 must 在模板的第一行包含魔术字符串“mapserver template”。这通常采用HTML、JavaScript或XML注释的形式。这条线是 not 写信给客户。魔力字符串不区分大小写。

  • MapServer将只接受模板的某些文件扩展名;有效的文件扩展名为:

    .gml
    .html
    .htm
    .js
    .kml
    .svg
    .tmpl
    .wml
    .xml
    
  • 所有 CGI parameters 可以在模板替换、特定于MapServer的参数以及用户定义的参数中引用。原则上,参数由MapServer 1:1传递。此功能对于实现MapServer应用程序至关重要。

    下面的参考仅列出了获取由MapServer修改的信息所需的特殊模板替换字符串,例如新的比例、查询结果等。

  • 模板替换字符串区分大小写。

  • 属性项替换的大小写必须与dbase文件中的项名称相同。

  • arcview和arcinfo通常生成具有全部大写的项名称的dbase文件。当模板是URL时,将应用适当的URL编码(即“到”+“)。

  • 有些替换也可以转义形式(即URL编码)使用。

例如,在模板中生成链接时需要这样做。这可能会将当前mapextent传递到新的mapserver调用。*[mapext]*由一组空格分隔的左下和右上坐标替换。这将破坏URL。*[mapext_esc]*由适当的编码集替换。

格式

模板只是HTML文件或URL字符串,其中包含由替换的特殊字符 MAPSERV公司 每次处理模板时。简单的替换允许将活动层或空间范围等信息从用户传递到 MAPSERV公司 又回来了。通常,新的值被转储到将再次传递的表单变量中。下面给出了特殊字符和表单变量的列表。HTML模板可以包括任何包括JavaScript和Java调用在内的任何东西。

在HTML文件中,属性值可以在引号(“”)内。在引号内写入属性值允许您在值中设置不能正常使用的特殊字符(即:、=、、和空格)。要在属性值中编写单引号,只需使用两个引号(“”)。

一般

[日期]

输出日期(根据Web服务器的时钟)。默认格式与Apache的公共日志格式相同,如下所示:

01/Dec/2010:17:34:58 -0800

可用参数:

  • 格式=

    标准C strftime()函数支持的格式字符串。例如,默认格式定义为:

    [date format="%d/%b/%Y:%H:%M:%S %z"]
    
  • TZ=

    用于返回日期的时区。默认为“本地”。有效值为:

    • “格林尼治标准时间”

      输出日期为格林威治时间

    • “本地”

      在Web服务器的本地时区中输出时间。

    另外,或者,可以使用%z和%z strftime格式字符串输出时区偏移量或名称。

[版本]

MapServer版本号。

[身份证]

唯一会话ID。该ID可以通过窗体传入,但通常由软件生成。在这种情况下,ID是Unix时间(或NT等效值)和进程ID的串联。除非您在一秒钟内收到的请求比系统具有的进程ID多,否则可以认为ID是唯一的。->

[主持人]

Web服务器的主机名。

[港口]

Web服务器正在侦听的端口。

[发布或获取变量名]、[发布或获取变量名u esc]

传递给mapserver的任何变量的内容,无论它们是否被使用,都可以通过这种方式进行回送。一种用法可能是让用户在交互式地图编辑器中设置地图标题或北箭头样式。系统不关心这些值,但它们在创建最终输出时可能非常重要,例如,如果您指定了一个CGI参数,如myValue=…您可以使用[MyValue]在模板文件中访问它。

也可用作转义版本。

[网络元数据键],[网络元数据键]

Web对象元数据访问(例如[Web_Projection]

也可用作转义版本。

[errmsg],[errmsg_esc]

当前错误堆栈输出。各种错误消息由分号分隔。

也可用作转义版本。

文件引用

[IMG]

新图像的路径(相对于文档根目录),如果未在映射文件中设置图像URL,则仅显示图像名称。

在地图界面模板中,用地图图像的路径替换[img]。在查询结果模板中,它将替换为查询映射图像的路径(如果 QUERYMAP 对象在中定义 Mapfile

[参考文献]

新引用映像的路径(相对于文档根)。

[图例]

映射服务器呈现的新图例图像的路径(相对于文档根)。

由于版本3.5.1,MapServer提供了一个新的HTML图例模板。如果模板是在 Mapfile [Legend]字符串替换为已处理的Legend as。见 带MapServer的HTML图例 有关详细信息。

[鳞片]

新scalebar图像的路径(相对于文档根)。

[查询文件]

查询文件的路径(如果savequery设置为 CGI Parameter

[地图]

映射文件的路径(如果savemap设置为 CGI Parameter

图像几何

[中心]

以像素为单位计算的图像中心。用于在地图大小更改时设置imgxy表单变量。

[中心x],[中心y]

以像素为单位计算的图像中心X或Y坐标。

[地图大小]、[地图大小Esc]

以列和行表示的当前图像大小(用空格分隔)。

也可用作转义版本。

[地图宽度]、[地图高度]

当前图像的宽度或高度。

[缩放]

当前图像比例。准确的值不适用于用户信息,但对于某些应用程序是必需的。该值可以四舍五入,例如使用javascript或服务器端后处理。

[比例]-已弃用

因为mapserver 5.0,所以要使用的正确参数是[scaledeom]。不推荐使用的[比例]是当前图像比例。准确的值不适用于用户信息,但对于某些应用程序是必需的。该值可以四舍五入,例如使用javascript或服务器端后处理。

[细胞大小]

当前图像中像素的大小(以地图单位表示)。对于用户界面中的距离测量工具很有用。

地图几何

[MAPX],[ MAPY ]

鼠标单击的X和Y坐标。

[MAPExt],[MAPExt_Esc]

完整映射范围(由空格分隔)。

也可用作转义版本。(MapServer 5.2中的mapext_esc已弃用。您应该使用“escape=”参数代替)

默认模板[mapext]返回格式为:mixx miny maxx maxy的坐标。

可用参数:

  • 逃逸=

    退出返回的坐标。默认为“无”。有效值为:

    • “URL”

      使用URL转义码对返回的坐标进行编码。

    • “没有”

      不要逃跑。

  • 展开=

    按特定值展开范围的边界。在地图坐标中指定。例如,[mapext]可能返回:

    123456 123456 567890 567890
    

    因此,[mapext expand=1000]将返回:

    122456 122456 568890 568890
    
  • 格式=

    坐标的格式。默认值为“$minx$miny$maxx$maxy”。例如,要向要使用的坐标添加逗号,请执行以下操作:

    [mapext format="$minx,$miny,$maxx,$maxy"]
    
  • 精度=

    输出坐标的小数位数(默认值为0)。

[最小值]、[最小值]、[最大值]、[最大值]

新地图范围的最小/最大X或Y坐标。

[Dx],[Dy]

新地图范围的最小/最大X或Y坐标差。

用于创建带有图例和比例尺的可计算范围(即0 0 dx dy)

[rawext],[rawext_esc]

原始mapextent,即适合窗口大小(由空格分隔)之前的范围。在输入来自IMGBOX(通过Java或任何东西)的情况下,RAWEXT指的是转换为映射单元的IMGBOX坐标。用于空间查询构建。

也可用作转义版本。(Rawext_Esc在MapServer 5.2中已弃用。您应该使用“escape=”参数代替)

默认模板[rawext]返回格式为:mixx miny maxx maxy的坐标。

可用参数:

  • 逃逸=

    退出返回的坐标。默认为“无”。有效值为:

    • “URL”

      使用URL转义码对返回的坐标进行编码。

    • “没有”

      不要逃跑。

  • 展开=

    按特定值展开范围的边界。在地图坐标中指定。例如,[rawext]可能返回:

    123456 123456 567890 567890
    

    因此[rawext expand=1000]将返回:

    122456 122456 568890 568890
    
  • 格式=

    坐标的格式。默认值为“$minx$miny$maxx$maxy”。例如,要向要使用的坐标添加逗号,请执行以下操作:

    [rawext format="$minx,$miny,$maxx,$maxy"]
    
  • 精度=

    输出坐标的小数位数(默认值为0)。

[RAWMINX]、[RAWMINY]、[RAWMAXX]、[RAWMAXY]

原始地图/搜索范围的最小/最大X或Y坐标。

只有在使用proj支持和 PROJECTION 在中定义 Mapfile .

[马普伦],[马普兰]

鼠标单击的经度/纬度值。仅在启用投影时可用。

[mapext_latlon],[mapext_latlon_esc]

完整映射范围(由空格分隔)。仅在启用投影时可用。

也可用作转义版本。(MapServer 5.2中不推荐使用mapext_latlon_esc。您应该使用“escape=”参数代替)

默认模板[mapext_latlon]返回格式为:mixx miny maxx maxy的坐标。

可用参数:

  • 逃逸=

    退出返回的坐标。默认为“无”。有效值为:

    • “URL”

      使用URL转义码对返回的坐标进行编码。

    • “没有”

      不要逃跑。

  • 展开=

    按特定值展开范围的边界。在地图坐标中指定。例如,[mapext_latlon]可能返回:

    123456 123456 567890 567890
    

    因此,[mapext_latlon expand=1000]将返回:

    122456 122456 568890 568890
    
  • 格式=

    坐标的格式。默认值为“$minx$miny$maxx$maxy”。例如,要向要使用的坐标添加逗号,请执行以下操作:

    [mapext_latlon format="$minx,$miny,$maxx,$maxy"]
    
  • 精度=

    输出坐标的小数位数(默认值为0)。

[Minlon]、[Minlat]、[Maxlon]、[MaxLat]

地图范围的最小/最大经度或纬度值。仅在启用投影时可用。

[参考文本],[参考文本]

参考地图范围(用空格分隔)。

此模板已代表增强请求与版本4.6一起添加。查看中的线程 MapServer ticket#1102 对于潜在的用例。

也可用作转义版本。(在MapServer 5.2中不推荐使用refext_esc。您应该使用“escape=”参数代替)

默认模板[refext]返回格式为:mixx miny maxx maxy的坐标。

可用参数:

  • 逃逸=

    退出返回的坐标。默认为“无”。有效值为:

    • “URL”

      使用URL转义码对返回的坐标进行编码。

    • “没有”

      不要逃跑。

  • 展开=

    按特定值展开范围的边界。在地图坐标中指定。例如,[refext]可能返回:

    123456 123456 567890 567890
    

    因此,[refext expand=1000]将返回:

    122456 122456 568890 568890
    
  • 格式=

    坐标的格式。默认值为“$minx$miny$maxx$maxy”。例如,要向要使用的坐标添加逗号,请执行以下操作:

    [refwext format="$minx,$miny,$maxx,$maxy"]
    
  • 精度=

    输出坐标的小数位数(默认值为0)。

[层][层_esc]

所有活动层以空格分隔。用于“发布”请求。

也可用作转义版本。

[切换层][切换层]

可以切换的所有层的列表,即在 Mapfile 当前不是默认状态。

也可用作转义版本。

[层名检查选择]

用于使层在地图创建会话中保持不变。如果启用了layerName,则字符串将替换为关键字“checked”、“selected”或“”。layer name是一个层的名称,它出现在 Mapfile . 不适用于默认层。

[层名称元数据键]

层元数据访问(例如,[streets_build]下划线是必需的)。

变焦

[缩放最小缩放到最大缩放检查选择]

用于使缩放因子保持不变。默认情况下,缩放值可以在-25到25之间。根据当前的缩放值,该字符串将替换为HTML关键字“checked”、“selected”或“”。

例如,如果缩放为12,则将[缩放选择]替换为“选定”,而同一HTML模板文件中的[缩放选择]则不是。

[zoomdir_-1|0|1_check|select]

用于保持缩放方向。使用“与收音机控制一起检查”或“与选择列表一起选择”。请参阅演示以获取示例。根据zoomdir的当前值,该字符串将替换为html关键字“checked”、“selected”或“”。

查询

以下替换仅在作为查询结果处理模板时可用。

[shpext],[shpext_esc]

当前形状的范围加上5%的缓冲区。仅在处理查询结果时可用。

默认模板[shpext]返回格式为:mixx miny maxx maxy的坐标。

可用参数:

  • 逃逸=

    退出返回的坐标。默认为“无”。有效值为:

    • “URL”

      使用URL转义码对返回的坐标进行编码。

    • “没有”

      不要逃跑。

  • 展开=

    按特定值展开范围的边界。在地图坐标中指定。例如,[shpext]可能返回:

    123456 123456 567890 567890
    

    因此,[shpext expand=1000]将返回:

    122456 122456 568890 568890
    
  • 格式=

    坐标的格式。默认值为“$minx$miny$maxx$maxy”。例如,要向要使用的坐标添加逗号,请执行以下操作:

    [shpext format="$minx,$miny,$maxx,$maxy"]
    
  • 精度=

    输出坐标的小数位数(默认值为0)。

[SHPMINX]、[SHPMINY]、[SHPMAXX]、[SHPMAXY]

形状范围的最小/最大X或Y坐标。仅在处理查询结果时可用。

[SHPMID ]

当前形状范围的中间。仅在处理查询结果时可用。

[SHPMIDX],[SHPMIDY]

当前形状范围中间的X或Y坐标。仅在处理查询结果时可用。

[SHIPIDX ]

当前形状的索引值。仅在处理查询结果时可用。

[SHP类]

当前形状的ClassIndex值。仅在处理查询结果时可用。

[SHPXY格式选项]

形状坐标列表,带有列表格式选项,特别适用于SVG。

默认模板[shpxy]返回以逗号分隔的坐标空间列表(即x1 y1、x2 y2、x3 y3)。

仅在处理查询结果时可用。

可用属性(H=页眉,F=页脚,S=分隔符):

  • 缓冲器=

    缓冲区大小,目前唯一可用的单位是像素。默认值为0。

  • 质心=

    应该只使用形状的质心吗?正确或错误(不区分大小写)。默认值为假。

  • CS=

    坐标分隔符。默认是“。”

  • IRH=,IRF=,ORH=,ORF=

    要放在(irh)内环之前和之后(irf)以及带孔多边形的外环之前(orh)和之后(orf)的字符。默认值为“”。

    备注

    在每个多边形中,总是先输出外环,然后输出内环。

    如果既不 irh 也不 orh 设置,环输出为“零件”,使用 ph/ ‘PF’/‘PS’。

  • pH=,pf=,p=

    要放在(ph)之前和之后(pf)的字符,以及(ps)功能部件之间的分隔符(例如多几何图形的环)。默认值为ph=“”,pf=“”和ps=“”。

  • 精度=

    为坐标输出的小数位数。默认值为0。

  • PROJ=

    输出投影定义为坐标,特殊值“图像”将转换为图像坐标。默认值为无。

  • 比例=,比例x=,比例y=

    坐标的比例因子:两个轴(scale),X轴(scale_x)和Y轴(scale_y)。默认值为1.0。

  • SH=SF=

    在(sh)前和(sf)后放置的字符。默认值为“”。

  • xh=,xf=

    要放在x坐标前面(xh)和后面(xf)的字符。默认值为xh=“”和xf=“,”)。

  • YH= YF=

    在Y坐标之前(YH)和之后(YF)放置的字符。默认值为“”。

举个简单的例子:

[shpxy xh="(" yf=")"] will result in: (x1 y1),(x2 y2),(x3 y3)

or

[shpxy precision="2" xh="(" yf=")"] will result in: (x1,y1) (x2,y2) (x3,y3)

or

[shpxy precision="2" xf=" " xh="(" yf=")"] will result in: (x1 y1) (x2 y2) (x3 y3)

还有一个更复杂的例子,为可能有孔的多元体输出kml(注意参数必须全部在一条线上):

<MultiGeometry>
    <Point>
      <coordinates>[shplabel proj=epsg:4326 precision=10],0</coordinates>
    </Point>
    [shpxy ph="<Polygon><tessellate>1</tessellate>" pf="</Polygon>" xf=","
     xh=" " yh=" " yf=",0 " orh="<outerBoundaryIs><LinearRing><coordinates>"
     orf="</coordinates></LinearRing></outerBoundaryIs>"
     irh="<innerBoundaryIs><LinearRing><coordinates>"
     irf="</coordinates></LinearRing></innerBoundaryIs>" proj=epsg:4326
     precision=10]
</MultiGeometry>
[提尔索引]

当前磁贴的索引值。如果当前形状没有使用瓷砖,则将用“-1”替换。仅在处理查询结果时可用。

[项目格式选项]

带有列表格式选项的属性表“item”。“name”属性是必需的。

仅在处理查询结果时可用。

可用属性:

  • 名字=

    属性的名称,不区分大小写。(需要)

  • 精密度=

    用于数值数据的小数位数。使用此选项将强制显示为数字,并将使用非数字数据导致不可预测的结果。

  • 图案=

    用于比较项值与的正则表达式。只有匹配时才会输出标记。

  • UC =

    将此属性设置为“true”以将属性值转换为大写。

  • 连卡佛=

    将此属性设置为“true”以将属性值转换为小写。

  • 合并=

    将此属性设置为“true”以向数值添加逗号。同样,只对数字数据有用。

  • 逃跑=

    默认转义是针对HTML的,但您可以转义以包含在URL(=url)中,或者根本不转义(=none)。

  • 格式=

    用于输出属性值的格式字符串。标记“$value”用于将值放入更复杂的表示中。默认值是只输出值。

  • 零格式

    如果属性值为空或与模式不匹配(如果已定义),则输出的字符串。如果未设置,并且出现任何这些情况,则项目标记将替换为空字符串。

  • 填充=

    设置为整数值可在项目值右侧填充空格。对于创建固定宽度的字符串很有用。

举个简单的例子:

[item name="area" precision="2" commify="2" format="Area is $value"]
[属性名称]、[属性名称]、[属性项名称]、[原始]

查询层的数据表中的属性名称。只能访问活动查询层的属性。大小写必须与数据文件中存储的大小写相同。例如,arcView使用所有大写字母作为shapefile字段名。仅在处理查询结果时可用。

默认情况下,这些属性是专门为HTML表示而编码的。此外,还提供了转义版本(用于URL)和原始数据。

[加入名称属性名称]、[加入名称属性名称u esc]、[加入名称属性名称u raw]

一对一联接:首先是联接名称(如 Mapfile 其次,必须给出表字段的访问方式,类似于图层属性数据。仅在处理查询结果时可用。

默认情况下,这些属性是专门为HTML表示而编码的。此外,还提供了转义版本(用于URL)和原始数据。

[加入加入名称]

一对多连接:更复杂的变体。如果连接类型为多个(一对多),则模板将替换为 Mapfile .

[元数据u元数据键]、[元数据u元数据键u esc]

查询的层元数据访问(例如[元数据投影]

也可用作转义版本。

对于允许多个结果集的查询模式,可以使用以下字符串替换。对于FeatureSelect和FeatureSelect模式,总计将重新调整,以便不包括选择层。选择层结果可供用户显示。

[NR]

结果总数。适用于网页页眉和页脚。仅在处理查询结果时可用。

[NL]

返回结果的层数。适用于网页页眉和页脚。仅在处理查询结果时可用。

[NLR]

当前层中的结果总数。适用于网页页眉和页脚。仅在处理查询结果时可用。

[RN]

所有层中的结果编号。从1点开始。适用于网页页眉和页脚。仅在处理查询结果时可用。

[LRN]

当前层中的结果编号。从1点开始。在查询模板中很有用。仅在处理查询结果时可用。

[Cl]

当前层名称。在层页眉和页脚中很有用。仅在处理查询结果时可用。

示例模板

一个小例子来给出如何使用模板的概念。请注意,它包括用于存储应用程序设置的特定于MapServer的模板(例如[map]、[mapext])和用户定义的模板(例如[htmlroot]或[program])。

 1<!-- MapServer Template -->
 2<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 3       "http://www.w3.org/TR/html4/transitional.dtd">
 4<html>
 5  <head>
 6    <title>MapServer Template Sample</title>
 7  </head>
 8
 9  <body>
10    MapServer Template Sample<br>
11
12    <!-- The central form the application is based on. -->
13    <form method="GET" action="[program]">
14
15    <!-- CGI MapServer applications are server stateless in principle,
16         all information must be "stored" in the client. This includes
17         some basic settings as below.
18         The example is based on the pan and zoom test suite:
19         http://maps.dnr.state.mn.us/mapserver_demos/tests36/           -->
20      <input type="hidden" name="map" value="[map]">
21      <input type="hidden" name="imgext" value="[mapext]">
22      <input type="hidden" name="imgxy" value="149.5 199.5">
23      <input type="hidden" name="program" value="[program]">
24      <input type="hidden" name="htmlroot" value="[htmlroot]">
25      <input type="hidden" name="map_web" value="[map_web]">
26
27      <!-- A table for minimal page formatting. -->
28      <table border=0 cellpadding=5>
29      <tr>
30        <!-- First column: Map and scale bar -->
31        <td align=center>
32          <!-- The map -->
33          <input type="image" name="img" src="[img]"
34                 style="border:0;width:300;height:400">
35          <br>
36          <!-- The scale bar-->
37          <img src="[scalebar]" alt="Scale Bar">
38        </td>
39
40        <!-- Second column: Zoom direction, Legend and Reference -->
41        <td valign=top>
42          <!-- Zoom direction -->
43          <b>Map Controls</b><br>
44          Set your zoom option:<br>
45          <select name="zoom" size="1">
46            <option value="2" [zoom_2_select]> Zoom in 2 times
47            <option value="1"  [zoom_1_select]> Recenter Map
48            <option value="-2" [zoom_-2_select]> Zoom out 2 times
49          </select>
50          <br>
51
52          <!-- Legend -->
53          <b>Legend</b><br>
54          <img src="[legend]" alt="Legend"><br><br><br><br>
55
56          <!-- Reference map -->
57         <input type="image" name="ref" src="[ref]"
58                style="border:0;width:150;height:150">
59        </td>
60      </tr>
61      </table>
62
63    </form>
64
65  </body>
66</html>