WCS服务器

作者

Jeff McKenna

联系方式

jmckenna at gatewaygeomatics.com

作者

Stephan Meissl (斯蒂芬梅塞尔)

联系方式

stephan.meissl at eox.at

作者

Fabian Schindler

联系方式

fabian.schindler at eox.at

最后更新

2017-12-05

介绍

WCS(或Web覆盖服务)允许发布“覆盖范围”——表示空间变化现象的数字地理空间信息。在MapServer世界中,它允许对栅格数据进行未过滤的访问。从概念上讲,很容易将WCS视为WFS的栅格等价物。以下文档基于 Open Geospatial Consortium's (OGC) Web Coverage Service Interfaces Implementation Specification version 1.0.0 .

软件需求

为了使MapServer能够提供 WCS 数据服务,必须针对某些库进行编译:

  • 项目:重新投影库。需要4.4.3或更高版本。

  • GDAL:栅格支持库。

  • MapServer: version>=4.4 (更新此文档时用5.0.2测试)

对于WCS 1.1.x(MapServer 5.2)和WCS 2.0(MapServer 6.0)支持,还有一个附加要求:

  • libxml2: 一个XML解析器和生成库。

请看 MapServer UNIX Compilation and Installation HowTo 有关编译支持这些库和功能的MapServer的详细说明。对于Windows用户, MapServer for Windows (MS4W) 提供WCS服务器支持。

