5.3. 在MapServer中使用WMS服务GetMap

GetMap 操作用于生成地图,地图可以是一张图片,也可以是一组图形元素。 GetMap 允许客户端请求多个服务器创建重叠的地图图层,从而处理具有相同参考框架、大小和比例的像素几何图形。这些层可以在客户端以一定的顺序显示,并且可以根据人类的可视化需求使用透明像素技术来显示来自不同来源的地图信息。

GetMap 请求通常使用HTTP/GET通过URL编码调用基本的WMS,也可以使用HTTP/POST编码与支持SLD的WMS通信。GetMap 请求必须指定所请求的层(层)、每个层使用的样式(Styles)、空间参考系(SRS)、边界矩形(BBox)、图像格式( format )和大小( widthheight )和其他参数。

Web地图服务支持以图片或图形格式显示地图视图。图像格式包括公共图像格式,如GIF、PNG、JPEG等。大多数Web浏览器都支持这些格式,其他图形格式的显示也可能需要一些帮助程序来支持。图形格式包括在WMS中不常用的SVG和WebCGM格式。

此外,可选的 transparent 参数用于指定贴图的背景是否透明。默认值为 False 。允许透明绘制返回结果的函数,以便可以覆盖不同请求的地图。每个WMS优选地提供支持与其他地图图像重叠的透明显示图像格式。

有效的 GetMap 请求将返回由具有指定样式、空间参考系、边界矩形、大小、格式和透明度的地理参考图层组成的地图。无效的 GetMap 请求返回格式化的错误消息。在HTTP上下文中,返回值的内容类型是MIME类型。

5.3.1. 使用GetMap进行请求

此处介绍了对已发布的MapServer WMS服务的GetMap访问。

第一个是Mapfile:

 1MAP
 2    NAME "EX2_"
 3    IMAGETYPE "png24"
 4    EXTENT -180 -90 180 90
 5    SIZE 600 300
 6    SHAPEPATH "/gdata"
 7    SYMBOLSET "../symbols/symbols35.sym"
 8    FONTSET "../fonts/fonts.list"
 9    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
96END

与前一年相比 mfa1.map

diff_mfb1_mfa1.html

此Mapfile使用WMS服务进行配置。查看功能:

Open a link

5.3.2. 查看地图

在这里,使用MapServer的 map 模式进行查看。

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb2.map&layer=states&mode=map

查看地图

5.3.3. 使用GetMap进行配置

未启用 GetMap

要使用 GetMap 请求时,需要启用 GetMap Mapfile中的WMS选项:

如果未启用,它将显示以下结果作为对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>

针对WMS的预测

请注意,要使用 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>

Yo can click the link to view the actual Error result page.

请求WMS

以下是访问它的正确方法。请注意, lengthwidth 以URL形式传递给服务器图形的参数。

看起来 GETMAP 请求结果类似于MapServer的 mode=map

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb2.map&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMAP&LAYERS=states&BBOX=-180,-90,180,90&CRS=CRS:84&INFO_FORMAT=text/html&format=image/png&width=200&height=150&styles=

Use GetMap

备注

WMS 1.1.1和WMS 1.3.0版本对坐标系的请求参数不同:

  • SRS=EPSG:4326 对于1.1.1

  • CRS=CRS:84 对于1.3.0

5.3.4. 使用GetMap获取部分地图

上面使用的范围与整个数据的范围一致,结果看起来没有什么不同。让我们缩小以获得地图的一部分。

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb2.map&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMAP&LAYERS=states&BBOX=73,3,136,54&CRS=CRS:84&INFO_FORMAT=text/html&format=image/png&width=200&height=150&styles=

Get a partial map with GetMap

根据描述,该参数 CRS = EPSG: 4326 也可以使用。但我没有成功,您可能需要配置Mapfile。

在MapServer CGI控件中也可以实现上述效果,方法是设置 zoom 浏览级别、 xy 地图的坐标,但是 GetMap 显然更加灵活。除此之外,WMS作为一种标准还有更多的优势。