GetMap
操作用来生成一幅地图,可以是图片或图形元素集。GetMap
允许客户端请求多个服务器来制作叠置的地图图层,从而处理具有相同参照系、大小、比例的像素几何体。这些图层可以在客户端按一定的顺序排列显示,而且可以选用透明像素技术使不同来源的地图信息根据人的视觉要求来显示。
GetMap
请求通常使用HTTP/GET方式通过URL编码调用基本的 WMS,也可以使用HTTP/POST编码与一个具有SLD功能的WMS通信。GetMap
请求必须指定请求的图层(Layers)、各图层使用的样式(Styles)、空间参照系(SRS)、边界矩形(BBox)、图片的格式(Format)和大小(Width、Height)等参数。
Web地图服务支持图片或图形格式显示地图视图。图片格式包括公共的影像格式如GIF、PNG、JPEG等,这些格式被大多数Web浏览器支持,而其他图形格式的显示可能还需要一些助手程序支持。图形格式包括SVG和WebCGM格式,在WMS中不常用。
另外,可选的 Transparent
参数用来指定地图的背景是否透明,默认值是 False
。允许返回结果以透明的方式绘制的功能,这样就可以叠置不同请求的地图。每个WMS最好提供一种支持透明显示的图像格式,以便与其他地图图片进行叠置。
一个有效的 GetMap
请求将返回一张由具有地理参照信息的图层组成的地图,这些图层有指定的样式、空间参照系统、边界矩形、大小、格式和透明性。一个无效的 GetMap
请求返回一个格式化的错误信息。在HTTP环境下,返回值的内容类型是一个MIME类型。
这里说明发布的 MapServer WMS 服务的 GetMap 访问。
首先是 Mapfile:
01 MAP
02 NAME "EX2_"
03 IMAGETYPE "png24"
04 EXTENT -180 -90 180 90
05 SIZE 600 300
06 SHAPEPATH "/gdata"
07 SYMBOLSET "../symbols/symbols35.sym"
08 FONTSET "../fonts/fonts.list"
09 OUTPUTFORMAT
10 NAME "png"
11 DRIVER "AGG/PNG"
12 MIMETYPE "image/png"
13 IMAGEMODE RGB
14 EXTENSION "png"
15 FORMATOPTION "GAMMA=0.75"
16 END
17 WEB
18 TEMPLATE "tmpl_ogc.html"
19 IMAGEPATH "/owg/ms_tmp/"
20 IMAGEURL "/ms_tmp/"
21 METADATA
22 "wms_title" "WMS Demo Server"
23 "wms_version" "1.3.0"
24 "wms_onlineresource" "http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb2.map&"
25 "wms_srs" "EPSG:4326"
26 "wms_enable_request" "*"
27 "ows_enable_request" "*"
28 "wms_feature_info_mime_type" "text/html"
29 "wms_format" "image/png"
30 END
31 END
32 PROJECTION
33 "init=epsg:4326"
34 END
35 LAYER
36 NAME "topo"
37 DATA "land_shallow_topo_8192.tif"
38 STATUS OFF
39 TYPE RASTER
40 PROCESSING "BANDS=1,2,3"
41 PROJECTION
42 "init=epsg:4326"
43 END
44 END
45 LAYER
46 NAME "states"
47 DATA "wcountry.shp"
48 STATUS OFF
49 TYPE POLYGON
50 TEMPLATE "tmpl_ogc.html"
51 METADATA
52 "wms_title" "test2"
53 "wms_version" "1.3.0"
54 "wms_srs" "EPSG:4326 EPSG:3857"
55 "wms_enable_request" "*"
56 "ows_enable_request" "*"
57 "wms_feature_info_mime_type" "text/html"
58 "wms_format" "image/png"
59 END
60 PROJECTION
61 "init=epsg:4326"
62 END
63 CLASS
64 NAME "States"
65 STYLE
66 COLOR 232 232 232
67 OUTLINECOLOR 32 32 32
68 END
69 END
70 END
71 LAYER
72 NAME "states_line"
73 DATA "wcountry.shp"
74 STATUS OFF
75 TYPE LINE
76 TEMPLATE "tmpl_ogc.html"
77 METADATA
78 "wms_title" "test3"
79 "wms_version" "1.3.0"
80 "wms_srs" "EPSG:4326 EPSG:3857"
81 "wms_enable_request" "*"
82 "ows_enable_request" "*"
83 "wms_feature_info_mime_type" "text/html"
84 "wms_format" "image/png"
85 END
86 PROJECTION
87 "init=epsg:4326"
88 END
89 CLASS
90 NAME "State Boundary"
91 STYLE
92 COLOR 132 132 32
93 END
94 END
95 END
96 END
与前面 mfa1.map
相比:
6 | IMAGECOLOR 255 255 255 | 6 | IMAGECOLOR 255 255 255 | ||
n | n | 7 | WEB | ||
8 | METADATA | ||||
9 | "wms_title" "WMS Demo Server" | ||||
10 | "wms_onlineresource" "//webgis.cn/cgi-bin/mapserv?map=/owg/mfb1.map&" | ||||
11 | "ows_onlineresource" "//webgis.cn/cgi-bin/mapserv?map=/owg/mfb1.map&" | ||||
12 | "wms_srs" "EPSG:4269 EPSG:4326" | ||||
13 | "wms_enable_request" "* !GetFeatureInfo" | ||||
14 | END | ||||
15 | END | ||||
7 | LAYER | 16 | LAYER | ||
n | 8 | NAME "world-country" | n | 17 | NAME "topo" |
18 | DATA "land_shallow_topo_8192.tif" | ||||
19 | STATUS OFF | ||||
20 | TYPE RASTER | ||||
21 | PROCESSING "BANDS=1,2,3" | ||||
22 | PROJECTION | ||||
23 | "init=epsg:4326" | ||||
24 | END | ||||
25 | END | ||||
26 | LAYER | ||||
27 | NAME "states" | ||||
9 | DATA "wcountry.shp" | 28 | DATA "wcountry.shp" | ||
12 | CLASS | 31 | CLASS | ||
t | 13 | NAME "World Countries" | t | 32 | NAME "The Upper Great Lakes States" |
14 | STYLE | 33 | STYLE |
这个 Mapfile 配置了 WMS 服务。查看功能:
这里使用 MapServer 的 map
模式进行查看。
GetMap
的情况要使用 GetMap
, 需要在 WMS 中开启 GetMap
选项:
如果不开启的话,访问 URL 会显示 :
<ServiceExceptionReport version="1.3.0" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/wms/1.3.0/exceptions_1_3_0.xsd"><ServiceException>
msWMSDispatch(): WMS server error. WMS request not enabled. Check wms/ows_enable_request settings.
</ServiceException></ServiceExceptionReport>
注意,使用 GetMap
, 必须设置好投影。如果没设置好,访问会出现 :
<ServiceExceptionReport version="1.3.0" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/wms/1.3.0/exceptions_1_3_0.xsd"><ServiceException code="InvalidCRS">
msWMSLoadGetMapParams(): WMS server error. Cannot set new CRS on a map that doesn't have any projection set. Please make sure your mapfile has a projection defined at the top level.
</ServiceException></ServiceExceptionReport>
下面是正确的访问方式。需要注意,URL中传递到服务器图的长、宽参数。
看起来 GETMAP
与 MapServer 的 mode=map
差不多。
注意:
Version of WMS 1.1.1 and WMS 1.3.0 have different request parameter for coordinate system :
- SRS=EPSG:4326 for 1.1.1
- CRS=CRS:84 for 1.3.0
上面使用范围与整个数据的范围一致,结果看起来没什么不一样。下面缩小一下范围,来获取地图中的某一部分。
根据说明,使用参数 CRS=EPSG:4326
也是可以的。但我未成功。 可能需要配置 MapFile 。
上面的效果,在 MapServer CGI 控制中也可以实现,通过设置浏览的 zoom
级别, 地图的 x
与 y
坐标。但是 GetMap
很明显更加灵活。除些之外, WMS 作为一种标准,还有更多的优点。