配置 Mapfile 以服务 WCS 层

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

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

  • 数据源是一个栅格,能够使用 GDAL 处理的(例如 GeoTIFF 、Erdas Imaging,…)

  • 必须设置层名称

  • 图层类型设置为 RASTER

  • 必须设置 WEB 元数据或 LAYER11 元数据 ``wcs_enable_request

  • 必须设置Web元数据 wcs_label

  • 必须设置层元数据 wcs_label

  • 必须设置层元数据 wcs_rangeset_name

  • 必须设置层元数据 wcs-rangeset-label

  • 图层可以通过WCS提供服务(请参见 MS RFC 67

  • 必须设置层投影,即使投影设置在地图级别(a bug?)

WCS服务器 Mapfile 示例

下面是一个简单的WCS服务器 Mapfile 的示例。注意所需参数的注释。

MAP
  NAME WCS_server
  STATUS ON
  SIZE 400 300
  SYMBOLSET "../etc/symbols.txt"
  EXTENT -2200000 -712631 3072800 3840000
  UNITS METERS
  SHAPEPATH "../data"
  IMAGECOLOR 255 255 255
  FONTSET "../etc/fonts.txt"


  #
  # Start of web interface definition
  #
  WEB
    IMAGEPATH "/ms4w/tmp/ms_tmp/"
    IMAGEURL "/ms_tmp/"
    METADATA
      "wcs_label"           "GMap WCS Demo Server" ### required
      "wcs_description"     "Some text description of the service"
      "wcs_onlineresource"  "http://127.0.0.1/cgi-bin/mapserv.exe?" ### recommended
      "wcs_fees"            "none"
      "wcs_accessconstraints"    "none"
      "wcs_keywordlist"          "wcs,test"
      "wcs_metadatalink_type"    "TC211"
      "wcs_metadatalink_format"  "text/plain"
      "wcs_metadatalink_href"    "http://someurl.com"
      "wcs_address"              "124 Gilmour Street"
      "wcs_city"                 "Ottawa"
      "wcs_stateorprovince"      "ON"
      "wcs_postcode"             "90210"
      "wcs_country"              "Canada"
      "wcs_contactelectronicmailaddress" "blah@blah"
      "wcs_contactperson"            "me"
      "wcs_contactorganization"      "unemployed"
      "wcs_contactposition"          "manager"
      "wcs_contactvoicetelephone"    "613-555-1234"
      "wcs_contactfacimiletelephone" "613-555-1235"
      "wcs_service_onlineresource"   "http://127.0.0.1/cgi-bin/mapserv.exe?"
      "wcs_enable_request"           "*"
    END
  END

  PROJECTION
    "init=epsg:42304"
  END


  LAYER
    NAME bathymetry
    METADATA
      "wcs_label"           "Elevation/Bathymetry"  ### required
      "wcs_rangeset_name"   "Range 1"  ### required to support DescribeCoverage request
      "wcs_rangeset_label"  "My Label" ### required to support DescribeCoverage request
    END
    TYPE RASTER ### required
    STATUS ON
    DATA bath_mapserver.tif
    PROJECTION
      "init=epsg:42304"
    END
  END
END # Map File

输出格式

MapServer WCS 支持的栅格格式由图层的 wcs_formats 元数据项确定。这应该包含一个用空格分隔的输出格式驱动程序名称列表。如果不存在,则允许使用所有栅格输出格式。

WCS是一种面向“原始数据”的格式。因此,它通常最适合与 BYTEINT16FLOAT32 格式一起使用,而不是与gdal相关的输出格式,而不是内置的“面向渲染”输出格式。默认情况下,唯一定义的GDAL格式驱动程序是GTIFF驱动程序。以下是使用原始图像模式的输出格式声明示例:

OUTPUTFORMAT
  NAME GEOTIFF_16
  DRIVER "GDAL/GTiff"
  MIMETYPE "image/tiff"
  IMAGEMODE FLOAT32
  EXTENSION "tif"
END

OUTPUTFORMAT
  NAME AAIGRID
  DRIVER "GDAL/AAIGRID"
  MIMETYPE "image/x-aaigrid"
  IMAGEMODE INT16
  EXTENSION "grd"
  FORMATOPTION "FILENAME=result.grd"
END

当返回wcs getcoverge results时,formatOption文件名定义结果文件的首选名称。

测试WCS 1.0服务器

验证功能元数据

好了,现在我们有了一个 Mapfile ,我们必须检查服务器返回的XML功能,以确保没有遗漏。

使用Web浏览器,访问服务器的联机资源URL,在其末尾添加参数 service=wcs&version=1.0.0&request=getcapabilities ,例如:

http://my.host.com/cgi-bin/mapserv?map=mywcs.map&SERVICE=WCS
  &VERSION=1.0.0&REQUEST=GetCapabilities

如果在XML输出中收到错误消息,请采取必要的操作。常见问题和解决方案列在本文档末尾的常见问题解答中。

如果一切顺利,您应该有一个完整的XML功能文档。搜索 WARNING 一词 .. . MapServer插入以 <! 开头的XML注释。--警告:“在XML输出中,如果检测到丢失的mapfile参数或元数据项。

注意,当一个请求发生时,它将通过mapserver中的wms、wfs和wcs(按该顺序)传递,直到其中一个服务响应它为止。

以下是getCapabilities请求的一个工作示例:

WCS GetCapabilities live example

使用描述的覆盖率请求进行测试

好了,既然我们知道我们的服务器可以生成有效的XML getCapabilities响应,那么我们应该测试describeCoverage请求。DescribeCoverage请求列出了有关特定覆盖范围产品的更多信息。

使用Web浏览器,访问服务器的联机资源URL,在其末尾添加参数“service=wcs&version=1.0.0&request=describeCoverage&coverage=layerName”,例如:

http://my.host.com/cgi-bin/mapserv?map=mywcs.map&SERVICE=WCS
  &VERSION=1.0.0&REQUEST=DescribeCoverage&COVERAGE=bathymetry

下面是一个描述的Coverage请求的工作示例:

WCS DescribeCoverage live example

使用getcoverge请求进行测试

getcoverage请求允许以指定的输出格式向客户机检索覆盖范围。

以下是根据WCS规范所需的getcoverge参数列表:

VERSION=version: 请求版本

REQUEST=GetCoverage: 请求名称

COVERAGE=coverage_name: GetCapabilities 中所述的可用覆盖范围的名称

crs=epsg_code: 表示请求的坐标参考系。

bbox=minx、miny、maxx、maxy: 以crs为单位的边界框角(左下、右上)。需要bbox或time中的一个。

TIME=time1,time2: 请求与时间对应的子集。需要bbox或time之一。

WIDTH=output_width: 地图图片的宽度(像素)。需要宽度/高度或resx/y之一。

HEIGHT=output_height: 地图图片的像素高度。需要宽度/高度或resx/y之一。

RESX=x: 当请求地理网格覆盖率时,这将请求具有特定空间分辨率的子集。 需要宽度/高度或resx/y之一。

RESY=y: 当请求地理网格覆盖率时,这将请求具有特定空间分辨率的子集。 需要宽度/高度或resx/y之一。

FORMAT=output_format: 地图的输出格式,如describeCoverage响应中所述。

根据WCS规范,以下是可选的getcoverge参数:

RESPONSE_CRS=epsg_code: 用来表示覆盖范围响应的坐标参考系统。

因此,按照上述示例,有效的 DescribeCoverage 请求如下:

http://my.host.com/cgi-bin/mapserv?map=mywcs.map&SERVICE=WCS
  &VERSION=1.0.0&REQUEST=GetCoverage&coverage=bathymetry
  &CRS=EPSG:42304&BBOX=-2200000,-712631,3072800,3840000&WIDTH=3199
  &HEIGHT=2833&FORMAT=GTiff

以下是 GetCoverage 请求的一个工作示例(请注意,正在请求350kb tif,因此这可能需要一秒钟):

WCS GetCoverage live example

WCS 1.1.0+ 问题

MapServer 5.2支持WCS 1.1.0和更高版本的WCS协议。在大多数情况下,WCS 1.1.0的 Mapfile 设置与WCS 1.0.0类似,但实际协议发生了实质性的变化。

GetCapabilities

getCapabilities请求与wcs 1.0相同,但版本值不同:

SERVICE=WCS&VERSION=1.1.0&REQUEST=GetCapabilities

返回的功能文档的格式从WCS 1.0大幅度更改,并将OWS用于服务描述。

DescribeCoverage

DescribeCoverage请求类似于WCS 1.0,但使用identifiers关键字而不是coverage来命名所请求的覆盖范围::

SERVICE=WCS&VERSION=1.1.0&REQUEST=DescribeCoverage&IDENTIFIERS=spaceimaging

GetCoverage

GetCoverage 的格式从1.0大幅度更改。以下是 GetCoverage 所需参数的列表:

VERSION=version: 请求版本

REQUEST=GetCoverage: 请求名称

IDENTIFIER=coverage_name: 可用覆盖范围的名称, 如 GetCapabilities 中所述

BOUNDINGBOX=minx,miny,maxx,maxy,crs: 边界框角(左下、右上)及其所在的crs。使用URN描述CRS。

FORMAT=output_format: 网格产品的输出格式(mime类型),如getCapabilities中所述。

如果需要其他空间分辨率,则必须使用以下关键字集指定要生成的输出网格的采样原点和步长。生成的网格将由多个像素和线条组成,这些像素和线条可以以网格偏移分辨率从网格原点开始放置在边界框中。

GRIDBASECRS=crs: grid 的基础 CRS(URN)。

GRIDCS=crs: grid 的 CRS(URN)。

**gridtype=urn:ogc:def:method:wcs:1.1:2dgridin2dcrs:**这是MapServer唯一支持的值。

**gridorigin=x_origin,y_origin:**左上角像素的采样点。

**gridoffsets=x step,y step:**网格采样的x和y步长(分辨率)。两者都是积极的。

此外,还提供以下可选参数。

**range subset=选择:**选择一个范围子集和插值方法。目前只允许对波段进行子集设置。根据范围集名称的不同,可以采用“BandsName[波段[1]]”的形式来选择波段1,或“BandsName:双线性[波段[1]]”的形式来选择具有双线性插值的波段1。

所以一个简单的getcoverge可能看起来像:

SERVICE=WCS&VERSION=1.1.0&REQUEST=GetCoverage&IDENTIFIER=dem&FORMAT=image/tiff
  &BOUNDINGBOX=43,33,44,34,urn:ogc:def:crs:EPSG::4326

更复杂的请求可能如下所示:

SERVICE=WCS&VERSION=1.1.0&REQUEST=GetCoverage&IDENTIFIER=dem&FORMAT=image/tiff
  &BOUNDINGBOX=33,43,34,44,urn:ogc:def:crs:EPSG::4326
  &GridBaseCRS=urn:ogc:def:crs:EPSG::4326&GridCS=urn:ogc:def:crs:EPSG::4326
  &GridType=urn:ogc:def:method:WCS:1.1:2dGridIn2dCrs
  &GridOrigin=33,44&GridOffsets=0.01,0.01
  &RangeSubset=BandsName:bilinear[bands[1]]

还应该注意的是,来自wcs 1.1getcoverge请求的返回结果是多部分mime格式的。通常,这包括一个XML文档引用消息的其他部分的第一部分和一个图像文件部分。但是,对于返回多个文件的输出格式,每个文件将是一个单独的部分。例如,这意味着可以返回一个包含世界文件的jpeg文件,输出格式是适当配置的。

URNs

在WCS 1.1中,URN引用协议坐标系。一些典型的 URNs 是:

urn:ogc:def:crs:EPSG::4326
urn:ogc:def:crs:EPSG:27700
urn:ogc:def:crs:OGC::CRS84

前两个大致相当于epsg:4326和epsg:27700,而第三个则是由ogc定义的crs(基本上是wgs84)。需要注意的一点是,WCS1.1遵循EPSG为地理坐标系定义的轴/元组顺序。这意味着在 urn:ogc:def:EPSG::4326 (WGS84) 中报告或提供的坐标实际上被处理为lat、long、not long、lat。因此,例如,加利福尼亚地区的边界框可能如下所示:

BOUNDINGBOX=34,-117,35,-116,urn:ogc:def:crs:EPSG::4326

同样地,getCapabilities报告的界限和describeCoverage也将在这个顺序中进行适当的排序。

WCS 2

概述

版本6.0引入了对新版本2.0的WCS规范的支持。本节记录新的WCS版本的用法。

WCS 2.0 kvp请求参数

以下kvp请求参数在WCS 2.0中可用:

覆盖ID: COVERAGE wcs 1.0或 IDENTIFIER 参数 对于WCS 1.1. 在DescribeCoverage请求中,可以通过用逗号连接多个ID来请求它们。

SUBSET=axis[,crs](low,high): This parameter subsets the coverage on the given axis. This parameter can be given multiple times, but only once for each axis. The optional sub-parameter crs 可以是epsg定义(如epsg:4326)、urn或uri或“imagecrs”(默认值)。所有 crs 所有子参数 SUBSET 参数必须相等。(例如:您不能在imagecrs中设置一个轴,在epsg:4326中设置另一个轴)。

注解

的语法 crs 子参数不标准,已弃用。请使用 SUBSETTINGCRS 改为参数。

注解

轴子参数的可识别值为:“x”、“x axis”、“x轴”、“x轴”、“long”、“long_轴”、“long轴”、“lon”、“lon_轴”、“lon轴”、“y轴”、“y axis”、“y轴”、“y_轴”、“lat”、“lat_轴”和“lat轴”。

SUBSETTINGCRS=crs: 此参数定义了crs subseting all SUBSETs 用表示,如果没有,也用输出CRS表示。 OUTPUTCRS 指定。默认情况下,所有子集都被解释为与覆盖范围CRS相关。

OUTPUTCRS=crs: 此参数定义输出图像应在哪个crs中表示。

MEDIATYPE=mediatype: 当需要多部分XML/图像输出时,此参数与getcoverge请求相关。应将其设置为“multipart/related”(当前是此参数的唯一可能值)。

SCALEFACTOR=factor: 使用此参数(正浮点)可以调整输出图像的大小。所有轴的比例都相等。

SCALEAXES=axis(value)[,axis(value)]: 使用此参数,可以应用特定于轴的缩放。任何未提及的轴

SCALESIZE=axis(size)[,axis(size)]: 这类似于 SCALEAXES 参数,但允许返回覆盖的绝对像素大小的轴特定设置。

SCALEEXTENT=axis(min:max)[,axis(min:max)]: 此参数被视为 SCALESIZEaxis(max-min) 的参数。

INTERPOLATION=interpolation_method: 这定义了用于重新缩放图像的插值方法。可能的值为“最近”、“双线性”和“平均”。

**rangesubset=band1[,band2[,…]:**使用此参数可以选择波段。此外,还可以对带进行重新排序。可以通过名称(可以使用DescribeCoverage请求检索)或索引(从第一个波段的“1”开始)引用波段。此外,还可以给出一系列波段: 班德克斯:班迪. 这还包括下限和上限。顾名思义,下限必须引用索引较低的带。可以将直接引用到带和间隔混合。例如:rangesubset=band1,band3:band:5,band7

以下参数是 WCS 2.0 Specification - GeoTIFF Coverage Encoding Profile 并且仅适用于geotiff输出格式:

GEOTIFF:COMPRESSION=compression: 返回图像的压缩方法。有效选项包括:无、压缩位、deflate、huffman、lzw和jpeg。

GEOTIFF:JPEG_QUALITY=1-100: 选择压缩方法jpeg时,此值定义算法的质量。

GEOTIFF:PREDICTOR=None|Horizontal|FloatingPoint: The predictor value for the LZW and Deflate compression methods.

**geotiff:interleave=band pixel:**定义图像是带还是像素交错。

**geotiff:tiling=true false:**定义输出图像是否应在内部平铺。

geotiff:tilewidth=tilewidth, geotiff:tileheight=tileheight: 定义内部平铺的大小。必须是可被16整除的正整数。

以下请求参数不是WCS 2.0核心或其任何扩展的一部分,并保持向后兼容性。它们起源于一个没有指定最重要的标准扩展的时代,而没有这个时代,WCS核心就不太有用。他们被否决了。

SIZE=axis(value): 此参数将所需轴的大小设置为所需值(像素)。

RESOLUTION=axis(value): 此参数将所需轴的分辨率设置为所需值(像素/单位)。

注解

这个 SIZERESOLUTION 在一个轴上是互斥的,但可以在不同的轴上混合(例如:X轴上的大小和Y轴上的分辨率)。轴名称也位于 SUBSET, SIZERESOLUTION 参数不能混合。例如:…&subset=x(0100)&size=lon(200)&…虽然轴名称在逻辑上引用同一轴,但不合法。

不变的kvp参数

自WCS标准的最后一个版本以来,以下参数没有(或只是稍微)更改。

VERSION=version: 对于WCS 2.0,应将其设置为“2.0.1”。这个

参数不推荐用于与OGC Web服务公共标准2.0.0相关的getCapabilities。

服务=服务

请求=请求

acceptVersions=版本

节=节

更新序列=更新序列

**acceptFormats=格式:**此参数当前被忽略。

**AcceptLanguages=语言:**用于多语言服务的语言协商。

**格式=格式:**现在还可以使用 Mapfile 中定义的outputformat对象的名称设置所需的格式。与以前版本的wcs不同,当指定了本机格式或可以通过gdal确定本机格式时,此参数是可选的。

map = MpFrase*

kvp请求示例

下面的示例请求概述了新的kvp请求语法:

# GetCapabilities
http://www.yourserver.com/wcs?SERVICE=WCS&ACCEPTVERSIONS=1.0.0,2.0.1
  &REQUEST=GetCapabilities
http://www.yourserver.com/wcs?SERVICE=WCS&REQUEST=GetCapabilities
# DescribeCoverage 2.0
http://www.yourserver.com/wcs?SERVICE=WCS&VERSION=2.0.1
  &REQUEST=DescribeCoverage&COVERAGEID=grey
# GetCoverage 2.0 image/tiff full
http://www.yourserver.com/wcs?SERVICE=WCS&VERSION=2.0.1
  &REQUEST=GetCoverage&COVERAGEID=grey&FORMAT=image/tiff
# GetCoverage 2.0 multipart/related (GML header & image/tiff) full
http://www.yourserver.com/wcs?SERVICE=WCS&VERSION=2.0.1
  &REQUEST=GetCoverage&COVERAGEID=grey&FORMAT=image/tiff
  &MEDIATYPE=multipart/related
# GetCoverage 2.0 image/tiff trim x y both in imageCRS
http://www.yourserver.com/wcs?SERVICE=WCS&VERSION=2.0.1
  &REQUEST=GetCoverage&COVERAGEID=grey&FORMAT=image/tiff
  &SUBSET=x(10,200)&SUBSET=y(10,200)
  &SUBSETTINGCRS=imageCRS
# GetCoverage 2.0 reproject to EPSG 4326
http://www.yourserver.com/wcs?SERVICE=WCS&VERSION=2.0.1
  &REQUEST=GetCoverage&COVERAGEID=grey&FORMAT=image/tiff
  &SUBSET=x(-121.488744,-121.485169)
  &SUBSETTINGCRS=http://www.opengis.net/def/crs/EPSG/0/4326

请参阅 WCS 2.0 tests in msautotest 更多样品请求。

对以前版本的更改

层名称必须是有效的ncname,即:不能以数字开头,并且只能包含字母数字字符。此约束派生的gml:id属性必须是ncname,该属性与覆盖率id相关,覆盖率id本身取自层名称。

指定覆盖范围特定的元数据

对于MapServer中启用了WCS的层,声明WCS 2.0的覆盖率元数据的可能性不同。在最简单的情况下,可以从源映像中检索所有必需的元数据。

出于某种原因,这可能是不可取的,可能是因为源映像不提供这些元数据。并非每个输入图像格式都附加了地理空间元数据。在这种情况下,可以使用层元数据来提供这些信息。

约定在层元数据中设置(wcs_ows)范围和(wcs_ows)大小和(wcs_ows)分辨率之一后,将从中检索所有覆盖范围特定的元数据。否则,如果可能,将通过gdal查询源映像。

相关层元数据字段为(wcs ows)bandcount,(wcs ows)imagemode,(wcs ows)本机格式,以及所有 New band related metadata entries .

HTTP-POST支持

由于版本6.0,MapServer还支持HTTP-POST XML请求。所有可能通过HTTP GET的请求也可以通过POST发送。符合相关标准的WCS 1.1或WCS 2.0可能会发出POST请求。

这是一个getCapabilities请求示例:

<?xml version="1.0" encoding="UTF-8"?>
<wcs:GetCapabilities
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  xsi:schemaLocation="http://www.opengis.net/wcs/2.0
    http://schemas.opengis.net/wcs/2.0/wcsAll.xsd"
  xmlns="http://www.opengis.net/wcs/2.0"
  xmlns:wcs='http://www.opengis.net/wcs/2.0'
  xmlns:ows="http://www.opengis.net/ows/2.0"
  service="WCS">
  <ows:AcceptVersions>
    <ows:Version>2.0.1</ows:Version>
  </ows:AcceptVersions>
  <ows:Sections>
    <ows:Section>OperationsMetadata</ows:Section>
    <ows:Section>ServiceIdentification</ows:Section>
  </ows:Sections>
</wcs:GetCapabilities>

这是一个描述Coverage请求的示例,仅对WCS 2.0有效:

<?xml version="1.0" encoding="UTF-8"?>
<wcs:DescribeCoverage
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  xsi:schemaLocation="http://www.opengis.net/wcs/2.0
    http://schemas.opengis.net/wcs/2.0/wcsAll.xsd"
  xmlns="http://www.opengis.net/wcs/2.0"
  xmlns:wcs="http://www.opengis.net/wcs/2.0"
  service="WCS"
  version="2.0.1">
  <wcs:CoverageId>SOME_ID</wcs:CoverageId>
</wcs:DescribeCoverage>

此示例演示了wcs 2.0 post-xml getcoverge请求的用法:

<?xml version="1.0" encoding="UTF-8"?>
<wcs:GetCoverage
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  xsi:schemaLocation="http://www.opengis.net/wcs/2.0
    http://schemas.opengis.net/wcs/2.0/wcsAll.xsd"
  xmlns="http://www.opengis.net/wcs/2.0"
  xmlns:wcs="http://www.opengis.net/wcs/2.0"
  xmlns:wcscrs="http://www.opengis.net/wcs/crs/1.0"
  xmlns:scal="http://www.opengis.net/wcs/scaling/1.0"
  xmlns:int="http://www.opengis.net/wcs/interpolation/1.0"
  service="WCS"
  version="2.0.1">
  <wcs:CoverageId>SOME_ID</wcs:CoverageId>
  <wcs:DimensionTrim>
    <wcs:Dimension>x</wcs:Dimension>
    <wcs:TrimLow>16.5</wcs:TrimLow>
    <wcs:TrimHigh>17.25</wcs:TrimHigh>
  </wcs:DimensionTrim>
  <wcs:DimensionTrim>
    <wcs:Dimension>y</wcs:Dimension>
    <wcs:TrimLow>47.9</wcs:TrimLow>
  </wcs:DimensionTrim>
  <wcs:format>image/tiff</wcs:format>
  <wcs:mediaType>multipart/related</wcs:mediaType>
  <wcs:Extension>
    <wcscrs:subsettingCrs>http://www.opengis.net/def/crs/EPSG/0/4326</wcscrs:subsettingCrs>
    <wcscrs:outputCrs>http://www.opengis.net/def/crs/EPSG/0/32611</wcscrs:outputCrs>
    <scal:ScaleToSize>
      <scal:TargetAxisSize>
        <scal:axis>x</scal:axis>
        <scal:targetSize>50</scal:targetSize>
      </scal:TargetAxisSize>
      <scal:TargetAxisSize>
        <scal:axis>y</scal:axis>
        <scal:targetSize>50</scal:targetSize>
      </scal:TargetAxisSize>
    </scal:ScaleToSize>
    <int:Interpolation>
      <int:globalInterpolation>NEAREST</int:globalInterpolation>
    </int:Interpolation>
  </wcs:Extension>
</wcs:GetCoverage>

这些是其他一些缩放选项:

<wcs:GetCoverage
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  xsi:schemaLocation="http://www.opengis.net/wcs/2.0
    http://schemas.opengis.net/wcs/2.0/wcsAll.xsd"
  xmlns="http://www.opengis.net/wcs/2.0"
  xmlns:wcs="http://www.opengis.net/wcs/2.0"
  xmlns:scal="http://www.opengis.net/wcs/scaling/1.0"
  service="WCS"
  version="2.0.1">

  <!-- ... -->
  <wcs:Extension>
    <scal:ScaleByFactor>
      <scal:scaleFactor>1.5</scal:scaleFactor>
    </scal:ScaleByFactor>

    <!-- or -->

    <scal:ScaleAxesByFactor>
      <scal:ScaleAxis>
        <scal:axis>x</scal:axis>
        <scal:scaleFactor>1.5</scal:scaleFactor>
      </scal:ScaleAxis>
      <scal:ScaleAxis>
        <scal:axis>y</scal:axis>
        <scal:scaleFactor>2.0</scal:scaleFactor>
      </scal:ScaleAxis>
    </scal:ScaleAxesByFactor>

    <!-- or -->

    <scal:ScaleToExtent>
      <scal:TargetAxisExtent>
        <scal:axis>x</scal:axis>
        <scal:low>10</scal:low>
        <scal:high>20</scal:high>
      </scal:TargetAxisExtent>
      <scal:TargetAxisExtent>
        <scal:axis>y</scal:axis>
        <scal:low>20</scal:low>
        <scal:high>30</scal:high>
      </scal:TargetAxisExtent>
    </scal:ScaleToExtent>
  </wcs:Extension>
</wcs:GetCoverage>

geotiff参数使用如下:

<wcs:GetCoverage
   xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
   xsi:schemaLocation="http://www.opengis.net/wcs/2.0
     http://schemas.opengis.net/wcs/2.0/wcsAll.xsd"
   xmlns="http://www.opengis.net/wcs/2.0"
   xmlns:wcs="http://www.opengis.net/wcs/2.0"
   xmlns:geotiff="http://www.opengis.net/gmlcov/geotiff/1.0"
   service="WCS"
   version="2.0.1">

   <!-- ... -->
   <wcs:Extension>
     <geotiff:parameters>
       <geotiff:compression>LZW</geotiff:compression>
       <geotiff:predictor>Horizontal</geotiff:predictor>
       <geotiff:interleave>Band</geotiff:interleave>
       <geotiff:tiling>yes</geotiff:tiling>
       <geotiff:tilewidth>256</geotiff:tilewidth>
       <geotiff:tileheight>256</geotiff:tileheight>
     </geotiff:parameters>
   </wcs:Extension>
 </wcs:GetCoverage>

请参阅 WCS 2.0 Specification - XML/POST Protocol Binding Extension 以及 WCS 2.0 Schemas 有关WCS 2.0中发布请求的更多信息。

激发下载服务支持

自7.2版以来,MapServer WCS 2.0还支持Inspire下载服务。要启用此功能,请 wcs_inspire_capabilities 设置必须设置为 urlembed .

请参阅 INSPIRE 下载服务 进一步元数据选项的文档。

多语言支持

Inspire下载服务支持的一部分是对多语言WCS服务的支持。与 wcs_languages 可以设置语言说明符的(逗号分隔)列表。设置后,客户机和服务器可以使用 ACCEPTLANGUAGES 参数(或 <ows:AcceptLanguages> / <ows:Language> 使用XML时标记)。“接受语言”列表中包含的第一个项目,该列表使用 wcs_languages 将用于生成的能力文档

有关更多信息,请参见 对某些功能字段的多语言支持 .

参考截面

为了避免混淆,在OGC WCS服务中只评估“wcs_u*”和“ows_*”前缀元数据条目。以前的版本使用“wms_u*”前缀项作为回退,在版本6.0中删除该回退项,以便强制执行显式决策。模块将按此顺序查找“wcs_u*”和“ows_*”元数据前缀。

以下元数据在 Mapfile 的设置中可用:

Web对象元数据

ows_allowed_ip_list (或wcs-allowed-ip-u列表)

  • *描述:*(可选)允许访问服务的IP地址列表。

    例子::

    METADATA
      "ows_allowed_ip_list" "123.45.67.89 11.22.33.44"
    END
    

ows_denied_ip_list (或wcs_拒绝的_ip_列表)

  • *描述:*(可选)拒绝访问服务的IP地址列表。

    例子::

    METADATA
      "ows_denied_ip_list" "123.45.67.89 11.22.33.44"
    END
    

wcs_abstract

  • *描述:*(可选)服务的简要描述,映射到OWS:abstract(仅限WCS 1.1+)。

wcs_accessconstraints

  • *描述:*(可选)描述服务提供者施加的任何访问约束的代码列表。关键字none是保留的,表示没有施加访问约束。

wcs_地址,wcs_城市,wcs_联系人电子邮箱地址,wcs_联系人设备电话,wcs_联系人组织,wcs_联系人,wcs_联系人位置,wcs_联系人语音电话,wcs_国家/地区,wcs_邮编,wcs_状态或提供

  • *说明:*(可选)联系地址信息。如果提供,则需要所有12个元数据项。您也可以使用 responsibleparty

wcs_band_names

wcs_description

  • *描述:*(可选)服务器的描述。

wcs_enable_request (或) ows_enable_request)

  • *说明:*要启用的请求的以空格分隔的列表。默认值为“无”。可以启用以下请求: GetCapabilities, GetCoverageDescribeCoverage.

  • 实例:

    GetCapabilitiesGetCoverage:

    "wcs_enable_request" "GetCapabilities GetCoverage"
    

    启用除'getcapabilities'之外的所有请求`

    "wcs_enable_request" "* !GetCapabilities"
    

wcs_fees

  • *说明:*(可选)一个文本字符串,指示服务提供商收取的任何费用。

wcs_keywords

  • *说明:*(可选)用于目录搜索的短词。

wcs_label

  • *描述:*(必需)服务器的可读标签。

wcs_metadatalink_format

  • *描述:*(可选)元数据记录的文件格式mime类型(例如“text/plain”)。还必须指定Web元数据wcs_metadatalink_type和wcs_metadatalink_href。

wcs_metadatalink_href

  • *描述:*(可选)服务器元数据的URL。还必须指定Web元数据wcs_metadatalink_格式和wcs_metadatalink_类型。

wcs_metadatalink_type

  • *说明:*(可选)元数据符合的标准。目前只有两种类型有效:“TC211”是指[ISO 19115],而“FGDC”是指[FGDC-STD-001-1988]。还必须指定Web元数据wcs_metadatalink_格式和wcs_metadatalink_href。

wcs_name

  • *描述:*(可选)服务器的名称。

WCS责任部门地址_行政区域,WCS责任部门地址_城市,WCS责任部门地址_国家,WCS责任部门地址_交付地点,WCS责任部门地址_电子邮箱地址,WCS责任部门地址_邮政编码,WCS责任部门名称,WCS责任部门资源,WCS责任部门eparty_organizationname,wcs_responsibility party_phone_faxix,wcs_responsibility party_phone_voice,wcs_responsibility party_positionname

  • Description: (可选)联系地址信息。如果提供,则需要所有12个元数据项。您也可以使用地址*元数据。

wcs_service_onlineresource

  • *描述:*(可选)顶级OnlineResource URL。MapServer使用OnlineResource元数据(如果提供)的顺序如下:

    1. wcs_service_onlineresource

    2. ows_service_onlineresource

    3. WCS联机资源(或自动生成的URL,请参阅本文档的联机资源部分)

wcs_languages

层对象元数据

ows_allowed_ip_list

与Web对象中的“允许使用”列表相同。

ows_denied_ip_list

与Web对象中的“OWS拒绝”列表相同。

wcs_abstract

  • *描述:*(可选)服务的简要描述,映射到OWS:abstract(仅限WCS 1.1+)。

wcs_description

  • *描述:*(可选)层的描述。

wcs_enable_request (或) ows_enable_request)

  • *说明:*要启用的请求的以空格分隔的列表。默认值为“无”。可以启用以下请求: GetCapabilities, GetCoverageDescribeCoverage.

  • 实例:

    GetCapabilitiesGetCoverage:

    "wcs_enable_request" "GetCapabilities GetCoverage"
    

    启用除'getcapabilities'之外的所有请求`

    "wcs_enable_request" "* !GetCapabilities"
    

wcs_extent

  • *说明:*(可选)层的边界框,必须为平铺数据提供。逗号分隔,格式为:minx、miny、maxx、maxy

wcs_formats

  • *说明:*(可选)此层可能需要的格式,用空格分隔。(例如“gtiff mrsid”)

wcs_keywords

  • *说明:*(可选)用于目录搜索的短词。

wcs_label

  • *描述:*(必需)层的可读标签。

wcs_metadatalink_format

  • *描述:*(可选)元数据记录的文件格式mime类型(例如“text/plain”)。还必须指定Web元数据wcs_metadatalink_type和wcs_metadatalink_href。

wcs_metadatalink_href

  • *描述:*(可选)层元数据的URL。还必须指定Web元数据wcs_metadatalink_格式和wcs_metadatalink_类型。

wcs_metadatalink_type

  • *说明:*(可选)元数据符合的标准。目前只有两种类型有效:“TC211”是指[ISO 19115],而“FGDC”是指[FGDC-STD-001-1988]。还必须指定Web元数据wcs_metadatalink_格式和wcs_metadatalink_href。

wcs_name

  • *描述:*(可选)层的名称。

wcs_nativeformat

  • *说明:*(可选)提供的栅格层的当前格式。(例如,“gtiff”)(用于WCS 1.0)

wcs_native_format

  • *说明:*(可选)所服务栅格层当前格式的mime类型(例如“image/tiff”)。此字段仅在层元数据提供覆盖率元数据时使用(当设置了wcs_范围和wcs_大小/wcs_分辨率时)。设置后,当没有指定其他格式时,wcs 2.0 getcoverge请求将使用此格式(那么,format参数是可选的)。

wcs_outputformat_{OUTPUTFORMATNAME}_creationoption_{OPTIONNAME}

  • *描述:*(可选)(在MapServer 7.2.0中添加)以特定于(gdal)输出格式和特定于层的方式提供创建选项。output format name应由用户用层允许的输出格式的output format.name值替换。和optionname由对outputformat.driver有效的有效gdal创建选项创建。

    此元数据项的目的是提供依赖于层的创建选项,通常是在依赖于该层的生成的栅格文件中配置一些元数据(对于非依赖于层的配置选项,应该使用outputformat.formatOption)。

    WCS GRIB output in msautotest 作为如何配置grib2 WCS输出的一个实际示例(需要gdal 2.3.0)

Axes Descriptions

MapServer允许您为一个层定义一个数字。定义特定元数据(如描述)时,单个轴按名称标识。所有定义的轴都必须列在rangeset_axes元数据标记中,以便mapserver提前知道需要什么。通过将名称“bands”添加到rangeset_axes列表中,自动生成多波段日期的特殊范围集。如果找到,MapServer将自动为图像带生成元数据。当然,您可以使用下面的命名约定扩展这个基本支持。

wcs_rangeset_axes

  • Description: (Optional) Delimited list of defined range sets. If defined, you can also use the following nine metadata items, where rangeset axis 与此中提供的轴名称匹配 wcs_rangeset_axes 元数据:(仅限WCS 1.x)

    范围集轴u语义

    {rangeset axis}_refsys

    {rangeset axis}_refsyslabel

    范围集轴_描述

    范围集轴_标签

    范围集轴_值

    范围集轴_值_语义

    范围集轴_值_类型

    范围集轴_间隔

wcs_rangeset_description

  • *描述:*(可选,用于DescribeCoverage请求)RangeSet描述(仅限WCS 1.0)

wcs_rangeset_label

  • *描述:*(必需,用于DescribeCoverage请求)RangeSet标签(仅限WCS 1.x)

wcs_rangeset_name

  • *描述:*(必需,对于DescribeCoverage请求)RangeSet名称(仅限WCS 1.x)

wcs_rangeset_nullvalue

  • *描述:*(可选,用于DescribeCoverage请求)RangeSet单个空值(仅限WCS 1.x)

wcs_srs

  • *描述:*(可选)层的空间参考系统,形式为:epsg:code(例如epsg:42304)

wcs_timeitem

  • *描述:*(可选)时空索引中包含时间值的属性。

wcs_timeposition

  • *描述:*(可选)给定覆盖范围的开始和结束时间列表(即“2000-11-11t11:11:11z,2001-11-11t11:11:11z”),在发布getcapabilities时使用。

层元数据API

如果 wcs_metadatalink_href 未定义,MapServer将为给定层提供指向层元数据API的链接。见 Layer Metadata API 有关详细信息的文档。

时空指标

MapServer长期以来支持将数据集拆分为更小、更易于管理的块或块的方法。在这种情况下,shapefile用于存储每个图块的边界,属性保存实际数据的位置。在mapserver mapfile中,层关键字tileindex和tileitem用于激活tiling。

举一个例子,一个组织想要为数百甚至数千个modis场景提供服务。五幅图像覆盖了空间范围,每组五幅图像随拍摄日期而变化。对于对WCS感兴趣的组织来说,这是一个相当常见的场景,现有的平铺支持没有充分解决这一问题。在MapServer的早期版本中,开发人员必须为每组五张图像创建一个图块索引和一个层定义。这可能导致配置文件太长,难以管理。

为了更有效地支持WCS规范,在MapServer中实现了一种新的平铺方案。一种支持空间子设置,但也支持基于图块索引中的任何属性的特殊子设置。在许多情况下,可以使用时间属性,但子设置不限于这种情况。新方案引入了分块索引层的概念,即用一个单独的层定义来描述分块索引数据集。通过这一点,我们可以获得任何mapserver层的所有好处,最重要的是我们可以将mapserver过滤器应用于数据。过滤器可以在运行时使用mapserver cgi、mapscript或通过wcs服务器接口定义。使用索引的层的语法保持不变,除非 瓦片索引 引用索引层而不是外部形状文件。

因此,再次查看上面的示例,我们可以将mapserver配置减少到两个层定义,一个用于tile索引,另一个用于图像本身。提取一个具有图像价值的单一日期现在是在平铺索引层中设置适当的过滤器的问题。

建筑时空瓦指标

仅仅因为没有现成的工具,开发这些平铺索引比开发基本索引更困难。幸运的是,我们可以利用MapServer中现有的工具或支持库(如gdal)对其输出进行后处理。

在上面的例子中,如果您愿意卷起袖子编写一些代码,那么构建一个索引就相对简单了。首先,需要建立基本的空间指标。gdal实用程序gdalindex已经这样做了。只需将gdaltindex指向包含modis映像集合的目录,它将构建一个适用于mapserver的shapefile索引。下一步是添加时间信息。伪代码看起来像:

  • 打开index.dbf文件进行读取

  • 创建新列以保存图像采集日期

  • 对于每个图像;1)提取图像采集日期,2)将其插入新列

  • 关闭index.dbf文件

