WCS – Web Coverage Service ,WCS是OGC定义的在Web上以“Coverage”的形式共享地理空间数据的规范。所谓“Coverage”是指能够返回其时空域中任意指定点的值的数据,其形式易于输入到模型中使用。WCS服务是以“Coverage”的形式实现了栅格影像数据集的共享。
正如在WMS和WFS支持中一样,通过向 .map
文件添加某些元数据关键字/值对来启用 WCS 发布。
MapServer 只针对满足以下条件的层,并将其包含在其WCS功能中:
RASTER
;wcs_enable_request
;wcs_label
;wcs_label
、 wcs_rangeset_name
、wcs-rangeset-label
;看一下本节使用的 Mapfile :
01 MAP
02 EXTENT -180 -90 180 90
03 SIZE 600 300
04 SHAPEPATH "/gdata"
05 OUTPUTFORMAT
06 NAME "GEOTIFF_16"
07 DRIVER "GDAL/GTiff"
08 MIMETYPE "image/tiff"
09 IMAGEMODE FLOAT32
10 EXTENSION "tif"
11 END
12 WEB
13 IMAGEPATH "/owg/ms_tmp/"
14 IMAGEURL "/ms_tmp/"
15 METADATA
16 "wcs_onlineresource" "http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map"
17 "wcs_keywordlist" "wcs,test"
18 "wcs_enable_request" "*"
19 END
20 END
21 PROJECTION
22 "init=epsg:4326"
23 END
24 LAYER
25 METADATA
26 "wcs_keywordlist" "land, shallow, topo, world"
27 END
28 NAME "world-img"
29 DATA "land_shallow_topo_8192.tif"
30 STATUS OFF
31 TYPE RASTER
32 PROJECTION
33 "init=epsg:4326"
34 END
35 END
36 END
如同WMS和WFS中一样,也可以使用 GetCapabilities
来对 WCS 的功能进行查看:
http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map&SERVICE=WCS&VERSION=2.0.1&REQUEST=GetCapabilities
对参数使用 Python 进行解析:
>>> [print(x) for x in url.split('&')]
http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map
SERVICE=WCS
VERSION=2.0.1
REQUEST=GetCapabilities
查看输出的 XML 格式的结果,这里只展示与版本相关的地方:
<ows:ServiceType codeSpace="OGC">OGC WCS</ows:ServiceType>
<ows:ServiceTypeVersion>2.0.1</ows:ServiceTypeVersion>
<ows:ServiceTypeVersion>1.1.1</ows:ServiceTypeVersion>
<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
<ows:Profile>http://www.opengis.net/spec/WCS/2.0/conf/core</ows:Profile>
可以看到 WCS 的版本有:
DescribeCoverage
请求列出了有关特定覆盖范围产品的更多信息。
参数说明如下:
>>> [print(x) for x in url.split('&')]
http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map
SERVICE=WCS
VERSION=2.0.1
REQUEST=DescribeCoverage
COVERAGEID=world-img
不同版本之间的参数有较大差别,返回的结果也不同,可以分别打开链接看一下:
WFS 1.0.0:
http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map&SERVICE=WCS&VERSION=1.0.0&REQUEST=DescribeCoverage&COVERAGE=world-img
对 URL 进行解析:
>>> [print(idx, x) for idx, x in enumerate(url.split('&'))]
0 http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map
1 SERVICE=WCS
2 VERSION=1.0.0
3 REQUEST=DescribeCoverage
4 COVERAGE=world-img
WFS 1.1.1:
http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map&SERVICE=WCS&VERSION=1.1.1&REQUEST=DescribeCoverage&IDENTIFIERS=world-img
对 URL 进行解析:
>>> [print(idx, x) for idx, x in enumerate(url.split('&'))]
0 http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map
1 SERVICE=WCS
2 VERSION=1.1.1
3 REQUEST=DescribeCoverage
4 IDENTIFIERS=world-img
GetCoverage
返回数据,也就是栅格数据。 由于此时请求没法指定文件的名称与后缀,可以将文件下载后保存,并修改成以 .tif
为后缀的文件。
这个文件具有地理空间信息。
参数分解如下:
>>> [print(idx, x) for idx, x in enumerate(url.split('&'))]
0 http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map
1 SERVICE=WCS
2 VERSION=1.1.0
3 REQUEST=GetCoverage
4 IDENTIFIER=world-img
5 FORMAT=image/tiff
6 BOUNDINGBOX=43,33,44,34,urn:ogc:def:crs:EPSG::4326
GetCoverage
也可以直接返回图片,只需要修改 format=image/png
。但是要注意,返回的图片,必须在 Web 中通过单独的请求返回,无法作为 <image>
对象在网页中使用。
下面是一个实例, 网页中的图片,此处是无法显示的。但是通过“右键”->“查看图像”,能够看到是一幅图片。