7.1. WCS地图服务¶
WCS-网络覆盖服务,WCS是OGC定义的以“Coverage”形式在网络上共享地理空间数据的规范。所谓覆盖范围,是指能够返回其时空域中任意指定点的值,其形式便于输入模型使用的数据。WCS服务以Coverage的形式实现了栅格影像数据集的共享。
7.1.1. Mapfile定义¶
与WMS和WFS支持一样,WCS发布是通过将某些元数据键/值对添加到 .map
文件来启用的。
MapServer仅针对满足以下条件的层,并将其包括在其WCS函数中:
数据源为栅格,可使用GDAL进行处理(例如GeoTIFF、Erdas Image、…);
必须设置层名称;
将图层类型设置为
RASTER
;Web元数据或层元数据
wcs_enable_request
必须设置;网络元数据
wcs_label
必须设置;必须设置图层元数据
wcs_label
,wcs_rangeset_name
,wcs-rangeset-label
;图层可以通过WCS提供服务(参见MS RFC 67);
即使在地图级别设置了投影,也必须设置层投影。
请看一下本节中使用的Mapfile:
1MAP
2 EXTENT -180 -90 180 90
3 SIZE 600 300
4 SHAPEPATH "/gdata"
5 OUTPUTFORMAT
6 NAME "GEOTIFF_16"
7 DRIVER "GDAL/GTiff"
8 MIMETYPE "image/tiff"
9 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
36END
7.1.2. 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
7.1.3. DescribeCoverage请求¶
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:
解析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:
解析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
7.1.4. GetCoverage的用法¶
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返回图像¶
GetCoverage
也可以直接返回图片,只需修改 format=image/png
。然而需要注意的是,返回的图像必须通过Web中的单独请求返回,并且不能在网页中作为 <image>
对象。
以下是一个示例,即网页中的图片,无法在此处显示。但通过“右键单击”->“查看图像”,可以看到它是一张图片。