这种一般方法可用于许多情况。像Perl、PHP或Python这样的脚本语言工作得很好,因为它们都有操作.dbf文件的现成模块。最坏的情况是使用桌面工具(如mircosoft access或esri arcview)手工编辑生成的.dbf文件。

WCS 2.0应用概况-地球观测(EO-WCS)

OGC目前正在讨论为WCS 2.0(EO-WCS)采用地球观测(EO)应用概要(见 public RFC on EO-WCS )有关实现,请参考开源项目 EOxServer 它已经基于MapServer实现了这一提议的EO-WCS。

待办事项和已知限制

  • MapServer没有从给定的数据集中派生出它所能获得的所有元数据。例如,必须明确列出一个层所覆盖的时间段。随着时间的推移,情况会有所好转。

  • 在目前的实现中,只有空间、简单的时间和辐射波段子集是可能的。未来的增强应该允许基于像素值或平铺/图像属性的任意子集。

  • 可用的WCS 2.0规范文档集尚未完成。因此,对于一些实现细节,必须根据为WCS 1.1和1.0所采取的方法来预期一些即将到来的扩展的内容。一旦新的规范文件可用,将立即调整实施。

  • 如果要使用libxml2或其派生工具(如xmllint)进行验证,请注意libxml2中当前有一个bug破坏了GML3.2.1的验证。

信用

加拿大气象局为每层创建选项提供了资金支持。