查询模板

Mapfile

我们将会对国家与区域进行检索, 先建立 Mapfile 如下:

01 MAP
02     IMAGETYPE "PNG"
03     EXTENT -180 -90 180 90
04     SIZE 600 300
05     SHAPEPATH "/gdata"
06     IMAGECOLOR 255 255 255
07     FONTSET "../fonts/fonts.list"
08     TEMPLATEPATTERN "example-p*"
09     LEGEND
10         KEYSIZE 12 12
11         LABEL
12             TYPE BITMAP
13             SIZE MEDIUM
14             COLOR 0 0 89
15         END
16         STATUS ON
17     END
18     REFERENCE
19         IMAGE "../images/worldref.png"
20         SIZE 155 105
21         EXTENT -180 -90 180 90
22         STATUS ON
23         MINBOXSIZE 10
24         MAXBOXSIZE 150
25         COLOR -1 -1 -1
26         OUTLINECOLOR 128 0 0
27         MARKERSIZE 8
28         MARKER "star"
29     END
30     SCALEBAR
31         IMAGECOLOR 255 255 255
32         LABEL
33             COLOR 0 0 0
34             SIZE TINY
35         END
36         STYLE 1
37         SIZE 100 2
38         COLOR 0 0 0
39         UNITS MILES
40         INTERVALS 2
41         TRANSPARENT FALSE
42         STATUS ON
43     END
44     WEB
45         TEMPLATE "to be replaced by map_web_template variable in section3.html"
46         IMAGEPATH "/owg/ms_tmp/"
47         IMAGEURL "/ms_tmp/"
48         METADATA
49             "wms_title" "WMS Demo Server"
50             "wms_onlineresource" "http://192.168.4.211/cgi-bin/mapserv?map=/mstu/htdocs/example2.map&"
51             "wms_srs" "EPSG:3857 EPSG:4326"
52         END
53     END
54     LAYER
55         NAME "modis"
56         DATA "land_shallow_topo_8192.tif"
57         STATUS OFF
58         TYPE RASTER
59         PROCESSING "BANDS=1,2,3"
60         OFFSITE 71 74 65
61     END
62     LAYER
63         NAME "modis_jpl"
64         TYPE RASTER
65         OFFSITE 0 0 0
66         STATUS OFF
67         CONNECTIONTYPE WMS
68         CONNECTION "http://wcs.osgeo.cn:8088/service?"
69         METADATA
70             "wms_srs" "EPSG:4326"
71             "wms_name" "maplet_i887"
72             "wms_server_version" "1.1.1"
73             "wms_format" "image/jpeg"
74         END
75         PROJECTION
76             "init=epsg:4326"
77         END
78     END
79     LAYER
80         NAME "states_poly"
81         GROUP "states"
82         DATA "wcountry.shp"
83         STATUS ON
84         TYPE POLYGON
85         LABELITEM "NAME"
86         TOLERANCE 3
87         CLASS
88             NAME "the States"
89             TEMPLATE "../maptmpl/states_query.html"
90             STYLE
91                 COLOR 232 232 232
92                 OUTLINECOLOR 132 132 32
93             END
94         END
95     END
96     LAYER
97         NAME "states_line"
98         DATA "wcountry.shp"
99         STATUS OFF
100         TYPE LINE
101         CLASS
102             NAME "State Boundary"
103             STYLE
104                 COLOR 132 132 32
105             END
106         END
107     END
108     LAYER
109         NAME "wriver"
110         DATA "wriver.shp"
111         STATUS OFF
112         TYPE LINE
113         CLASS
114             NAME "World River"
115             STYLE
116                 COLOR 0 0 255
117             END
118         END
119     END
120     LAYER
121         NAME "wroads"
122         DATA "wroads.shp"
123         STATUS OFF
124         TYPE LINE
125         CLASS
126             NAME "World Road"
127             STYLE
128                 COLOR 100 200 100
129             END
130         END
131     END
132 END

正如你所看到的,我们只对 MapFile 添加了两个参数:

  1. states_poly 图层中添加了 TOLERANCE
  2. 在图层 states_polyCLASS 对象中添加了 TEMPLATE

模板文件

上面的 Mapfile 中用到了模板文件,文件名称为 states_query.html,使用相对路径访问。这个模板文件的内容如下:


<tr>
  <td>[lrn]</td>
  <td>[NAME]</td>
  <td>[STATE]</td>
</tr>

请注意,它看起来就像HTML表中的一个片段。MapServer [NAME][STATE] 的标签实际上是和 states_poly.dbf 的属性, 这是与输出shape文件相关的非空间数据库。MapServer定义 Shapefile 属性时, 我们始终使用 NAME (对于 Shapefile,这是真实的,但在所有的情况下,是不正确的)。 此之前我们在章节1中所定义CLASSITEM和LABELITEM时我们也使用这个。 对于其它的标签, [LRN]是另一个MapServer内变量,将在图层内显示结果计数。

如果你使用了 "Query Multiple Layers查询多图层",MapServer CGI程序将对每个记录应用这个查询模板

打开示例

使用表单来提交 MapServer CGI 程序需要的各个参数:

简单的MapServer查询模板
 

maplayer 变量是 MapServer 的内部变量,是制图应用中必需的。