WMS GetMap 访问

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 请求

这里说明发布的 MapServer WMS 服务的 GetMap 访问。

首先是 Mapfile:

01 MAP
02     NAME "EX2_"
03     IMAGETYPE "png24"
04     EXTENT -180 -90 180 90
05     SIZE 600 300
06     SHAPEPATH "../geodata"
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 "/oswebgis/ms_tmp/"
20         IMAGEURL "/ms_tmp/"
21         METADATA
22             "wms_title" "WMS Demo Server"
23             "wms_version" "1.3.0"
24             "wms_onlineresource" "http://192.168.56.1/cgi-bin/mapserv?map=/oswebgis/example_ogc.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 "states"
37         DATA "wcountry.shp"
38         STATUS OFF
39         TYPE POLYGON
40         TEMPLATE "tmpl_ogc.html"
41         METADATA
42             "wms_title" "test2"
43             "wms_version" "1.3.0"
44             "wms_srs" "EPSG:4326 EPSG:3857"
45             "wms_enable_request" "*"
46             "ows_enable_request" "*"
47             "wms_feature_info_mime_type" "text/html"
48             "wms_format" "image/png"
49         END
50         PROJECTION
51             "init=epsg:4326"
52         END
53         CLASS
54             NAME "States"
55             STYLE
56                 COLOR 232 232 232
57                 OUTLINECOLOR 32 32 32
58             END
59         END
60     END
61     LAYER
62         NAME "states_line"
63         DATA "wcountry.shp"
64         STATUS OFF
65         TYPE LINE
66         TEMPLATE "tmpl_ogc.html"
67         METADATA
68             "wms_title" "test3"
69             "wms_version" "1.3.0"
70             "wms_srs" "EPSG:4326 EPSG:3857"
71             "wms_enable_request" "*"
72             "ows_enable_request" "*"
73             "wms_feature_info_mime_type" "text/html"
74             "wms_format" "image/png"
75         END
76         PROJECTION
77             "init=epsg:4326"
78         END
79         CLASS
80             NAME "State Boundary"
81             STYLE
82                 COLOR 132 132 32
83             END
84         END
85     END
86 END

与前面 xmfa1.map 相比:

3    EXTENT -180 -90 180 903    EXTENT -180 -90 180 90
n4    SIZE 400 300n4    SIZE 600 300
5    SHAPEPATH "../geodata"5    SHAPEPATH "../geodata"
6    IMAGECOLOR 255 255 2556    IMAGECOLOR 255 255 255
tt7    WEB
8        METADATA
9            "wms_title" "WMS Demo Server"
10            "wms_onlineresource" "http://webgis.osgeo.cn/cgi-bin/mapserv?map=/oswebgis/xmfb1.map&"
11            "ows_onlineresource" "http://webgis.osgeo.cn/cgi-bin/mapserv?map=/oswebgis/xmfb1.map&"
12            "wms_srs" "EPSG:4269 EPSG:4326"
13            "wms_enable_request" "* !GetFeatureInfo"
14        END
15    END
7    LAYER16    LAYER

这个 Mapfile 配置了 WMS 服务。查看功能:

打开链接

查看地图

查看地图

配置使用 GetMap

不开启 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获取的地图

使用 GetMap

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 and CRS=CRS:84 for 1.3.0

使用 GetMap 获取部分地图

上面使用范围与整个数据的范围一致,结果看起来没什么不一样。下面缩小一下范围,来获取地图中的某一部分。

使用GetMap获取的部分地图

使用 GetMap 获取部分地图

see mapserver wms

根据说明,使用参数 CRS=EPSG:4326 也是可以的。但我未成功。 可能需要配置 MapFile.