WCS地图服务

WCS – Web Coverage Service ,WCS是OGC定义的在Web上以“Coverage”的形式共享地理空间数据的规范。所谓“Coverage”是指能够返回其时空域中任意指定点的值的数据,其形式易于输入到模型中使用。WCS服务是以“Coverage”的形式实现了栅格影像数据集的共享。

Mapfile 定义

正如在WMS和WFS支持中一样,通过向 .map 文件添加某些元数据关键字/值对来启用 WCS 发布。

fig WCS

MapServer 只针对满足以下条件的层,并将其包含在其WCS功能中:

  • 数据源是一个栅格,并且可以使用 GDAL 处理(例如 GeoTIFF 、Erdas Imaging, ... ...);
  • 必须设置层名称;
  • 图层类型设置为 RASTER
  • 必须设置Web 元数据或图层元数据 wcs_enable_request
  • 必须设置Web元数据 wcs_label
  • 必须设置图层元数据 wcs_labelwcs_rangeset_namewcs-rangeset-label
  • 图层可以通过WCS提供服务(请参见 MS RFC 67 );
  • 必须设置层投影,即使投影设置在地图级别。

看一下本节使用的 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

GetCapabilities请求

如同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 的版本有:

  • 2.0.1
  • 1.1.1
  • 1.0.0

DescribeCoverage请求

DescribeCoverage 请求列出了有关特定覆盖范围产品的更多信息。

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map&SERVICE=WCS&VERSION=2.0.1&REQUEST=DescribeCoverage&COVERAGEID=world-img

参数说明如下:

>>> [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的用法

GetCoverage 返回数据,也就是栅格数据。 由于此时请求没法指定文件的名称与后缀,可以将文件下载后保存,并修改成以 .tif 为后缀的文件。 这个文件具有地理空间信息。

http://webgis.cn/cgi-bin/mapserv?map=/owg/mfw8.map&SERVICE=WCS&VERSION=1.1.0&REQUEST=GetCoverage&IDENTIFIER=world-img&FORMAT=image/tiff&BOUNDINGBOX=43,33,44,34,urn:ogc:def:crs:EPSG::4326

参数分解如下:

>>> [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 返回图片

GetCoverage 也可以直接返回图片,只需要修改 format=image/png 。但是要注意,返回的图片,必须在 Web 中通过单独的请求返回,无法作为 <image> 对象在网页中使用。

下面是一个实例, 网页中的图片,此处是无法显示的。但是通过“右键”->“查看图像”,能够看到是一幅图片。