在 MapServer 中使用 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类型。

使用 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 "/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 2556    IMAGECOLOR 255 255 255
nn7    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    LAYER16    LAYER
n8        NAME "world-country"n17        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        CLASS31        CLASS
t13            NAME "World Countries"t32            NAME "The Upper Great Lakes States"
14            STYLE33            STYLE

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

打开链接

查看地图

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

查看地图

配置使用 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 与 MapServer 的 mode=map 差不多。

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

使用 GetMap 获取部分地图

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

使用GetMap获取的部分地图

使用 GetMap 获取部分地图

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

上面的效果,在 MapServer CGI 控制中也可以实现,通过设置浏览的 zoom 级别, 地图的 xy 坐标。但是 GetMap 很明显更加灵活。除些之外, WMS 作为一种标准,还有更多的优点。